সাধারণত, আমি সিরিয়াল কোডটি লিখি এবং আমি যখন করি তখন আমি কিছু এক্স ইউনাইট-স্টাইল পরীক্ষার ফ্রেমওয়ার্ক (এমএটিএলবি এক্সউনিট, পাইউনিট / নাক, বা গুগলের সি ++ টেস্টিং ফ্রেমওয়ার্ক) দিয়ে ইউনিট পরীক্ষা লিখি।
গুপ্তচর গুগল অনুসন্ধানের ভিত্তিতে, এমপিআই ব্যবহারকারী অনুশীলনকারীদের ইউনিট পরীক্ষার কোডটি কীভাবে আমি খুব বেশি দেখতে পাইনি। এর জন্য কোন সেরা অনুশীলন আছে?
ইউনিট টেস্টিং এবং পরীক্ষা-চালিত বিকাশের জন্য কৌশলগুলির সাথে তুলনা করে , আমি পরীক্ষার কাঠামোর জন্য আমার কী সফ্টওয়্যার ব্যবহার করা উচিত সে সম্পর্কিত উত্তরগুলি সন্ধান করছি (যদি কোনও উপস্থিত থাকে - উত্তরটি খুব ভাল "নিজের কোড রোল" হতে পারে, যার মধ্যে কাস্টম পরীক্ষার কোডের কেস উদাহরণগুলি সহায়ক হবে)।
আমি যা যা পরীক্ষা করতে দেখছি তার মধ্যে বেশিরভাগ হ'ল ডান হাতের ফাংশন মূল্যায়ন এবং সময় স্টিপারসের জন্য জ্যাকবিয়ান ম্যাট্রিক্স অ্যাসেমব্লিন রুটিন যা আধা-বিযুক্ত পিডিইগুলিকে একীকরণ করবে। আমি পিইটিএসসি ব্যবহার করব, সুতরাং পিইটিএসসি-নির্দিষ্ট কিছু থাকলে, যা আরও সাধারণ পরীক্ষার ফ্রেমওয়ার্ক ছাড়াও সহায়ক হবে।
স্পষ্টকরণের সম্পাদনাগুলি:
একটি উদাহরণ থাকবে ${PETSC_DIR}/src/ts/examples/tutorials/ex2.c
, যেখানে আমি RHSFunction
(ডান হাতের ফাংশন মূল্যায়ন) এবং এর মতো কিছু পরীক্ষা করতে চাইRHSJacobian
(একটি জ্যাকবীয় ম্যাট্রিক্স মূল্যায়ন)। আমি ডান হাত একত্রিত এবং জ্যাকবীয় ম্যাট্রিক্স একত্রিত জন্য জ্ঞাত মানগুলির বিরুদ্ধে পরীক্ষা করছি; কিছু সাধারণ সমস্যার দৃষ্টান্তের জন্য বিশ্লেষণ করে আমি এই মানগুলি পেতে পারি। এই ফাংশনগুলি অ্যাপ্লিকেশন-নির্দিষ্ট ফাংশন যা অন্য কোনও অ্যাপ্লিকেশন-স্তরের ফাংশন ব্যবহার করে না, তবে তারা ফাংশনের মধ্যে ভেক্টর বা ম্যাট্রিক্স অ্যাসেম্বলিটি সম্পন্ন করা হলে (উপরের লিঙ্কযুক্ত পিইটিএসসি উদাহরণ হিসাবে) তারা এমপিআই কল করতে পারে। যদি আমি এমন ফাংশনগুলি লিখি যা কেবলমাত্র কোনও প্রসেসরের কাছে ভেক্টর বা ম্যাট্রিকের স্থানীয় অংশ গণনা করে থাকে তবে আমি গ্লোবালের বিরুদ্ধে পরীক্ষা করতে চাই, যদি সম্ভব হয় তবে একত্রিত সংস্করণ কারণ, সমান্তরাল প্রোগ্রামিংয়ের ক্ষেত্রে নতুন হওয়ার কারণে, আমার কাছে বৈশ্বিক ভেক্টর এবং গ্লোবাল সম্পর্কে চিন্তা করা আরও স্বজ্ঞাত ম্যাট্রিক্স। এই পরীক্ষাগুলি ছোট সমস্যা আকার এবং প্রসেসরের সংখ্যক সংখ্যায় পরিচালিত হবে।
আমি এটি করার জন্য কয়েকটি কৌশল সম্পর্কে ভাবতে পারি:
- একটি কৌশল যা সম্ভবত ভাল কাজ করবে না, এই বিষয়টিতে আমি যে গুগল অনুসন্ধান করেছি তার উপর ভিত্তি করে একটি পরিচিত আউটপুট তৈরি করা, সমান্তরালে আপেক্ষিক / পরম ত্রুটি খুঁজে পাওয়া এবং তারপরে নির্দোষ তুলনা করা। আউটপুটটি সম্ভবত গার্ফড হবে - এমপিআই সহ যে কেউ "হ্যালো, ওয়ার্ল্ড" প্রোগ্রাম লিখেছেন সে কেন জানে - যা ইউনিট পরীক্ষা করার ব্যবহারকে সীমাবদ্ধ করে। ( এটি প্রশ্ন জিজ্ঞাসা করার প্রেরণা ছিল )) ইউনিট-টেস্টিং ফ্রেমওয়ার্কটি কল করার ক্ষেত্রে কিছুটা সম্ভাব্য কৌশলও রয়েছে বলে মনে হয়।
- ফাইলে আউটপুট লিখুন (পিইটিএসসি তে, উদাহরণস্বরূপ, ব্যবহার
VecView
এবংMatView
), এবং পরিচিত আউটপুট এর সাথেndiff
বা এর মতো কোনওটির সাথে তুলনা করুনnumdiff
। ফাইলের তুলনা করে ইউনিট পরীক্ষা করার পূর্ববর্তী অভিজ্ঞতা থেকে এই পদ্ধতির সাথে আমার অন্ত্র অনুভূতিটি হ'ল এটি সূক্ষ্ম হবে এবং এর জন্য কিছু ফিল্টারিংয়ের প্রয়োজন হবে। এই পদ্ধতিটি রিগ্রেশন পরীক্ষার জন্য দুর্দান্ত বলে মনে হচ্ছে, যদিও আমি উপরের ইউটিলিটিগুলি একটি প্লেইন দিয়ে প্রতিস্থাপন করতে পারলামdiff
এবং টেক্সট ফর্ম্যাটগুলি মিলে যাওয়ার বিষয়ে চিন্তা করতে হবে না। আমি একত্রিত হয়েছি যে এই কৌশলটি কমবেশি ওল্ফগ্যাংবাংগারথ এবং অ্যান্ডিবাউয়ারের পরামর্শ দিচ্ছে। পিইটিএসসি এটির কিছু পরীক্ষার জন্যও একই ধরণের ব্যবহার করতে দেখা যায়। - ইউনিট পরীক্ষার কাঠামোটি ব্যবহার করুন, প্রসেসরের উপর এমপিআই র্যাঙ্ক 0 সহ সমস্ত কিছু সংগ্রহ করুন এবং প্রসেসরের র্যাঙ্ক 0 হলেই ইউনিট পরীক্ষাগুলি সম্পাদন করতে বলুন আমি নিয়মের সাথেও এরকম কিছু করতে পারলাম (সম্ভবত এটি সেভাবে আরও সহজ) যদিও ট্রেড অফ যে কোনও ত্রুটি ফিরে পেয়েছে তা আমাকে বলবে যে আমার গণনায় আমার সমস্যা আছে, তবে কোন উপাদানগুলি ত্রুটিতে রয়েছে তা নয়। তারপরে আমার কোনও ইউনিট টেস্টিং আউটপুট গার্ফড হওয়ার বিষয়ে চিন্তা করার দরকার নেই; আমার কেবলমাত্র ইউনিট পরীক্ষার কাঠামোটিকে সঠিকভাবে কল করার বিষয়ে চিন্তা করতে হবে। পিইটিএসসি এর সঠিক প্রোগ্রামগুলি পাওয়া যায় যখন তার উদাহরণ প্রোগ্রামগুলির মধ্যে আদর্শ ভিত্তিক তুলনাগুলি ব্যবহার করে প্রদর্শিত হয়, তবে এই তুলনাগুলি তৈরি করার সময় এটি কোনও ইউনিট টেস্টিং কাঠামো ব্যবহার করে না (এটি অবশ্যই হওয়া উচিত নয়)।
mpiexec
চালানোর জন্য কোনও সমস্যা হওয়া উচিত নয় এবং সেটআপ / টিয়ারডাউন কোডে PETScInitialize
/ PETScFinalize
এর মতো কলগুলি অন্তর্ভুক্ত করা উচিত । (সম্ভবতঃ, আমি যদি পিইটিএসসি ব্যবহার না করতাম, তবে আমি যে লাইব্রেরিগুলি ব্যবহার করছি তার উপর নির্ভর করে MPI_Init
/ / এর এনালগগুলি দিয়ে আমি সেই কলগুলি প্রতিস্থাপন করতাম MPI_Finalize
)) গুগলের পরীক্ষার কাঠামো একটি উত্স-ভিত্তিক প্রকাশ, তাই কোড আই সহ এটি সংকলন করবো লেখার ক্ষেত্রেও সমস্যা হবে না।
RHSFunction
এবং RHSJacobian
ইন ${PETSC_DIR}/src/ts/examples/tutorials/ex.2
) বিচ্ছিন্নতার মধ্যে একটি একক ফাংশন অনুশীলন করা উচিত ।