আমি কীভাবে কোনও এমপিআই প্রোগ্রাম ডিবাগ করব?


129

আমার একটি এমপিআই প্রোগ্রাম রয়েছে যা সংকলন করে চলে, তবে উদ্ভট কিছু ঘটছে না তা নিশ্চিত করার জন্য আমি এটির মাধ্যমে পদক্ষেপ নিতে চাই। আদর্শভাবে, আমি কোনও নির্দিষ্ট পদ্ধতির সাথে জিডিবি সংযুক্ত করার একটি সহজ উপায় চাই, তবে তা সম্ভব কিনা বা কীভাবে করা যায় আমি সত্যই নিশ্চিত নই। একটি বিকল্প প্রতিটি প্রক্রিয়া পৃথক লগ ফাইলে ডিবাগ আউটপুট লিখতে হবে, কিন্তু এটি সত্যিই একটি ডিবাগার হিসাবে একই স্বাধীনতা দেয় না।

আরও ভাল পদ্ধতির আছে? আপনি এমপিআই প্রোগ্রামগুলি কীভাবে ডিবাগ করবেন?

উত্তর:


62

অন্য কেউ যেমন বলেছেন, টোটালভিউ এটির জন্য আদর্শ। তবে এটি আপনার একটি হাত এবং একটি পা ব্যয় করতে হবে।

ওপেনএমপিআই সাইটের এমপিআই ডিবাগিংয়ে দুর্দান্ত জিজ্ঞাসিত প্রশ্ন রয়েছে । প্রায়শই জিজ্ঞাসিত প্রশ্নাবলীর আইটেম # 6 বর্ণনা করে যে কীভাবে এমডিআই প্রক্রিয়াগুলিতে জিডিবি সংযুক্ত করা যায়। পুরো জিনিসটি পড়ুন, কয়েকটি দুর্দান্ত টিপস রয়েছে।

যদি আপনি দেখতে পান যে আপনার কাছে ট্র্যাক রাখতে অনেকগুলি প্রক্রিয়া রয়েছে তবে স্ট্যাক ট্রেস অ্যানালাইসিস সরঞ্জাম (স্ট্যাট) দেখুন । সম্ভাব্য কয়েক সহস্রাধিক চলমান প্রক্রিয়া থেকে স্ট্যাকের চিহ্ন সংগ্রহ করতে এবং ব্যবহারকারীর কাছে বুদ্ধি করে তাদের উপস্থাপন করার জন্য আমরা এটি লিভারমোরে ব্যবহার করি। এটি একটি পূর্ণ-বৈশিষ্ট্যযুক্ত ডিবাগার নয় (একটি পূর্ণ-বৈশিষ্ট্যযুক্ত ডিবাগারটি কখনই 208k কোর স্কেল করে না), তবে এটি আপনাকে বলবে যে কোন গ্রুপগুলির প্রক্রিয়াগুলি একই কাজ করছে। তারপরে আপনি স্ট্যান্ডার্ড ডিবাগারে প্রতিটি গ্রুপের একজন প্রতিনিধি দিয়ে পদক্ষেপ নিতে পারেন।


14
2010 এর হিসাবে Allinea ডিডিটি একটি সয়ংসম্পূর্ণ ডিবাগার যে দাঁড়িপাল্লা থেকে 208k উপর কোর
মার্ক

1
সুতরাং আমি এগিয়ে যাব এবং এখানে মার্কের উত্তরটিকে উপরে তুলে ধরব। ডিডিটি দুর্দান্ত। এটিও চেষ্টা করে দেখুন। টোটালভিউ এখনই স্ট্যাটের সাথে সংহত করে, সুতরাং আপনার সাইটে যদি টোটাল ভিউ ইনস্টলেশন থাকে তবে আপনি এটিও চেষ্টা করতে পারেন। এলএলএনএল টোটালভিউ এবং ডিডিটিকে চারপাশে রাখে এবং টোটালভিউ অবশেষে কিছুটা কঠোর প্রতিযোগিতা করে।
টড গাম্বলিন

আমি এমপিআই ডিবাগিং ( ওপেন-mpi.org/faq/?category=debugging#serial-debuggers ) এ FAQ- এর লিঙ্কটি দ্বিতীয়টি করতে চাই । বিশেষত, 6 টি বুলেট একটি স্বতন্ত্র প্রক্রিয়াটি কমপক্ষে ডিবাগ করার উপায় বোঝার জন্য একটি ভাল, দ্রুত এবং সহজ (এমনকি আমার পক্ষে যথেষ্ট!)।
জেফ

এফএকিউ পৃষ্ঠার # 6-র পদক্ষেপগুলি আমার জন্য দুর্দান্তভাবে কাজ করেছিল এবং আমার সমস্যাটি নির্ধারণ করতে আমাকে সহায়তা করেছিল। এই জন্য অনেক ধন্যবাদ.
জন Deaton

86

আমি জিডিবি বেশ কার্যকর পেয়েছি। আমি এটি হিসাবে ব্যবহার

mpirun -np <NP> xterm -e gdb ./program 

এটি এক্সটার্ম উইন্ডোগুলি প্রবর্তন করে যা আমি করতে পারি

run <arg1> <arg2> ... <argN>

সাধারণত সূক্ষ্ম কাজ করে

আপনি এই আদেশগুলি একসাথে প্যাকেজ করতে পারেন:

mpirun -n <NP> xterm -hold -e gdb -ex run --args ./program [arg1] [arg2] [...]

সমস্ত এনপি জিডিবি এক্সটারমে আমি কীভাবে একই ইনপুটটি পাঠাতে পারি? উদাহরণস্বরূপ, আমি প্রতিটি প্রক্রিয়াতে দুটি ব্রেকপয়েন্ট যুক্ত করতে চাই এবং সেখানে 16 টি প্রক্রিয়া রয়েছে। এটি করার জন্য এক্সটারমের কোনও বিকল্প আছে কি? আমরা কী স্ক্রিন, টেমাক্স, বা ক্রিস জোন্স এর টার্মিনেটরের একক দৃষ্টিতে সেশনগুলি সংযুক্ত করতে পারি?
osgx

@osgx আপনি কমান্ডগুলি ("ব্রেক এক্সএক্সএক্সএক্স", "ব্রেক ইয়াই", "রান") <file>এবং জিডিবিতে পাস করে এটি -x <file>করতে পারেন।
eush77

তবে আমি একটি ত্রুটি পূরণ করি, ত্রুটি বার্তাটি হ'ল ফাইল এক্সটার্মে এক্সিকিউপি ত্রুটি (এরকম কোনও ফাইল বা ডিরেক্টরি নেই) "
হিটউলহ

যখন আমি jdb এবং ওপেনএমপিআই দিয়ে এটি চেষ্টা করি এটি কার্যকর হয় না, অর্থাত্ প্রতিটি জেডিবি উদাহরণ -Np আর্গুমেন্টকে দেওয়া পরিবর্তে 1 এর num_ranks দেখায়। কোন ধারণা কেন?
মিশেল মুলার 14

26

এখানের অনেকগুলি পোস্ট জিডিবি সম্পর্কে, তবে কীভাবে প্রারম্ভ থেকে কোনও প্রক্রিয়া সংযুক্ত করবেন তা উল্লেখ করবেন না। স্পষ্টতই, আপনি সমস্ত প্রক্রিয়া সংযুক্ত করতে পারেন:

mpiexec -n X gdb ./a.out

তবে এটি বুনোভাবে অকার্যকর যেহেতু আপনার সমস্ত প্রক্রিয়া শুরু করার জন্য আপনাকে প্রায় বাউন্স করতে হবে। আপনি যদি কেবলমাত্র একটি (বা অল্প সংখ্যক) এমপিআই প্রক্রিয়াটি ডিবাগ করতে চান তবে আপনি এটি :অপারেটরটি ব্যবহার করে কমান্ড লাইনে পৃথক এক্সিকিউটেবল হিসাবে যুক্ত করতে পারেন :

mpiexec -n 1 gdb ./a.out : -n X-1 ./a.out

এখন আপনার কেবলমাত্র একটি প্রক্রিয়া জিডিবি পাবে।


আমি "mpiexec -n X gdb ./a.out" ব্যবহার করতে পারি, তবে জিডিবি-টুই মোড ব্যবহার করার কোনও উপায় আছে কি?
হিটওয়াল করুন

16

যেমনটি অন্যরা উল্লেখ করেছে, আপনি যদি কেবলমাত্র কয়েকটি মুখ্য এমপিআই প্রক্রিয়া নিয়ে কাজ করছেন তবে আপনি একাধিক জিডিবি সেশন , পুনঃনির্মাণযোগ্য ভালগ্রাইন্ড বা নিজের প্রিন্টফ / লগিং সমাধানটি রোল করার চেষ্টা করতে পারেন ।

আপনি যদি এর চেয়ে আরও বেশি প্রক্রিয়াগুলি ব্যবহার করেন তবে আপনার সত্যিকার অর্থে একটি সঠিক ডিবাগার দরকার start Openmpi প্রায়শই জিজ্ঞাসিত প্রশ্নাবলী উভয় বিশেষ পরামর্শ দেওয়া হচ্ছে Allinea ডিডিটি এবং TotalView

আমি অ্যালিনিয়া ডিডিটিতে কাজ করি । এটি একটি সম্পূর্ণ বৈশিষ্ট্যযুক্ত, গ্রাফিকাল উত্স-কোড ডিবাগার তাই হ্যাঁ, আপনি পারেন:

  • MPI প্রসেসগুলি ডিবাগ বা সংযুক্ত করুন
  • পদক্ষেপ এবং তাদের গ্রুপ বা পৃথকভাবে বিরতি দিন
  • ব্রেকপয়েন্ট, ঘড়ি এবং ট্রপপয়েন্টস যুক্ত করুন
  • মেমরি ত্রুটি এবং ফাঁস ধরুন

... ইত্যাদি। আপনি যদি গ্রিপস বা ভিজ্যুয়াল স্টুডিও ব্যবহার করেন তবে আপনি ঠিক বাড়িতে থাকবেন।

সমান্তরাল কোডটি ডিবাগ করার জন্য আমরা কিছু আকর্ষণীয় বৈশিষ্ট্য যুক্ত করেছি (এটি এমপিআই, মাল্টি-থ্রেডেড বা সিউডিএ হোক):

  • স্কেলার ভেরিয়েবলগুলি সমস্ত প্রক্রিয়া জুড়ে স্বয়ংক্রিয়ভাবে তুলনা করা হয়: (উত্স: allinea.com )প্রক্রিয়া জুড়ে মান দেখাচ্ছে স্পার্কলাইন

  • আপনি প্রক্রিয়া এবং সময়ের সাথে ভেরিয়েবল এবং এক্সপ্রেশনগুলির মানগুলিও ট্রেস এবং ফিল্টার করতে পারেন: সময়ের সাথে সাথে লগ মানগুলি চিহ্নিত করে

এটা ব্যাপকভাবে মধ্যে ব্যবহৃত হচ্ছে TOP500 যেমন এইচপিসি সাইট, ORNL , NCSA , LLNL , Jülich দেশ। অল।

ইন্টারফেসটি বেশ চটজলদি; ওক রিজের জাগুয়ার ক্লাস্টারে গ্রহণযোগ্যতা পরীক্ষার অংশ হিসাবে আমরা 0.12 এ 220,000 প্রসেসের স্ট্যাক এবং ভেরিয়েবলগুলি পদক্ষেপ এবং মার্জ করার সময়সীমা তৈরি করেছি।

@tgamblin চমৎকার উল্লেখ STAT , যা সাথে সমন্বয় Allinea ডিডিটি , যেমন বেশ কিছু জনপ্রিয় ওপেন সোর্স প্রকল্প না।


8

4
ভ্যালগ্র্যান্ড একটি ইন্টারেক্টিভ ডিবাগারের সমান নয়, তবে এটি MPI এর সাথে কাজ করে তা জেনে আনন্দিত।
জে কনরোড

7

আপনি যদি tmuxব্যবহারকারী হন তবে বেনিডিক্ট মরবাচের স্ক্রিপ্টটি ব্যবহার করে আপনি খুব স্বাচ্ছন্দ্য বোধ করবেন :tmpi

মূল উৎস: https://github.com/moben/scripts/blob/master/tmpi

কাঁটাচামড়া: https://github.com/Ararael3000/tmpi

এটির সাথে আপনার একাধিক প্যানেল রয়েছে (প্রক্রিয়া সংখ্যা) সমস্ত সিঙ্ক্রোনাইজড (প্রতিটি কমান্ড একই সাথে সমস্ত প্যানেল বা প্রসেসে অনুলিপি করা হয় যাতে আপনি xterm -eপদ্ধতির সাথে তুলনা করে অনেক সময় সাশ্রয় করেন )। এছাড়াও আপনি printঅন্য প্যানেলে না গিয়ে যে প্রক্রিয়াটি করতে চান ঠিক তেমন ভেরিয়েবলের মানগুলি জানতে পারবেন , এটি প্রতিটি প্যানেলে প্রতিটি প্রক্রিয়ার জন্য ভেরিয়েবলের মান মুদ্রণ করবে।

আপনি যদি tmuxব্যবহারকারী না হন তবে আমি এটির চেষ্টা করার জন্য দৃ and়ভাবে প্রস্তাব দিচ্ছি।


2
যেহেতু tmpi সত্যিই দুর্দান্ত এবং আমি যা খুঁজছিলাম ঠিক তাই, আমি আমার গিথুব অ্যাকাউন্টে এটি কাঁটাচামচ করেছি: github.com/Ararael3000/tmpi যেহেতু মূল লেখক এটিকে সরিয়ে দিয়েছেন
Azrael3000

6

http://github.com/jimktrains/pgdb/tree/master একটি ইউটিলিটি যা আমি এই কাজটি করার জন্য লিখেছিলাম। কিছু ডক রয়েছে এবং বিনা দ্বিধায় আমাকে প্রশ্ন করতে পারেন।

আপনি মূলত একটি পার্ল প্রোগ্রাম কল করেন যা জিডিবি মোড়ক করে এবং এটি কেন্দ্রীয় সার্ভারে আইও করে দেয় nel এটি প্রতিটি হোস্টে জিডিবি চালিত হতে এবং টার্মিনালে প্রতিটি হোস্টে এটি অ্যাক্সেস করার জন্য আপনাকে অনুমতি দেয়।


ধন্যবাদ! আমি পরবর্তী সময় এমপিআই-তে কাজ করছি আমি অবশ্যই এটি যাচাই করব।
জে কনরোড

5

ডিবাগ করতে এমপিআই অ্যাপ্লিকেশনগুলির screenসাথে একসাথে ব্যবহার gdbকরা দুর্দান্তভাবে কাজ করে, বিশেষত যদি xtermঅনুপলব্ধ থাকে বা আপনি কয়েকটি প্রসেসরের বেশি ব্যবহার করছেন। স্ট্যাকওভারফ্লো অনুসন্ধানগুলি সহ পথটিতে অনেকগুলি সমস্যা ছিল, তাই আমি আমার সমাধানটি পুরোপুরি পুনরুত্পাদন করব।

প্রথমে পিআইডি প্রিন্ট আউট করতে MPI_Init এর পরে কোড যুক্ত করুন এবং আপনার সংযুক্তির জন্য অপেক্ষা করার জন্য প্রোগ্রামটি বন্ধ করুন। মানক সমাধানটি অসীম লুপ বলে মনে হয়; আমি অবশেষে স্থির হয়ে গেলাম raise(SIGSTOP);, যার জন্য continueজিডিবির মধ্যে পালাতে অতিরিক্ত কল দরকার ।

}
    int i, id, nid;
    MPI_Comm_rank(MPI_COMM_WORLD,&id);
    MPI_Comm_size(MPI_COMM_WORLD,&nid);
    for (i=0; i<nid; i++) {
        MPI_Barrier(MPI_COMM_WORLD);
        if (i==id) {
            fprintf(stderr,"PID %d rank %d\n",getpid(),id);
        }
        MPI_Barrier(MPI_COMM_WORLD);
    }
    raise(SIGSTOP);
}

সংকলনের পরে, পটভূমিতে এক্সিকিউটেবল চালান, এবং স্টডারকে ধরুন। তারপরে grepপ্রতিটি প্রক্রিয়াটির পিআইডি এবং র‌্যাঙ্ক পেতে আপনি কিছু কীওয়ার্ডের (এখানে আক্ষরিক পিআইডি) স্ট্যাডার ফাইল করতে পারেন ।

MDRUN_EXE=../../Your/Path/To/bin/executable
MDRUN_ARG="-a arg1 -f file1 -e etc"

mpiexec -n 1 $MDRUN_EXE $MDRUN_ARG >> output 2>> error &

sleep 2

PIDFILE=pid.dat
grep PID error > $PIDFILE
PIDs=(`awk '{print $2}' $PIDFILE`)
RANKs=(`awk '{print $4}' $PIDFILE`)

একটি জিডিবি অধিবেশন প্রতিটি প্রসেসের সাথে সংযুক্ত করা যেতে পারে gdb $MDRUN_EXE $PID। স্ক্রিন সেশনের মধ্যে এটি করা যে কোনও জিডিবি সেশনে সহজেই অ্যাক্সেসের অনুমতি দেয়। -d -mস্ক্রিনটি বিচ্ছিন্ন মোডে শুরু করে, -S "P$RANK"পরে সহজে অ্যাক্সেসের জন্য আপনাকে পর্দার নামকরণ করতে দেয় এবং -lবশ করার বিকল্পটি এটি ইন্টারেক্টিভ মোডে শুরু করে এবং জিডিবি'কে তত্ক্ষণাত প্রস্থান করা থেকে বিরত রাখে।

for i in `awk 'BEGIN {for (i=0;i<'${#PIDs[@]}';i++) {print i}}'`
do
    PID=${PIDs[$i]}
    RANK=${RANKs[$i]}
    screen -d -m -S "P$RANK" bash -l -c "gdb $MDRUN_EXE $PID"
done

একবার জিডিবি স্ক্রিনে শুরু হয়ে গেলে, আপনি স্ক্রিনের -X stuffকমান্ডটি ব্যবহার করে স্ক্রিনগুলিতে ইনপুট স্ক্রিপ্ট করতে পারেন (যাতে আপনাকে প্রতিটি স্ক্রিনে প্রবেশ করতে হবে না এবং একই জিনিসটি টাইপ করতে হবে না) । কমান্ডের শেষে একটি নতুন লাইন প্রয়োজন। এখানে -S "P$i"প্রদত্ত নামগুলি ব্যবহার করে স্ক্রিনগুলি অ্যাক্সেস করা যায় । -p 0বিকল্প সমালোচনামূলক, অন্যথায় কমান্ড থেমে থেমে ব্যর্থ (থাকুক বা না থাকুক আপনি পূর্বে পর্দায় সংযুক্ত করেছি উপর ভিত্তি করে) হয়।

for i in `awk 'BEGIN {for (i=0;i<'${#PIDs[@]}';i++) {print i}}'`
do
    screen -S "P$i" -p 0 -X stuff "set logging file debug.$i.log
"
    screen -S "P$i" -p 0 -X stuff "set logging overwrite on
"
    screen -S "P$i" -p 0 -X stuff "set logging on
"
    screen -S "P$i" -p 0 -X stuff "source debug.init
"
done

এই মুহুর্তে আপনি যে কোনও স্ক্রিনের সাথে সংযুক্ত করে ব্যবহার করে screen -rS "P$i"আলাদা করতে পারেন Ctrl+A+D। কমান্ডগুলি আগের কোডের বিভাগের সাথে সাদৃশ্যতে সমস্ত জিডিবি সেশনে প্রেরণ করা যেতে পারে।


3

আমার ওপেন সোর্স সরঞ্জাম, প্যাডবও রয়েছে, যার লক্ষ্য সমান্তরাল প্রোগ্রামিংয়ে সহায়তা করা। আমি এটিকে একটি "চাকরী পরিদর্শন সরঞ্জাম" বলি কারণ এটি কেবলমাত্র একটি ডিবাগার হিসাবে কাজ করে না যেমন উদাহরণস্বরূপ প্যারালাল শীর্ষের মতো প্রোগ্রাম হিসাবেও কাজ করতে পারে। "ফুল রিপোর্ট" মোডে চালান এটি আপনাকে প্রতিটি র‌্যাঙ্কের উপরে প্রতিটি ফাংশনের জন্য স্থানীয় ভেরিয়েবলের সাথে আপনার অ্যাপ্লিকেশনের মধ্যে প্রতিটি প্রক্রিয়ার ট্রেসগুলি সজ্জিত করে দেখায় (ধরে নিবে -g এর সাথে সংকলিত ধরে নেওয়া)। এটি আপনাকে "এমপিআই মেসেজের সারিগুলি" দেখাবে, এটি কাজের মধ্যে প্রতিটি পদমর্যাদার জন্য বকেয়া প্রেরণ এবং প্রাপ্তির তালিকা।

পুরো প্রতিবেদনটি দেখানোর পাশাপাশি প্যাডবকে কাজের মধ্যে থাকা পৃথক পৃথক বিটগুলিতে জুম করতে বলা সম্ভব, কোনও তথ্য প্রদর্শিত হবে তা নিয়ন্ত্রণ করার জন্য অগণিত বিকল্প এবং কনফিগারেশন আইটেম রয়েছে, আরও তথ্যের জন্য ওয়েব পৃষ্ঠাটি দেখুন।

Padb


3

এমপিআই প্রোগ্রামগুলি ডিবাগ করার "স্ট্যান্ডার্ড" উপায়টি একটি ডিবাগার ব্যবহার করে যা সেই এক্সিকিউশন মডেলটিকে সমর্থন করে।

ইউএনআইএক্স- এ , টোটালভিউ এমপিআই-এর পক্ষে ভাল সমর্থন রয়েছে বলে জানা যায়।


2

আমি এমপিআই প্রসেসের সাথে ডিবাগার সংযুক্ত করতে এই ছোট্ট হোমব্রেইন পদ্ধতিটি ব্যবহার করি - আপনার কোডটিতে এমপিআই_আইনাইট () এর ঠিক পরে নীচের ফাংশনটি, ডিবাগওয়েট () কল করুন। প্রক্রিয়াগুলি কীবোর্ড ইনপুটটির জন্য অপেক্ষা করছে, আপনার কাছে ডিবাগারটি সংযুক্ত করার এবং ব্রেকপয়েন্টগুলি যুক্ত করার জন্য আপনার কাছে সব সময় রয়েছে। আপনার হয়ে গেলে, একটি একক অক্ষর ইনপুট সরবরাহ করুন এবং আপনি যেতে প্রস্তুত।

static void DebugWait(int rank) {
    char    a;

    if(rank == 0) {
        scanf("%c", &a);
        printf("%d: Starting now\n", rank);
    } 

    MPI_Bcast(&a, 1, MPI_BYTE, 0, MPI_COMM_WORLD);
    printf("%d: Starting now\n", rank);
}

অবশ্যই আপনি কেবল ডিবাগ বিল্ডসের জন্য এই ফাংশনটি সংকলন করতে চান।


আমি এমনকি সাধারণ কোডের জন্য লিখেছি এমন এমপিআইয়ের সর্বাধিক ডিবাগ বিবৃতি প্রয়োজন। (LOL) এটি খুব সহায়ক হতে পারে।
ট্র্যাজি

3
এই সমাধানটি এখানে বুলেট 6 এর সমান ( ওপেন-mpi.org/faq/?category=debugging#serial-debuggers )। আপনি নিজের কোড যুক্ত করে কিছুটা উন্নত করতে পারেন gethostname(hostname, sizeof(hostname)); printf("PID %d on host %s ready for attach\n", getpid(), hostname);। তারপরে, আপনি টাইপ করে rsh <hostname_from_print_statement>এবং শেষ পর্যন্ত প্রক্রিয়াটির সাথে সংযুক্ত হন gdb --pid=<PID_from_print_statement>
জেফ

2

একটি এমপিআই প্রক্রিয়াতে জিডিবি সংযুক্ত করার কমান্ডটি অসম্পূর্ণ, এটি হওয়া উচিত

mpirun -np <NP> xterm -e gdb ./program 

এমপিআই এবং জিডিবি-র একটি সংক্ষিপ্ত আলোচনা এখানে পাওয়া যাবে


2

এমপিআই প্রোগ্রাম ডিবাগ করার বেশ সহজ উপায়।

প্রধান () ফাংশনে ঘুম যোগ করুন (কিছু_ সেকেন্ড)

যথারীতি প্রোগ্রামটি চালান

$ mpirun -np <num_of_proc> <prog> <prog_args>

প্রোগ্রাম শুরু হয়ে ঘুমের মধ্যে।

সুতরাং আপনাকে পিএস দ্বারা প্রসেসগুলি খুঁজে পেতে, জিডিবি চালান এবং সেগুলির সাথে সংযুক্ত করার জন্য আপনার কয়েক সেকেন্ড থাকবে।

আপনি যদি QtCreator এর মতো কিছু সম্পাদক ব্যবহার করেন তবে আপনি ব্যবহার করতে পারেন

ডিবাগ-> ডিবাগিং শুরু করুন-> চলমান অ্যাপ্লিকেশনটিতে সংযুক্ত করুন

এবং সেখানে আপনি প্রক্রিয়া খুঁজে।


1

লগ ট্রেস সহ আমি কিছু এমপিআই সম্পর্কিত ডিবাগ করি, তবে আপনি এমপিচ 2: এমপিআইসিএইচ 2 এবং জিডিবি ব্যবহার করলে আপনি জিডিবিও চালাতে পারেন । এই কৌশলটি সাধারণভাবে একটি ভাল অনুশীলন যখন আপনি কোনও ডিবাগার থেকে প্রবর্তন করার জন্য জটিল যে কোনও প্রক্রিয়াটি মোকাবেলা করেন।


ভাঙ্গা নয় এমন অন্য লিঙ্কে পরিবর্তিত হয়েছে, কিছু মন্তব্য যুক্ত করেছেন।
জিম হুনজিকার


0

আর একটি সমাধান হ'ল এসএমপিআই, সিমুলেটেড এমপিআই এর মধ্যে আপনার কোডটি চালানো। এটি একটি ওপেন সোর্স প্রকল্প যার সাথে আমি জড়িত। প্রতিটি এমপিআই র‌্যাঙ্ক একই ইউনিক্স প্রক্রিয়াটির থ্রেডে রূপান্তরিত হবে। তারপরে আপনি এমপিআই র‌্যাঙ্কগুলি পদক্ষেপে সহজেই জিডিবি ব্যবহার করতে পারেন।

এসএমপিআই এমপিআই অ্যাপ্লিকেশনগুলির অধ্যয়নের জন্য অন্যান্য সুবিধার প্রস্তাব দেয়: ক্লেয়ারভয়েয়েন্স (আপনি সিস্টেমের প্রতিটি অংশ পর্যবেক্ষণ করতে পারেন), পুনরুত্পাদনযোগ্যতা (আপনি যদি নির্দিষ্ট না করেন তবে বেশ কয়েকটি রান হুবহু একই আচরণের দিকে পরিচালিত করে), হাইজেনব্যাগের অনুপস্থিতি (সিমুলেটেড প্ল্যাটফর্মটি আলাদা রাখা হয় বলে) হোস্ট এক থেকে), ইত্যাদি।

আরও তথ্যের জন্য, এই উপস্থাপনা বা এটি সম্পর্কিত উত্তর দেখুন

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.