এমপিআই ব্যবহার করে এমন কোড / লাইব্রেরির সাথে সামঞ্জস্যপূর্ণ ইউনিট-টেস্টিং ফ্রেমওয়ার্কের জন্য কোনও প্রস্তাবনা?


13

সাধারণত, আমি সিরিয়াল কোডটি লিখি এবং আমি যখন করি তখন আমি কিছু এক্স ইউনাইট-স্টাইল পরীক্ষার ফ্রেমওয়ার্ক (এমএটিএলবি এক্সউনিট, পাইউনিট / নাক, বা গুগলের সি ++ টেস্টিং ফ্রেমওয়ার্ক) দিয়ে ইউনিট পরীক্ষা লিখি।

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

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

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

স্পষ্টকরণের সম্পাদনাগুলি:

একটি উদাহরণ থাকবে ${PETSC_DIR}/src/ts/examples/tutorials/ex2.c, যেখানে আমি RHSFunction(ডান হাতের ফাংশন মূল্যায়ন) এবং এর মতো কিছু পরীক্ষা করতে চাইRHSJacobian(একটি জ্যাকবীয় ম্যাট্রিক্স মূল্যায়ন)। আমি ডান হাত একত্রিত এবং জ্যাকবীয় ম্যাট্রিক্স একত্রিত জন্য জ্ঞাত মানগুলির বিরুদ্ধে পরীক্ষা করছি; কিছু সাধারণ সমস্যার দৃষ্টান্তের জন্য বিশ্লেষণ করে আমি এই মানগুলি পেতে পারি। এই ফাংশনগুলি অ্যাপ্লিকেশন-নির্দিষ্ট ফাংশন যা অন্য কোনও অ্যাপ্লিকেশন-স্তরের ফাংশন ব্যবহার করে না, তবে তারা ফাংশনের মধ্যে ভেক্টর বা ম্যাট্রিক্স অ্যাসেম্বলিটি সম্পন্ন করা হলে (উপরের লিঙ্কযুক্ত পিইটিএসসি উদাহরণ হিসাবে) তারা এমপিআই কল করতে পারে। যদি আমি এমন ফাংশনগুলি লিখি যা কেবলমাত্র কোনও প্রসেসরের কাছে ভেক্টর বা ম্যাট্রিকের স্থানীয় অংশ গণনা করে থাকে তবে আমি গ্লোবালের বিরুদ্ধে পরীক্ষা করতে চাই, যদি সম্ভব হয় তবে একত্রিত সংস্করণ কারণ, সমান্তরাল প্রোগ্রামিংয়ের ক্ষেত্রে নতুন হওয়ার কারণে, আমার কাছে বৈশ্বিক ভেক্টর এবং গ্লোবাল সম্পর্কে চিন্তা করা আরও স্বজ্ঞাত ম্যাট্রিক্স। এই পরীক্ষাগুলি ছোট সমস্যা আকার এবং প্রসেসরের সংখ্যক সংখ্যায় পরিচালিত হবে।

আমি এটি করার জন্য কয়েকটি কৌশল সম্পর্কে ভাবতে পারি:

  • একটি কৌশল যা সম্ভবত ভাল কাজ করবে না, এই বিষয়টিতে আমি যে গুগল অনুসন্ধান করেছি তার উপর ভিত্তি করে একটি পরিচিত আউটপুট তৈরি করা, সমান্তরালে আপেক্ষিক / পরম ত্রুটি খুঁজে পাওয়া এবং তারপরে নির্দোষ তুলনা করা। আউটপুটটি সম্ভবত গার্ফড হবে - এমপিআই সহ যে কেউ "হ্যালো, ওয়ার্ল্ড" প্রোগ্রাম লিখেছেন সে কেন জানে - যা ইউনিট পরীক্ষা করার ব্যবহারকে সীমাবদ্ধ করে। ( এটি প্রশ্ন জিজ্ঞাসা করার প্রেরণা ছিল )) ইউনিট-টেস্টিং ফ্রেমওয়ার্কটি কল করার ক্ষেত্রে কিছুটা সম্ভাব্য কৌশলও রয়েছে বলে মনে হয়।
  • ফাইলে আউটপুট লিখুন (পিইটিএসসি তে, উদাহরণস্বরূপ, ব্যবহার VecViewএবং MatView), এবং পরিচিত আউটপুট এর সাথে ndiffবা এর মতো কোনওটির সাথে তুলনা করুন numdiff। ফাইলের তুলনা করে ইউনিট পরীক্ষা করার পূর্ববর্তী অভিজ্ঞতা থেকে এই পদ্ধতির সাথে আমার অন্ত্র অনুভূতিটি হ'ল এটি সূক্ষ্ম হবে এবং এর জন্য কিছু ফিল্টারিংয়ের প্রয়োজন হবে। এই পদ্ধতিটি রিগ্রেশন পরীক্ষার জন্য দুর্দান্ত বলে মনে হচ্ছে, যদিও আমি উপরের ইউটিলিটিগুলি একটি প্লেইন দিয়ে প্রতিস্থাপন করতে পারলাম diffএবং টেক্সট ফর্ম্যাটগুলি মিলে যাওয়ার বিষয়ে চিন্তা করতে হবে না। আমি একত্রিত হয়েছি যে এই কৌশলটি কমবেশি ওল্ফগ্যাংবাংগারথ এবং অ্যান্ডিবাউয়ারের পরামর্শ দিচ্ছে। পিইটিএসসি এটির কিছু পরীক্ষার জন্যও একই ধরণের ব্যবহার করতে দেখা যায়।
  • ইউনিট পরীক্ষার কাঠামোটি ব্যবহার করুন, প্রসেসরের উপর এমপিআই র‌্যাঙ্ক 0 সহ সমস্ত কিছু সংগ্রহ করুন এবং প্রসেসরের র‌্যাঙ্ক 0 হলেই ইউনিট পরীক্ষাগুলি সম্পাদন করতে বলুন আমি নিয়মের সাথেও এরকম কিছু করতে পারলাম (সম্ভবত এটি সেভাবে আরও সহজ) যদিও ট্রেড অফ যে কোনও ত্রুটি ফিরে পেয়েছে তা আমাকে বলবে যে আমার গণনায় আমার সমস্যা আছে, তবে কোন উপাদানগুলি ত্রুটিতে রয়েছে তা নয়। তারপরে আমার কোনও ইউনিট টেস্টিং আউটপুট গার্ফড হওয়ার বিষয়ে চিন্তা করার দরকার নেই; আমার কেবলমাত্র ইউনিট পরীক্ষার কাঠামোটিকে সঠিকভাবে কল করার বিষয়ে চিন্তা করতে হবে। পিইটিএসসি এর সঠিক প্রোগ্রামগুলি পাওয়া যায় যখন তার উদাহরণ প্রোগ্রামগুলির মধ্যে আদর্শ ভিত্তিক তুলনাগুলি ব্যবহার করে প্রদর্শিত হয়, তবে এই তুলনাগুলি তৈরি করার সময় এটি কোনও ইউনিট টেস্টিং কাঠামো ব্যবহার করে না (এটি অবশ্যই হওয়া উচিত নয়)।

আমি কেবল ইন-হাউস টেস্টিং স্যুটগুলির সাথে পরিচিত, তাই আমি কোনও কিছুর প্রস্তাব দিতে পারি না। বলা হচ্ছে, এই টেস্টিং স্যুটগুলির কোনওটিই কী আপনি কীভাবে নির্ধারণযোগ্য কার্যকর তৈরি করবেন তা নির্দিষ্ট করার অনুমতি দেয় না? যদি তারা তা করে, এমপিআই প্রোগ্রামগুলির জন্য কাজ করে এমন পরীক্ষা তৈরি করা তুচ্ছ হওয়া উচিত।
বিল বার্থ

তাদের উচিত. যে কোনও সংকলিত ভাষায়, এটি কেবলমাত্র কার্যকর করার যোগ্য, তাই এটি mpiexecচালানোর জন্য কোনও সমস্যা হওয়া উচিত নয় এবং সেটআপ / টিয়ারডাউন কোডে PETScInitialize/ PETScFinalizeএর মতো কলগুলি অন্তর্ভুক্ত করা উচিত । (সম্ভবতঃ, আমি যদি পিইটিএসসি ব্যবহার না করতাম, তবে আমি যে লাইব্রেরিগুলি ব্যবহার করছি তার উপর নির্ভর করে MPI_Init/ / এর এনালগগুলি দিয়ে আমি সেই কলগুলি প্রতিস্থাপন করতাম MPI_Finalize)) গুগলের পরীক্ষার কাঠামো একটি উত্স-ভিত্তিক প্রকাশ, তাই কোড আই সহ এটি সংকলন করবো লেখার ক্ষেত্রেও সমস্যা হবে না।
জেফ অক্সবেরি 21

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

আমাকে আরও কংক্রিট হতে দিন। কিছু সংখ্যক প্রসেসরের সাথে আমি একটি ছোট সমস্যাটির পরীক্ষা করতে চাই (যা বলুন, 1-4) হ'ল আমার জড়িত জ্যাকবিয়ান ম্যাট্রিক্স আসলে সঠিক গ্লোবাল জ্যাকবীয়ায় ফলাফল দেয় কিনা। আমি আমার ডান-হাতের ফাংশনটি একটি পরিচিত বিশ্বব্যাপী ডান-হাতের বিপরীতে পরীক্ষা করতে চাই। এই জাতীয় প্রতিটি পরীক্ষার ক্ষেত্রে কেবলমাত্র অ্যাপ্লিকেশনে (উদাহরণস্বরূপ, পিইটিএসসি, টেস্টিং RHSFunctionএবং RHSJacobianইন ${PETSC_DIR}/src/ts/examples/tutorials/ex.2) বিচ্ছিন্নতার মধ্যে একটি একক ফাংশন অনুশীলন করা উচিত ।
জেফ অক্সবেরি

আমি মনে করি না যে একটি কাঠামো বর্তমানে বিদ্যমান যা আপনাকে যা করতে চাইবে তা করতে সহায়তা করবে। পাইক্লায় আমাদের জন্য কয়েকটি কাজ করার জন্য আমরা নাক ঝাঁকুনিতে পরিচালিত হয়েছি, (এবং লিসান্দ্রো এটি এমপিআইপিপি এবং পেটস্কেপি 4 ব্যবহার করেছে)। আপনি কি এমপিচে পরীক্ষার কাঠামোটি দেখেছেন?
অরন আহমদিয়া

উত্তর:


8

আমি সিএমকে / সিস্টেস্ট বিল্ড এনভায়রনমেন্টে সি ++ এমপিআই কোড সহ গুগল টেস্টের খুশি ব্যবহারকারী:

  • সিএমকে স্বয়ংক্রিয়ভাবে এসএনএন থেকে গুগলকেস্ট ইনস্টল / লিঙ্ক করে!
  • টেস্ট যুক্ত করা একটি ওয়ান লাইনার!
  • পরীক্ষাগুলি লেখা সহজ! (এবং গুগল মক খুব শক্তিশালী!)
  • সিটেষ্ট আপনার পরীক্ষায় কমান্ড-লাইন প্যারামিটারগুলি পাস করতে পারে এবং সিডিএজে ডেটা রফতানি করতে পারে!

এটা এভাবে কাজ করে. এমপিআই প্রয়োজন এমন ইউনিট-পরীক্ষার একটি ব্যাচ এমন কিছু my_mpi_test.cppফাইলে লেখা রয়েছে যা দেখতে এই জাতীয় দেখাচ্ছে:

#include <gtest/gtest.h>
#include <boost/mpi.h>

/// Most testing libraries allow to define main yourself to override initialization.
int main(int argc, char* argv[]) {
    ::testing::InitGoogleTest(&argc, argv);  /// Set gtest environment
    mpi::environment env(argc, argv);  /// Set mpi environment
    return RUN_ALL_TESTS();  /// Execute all gtest tests
}

TEST(test_batch_name, test_name) {  /// Then you can create tests as usual,
  using namespace mpi;
  communicator world;  /// and use MPI inside your tests.
  /* ... test stuff here ... */
}

সিএমকেলিস্ট.টেক্সট যা এই পরীক্ষাটি যুক্ত করে তা হ'ল:

add_mpi_test(my_mpi 2)  # Uses 2 MPI processes

যেখানে add_mpi_testসিএমকেকে add_testআমার মূলের ভিতরে আবৃত করে সিএমকেলিস্ট.টেক্সট:

function(add_mpi_test name no_mpi_proc)
  include_directories(${MY_TESTING_INCLUDES})
      # My test are all called name_test.cpp
      add_executable(${name} ${name}_test.cpp)
      add_dependencies(${name} googletest)
  # Make sure to link MPI here too:
  target_link_libraries(${name} ${MY_TESTING_LIBS})
  set(test_parameters ${MPIEXEC_NUMPROC_FLAG} ${no_mpi_proc} "./${name}")
      add_test(NAME ${name} COMMAND ${MPIEXEC} ${test_parameters})
endfunction(add_mpi_test)

এই শেষ অংশটি প্রয়োজনীয় নয় তবে আপনাকে সহজেই এক লাইনে এমপিআই পরীক্ষা যুক্ত করতে দেয়। তারপরে আপনি সিদ্ধান্ত নিতে পারেন যে আপনি প্রতিটি পরীক্ষার জন্য এমপিআই প্রসেসের সংখ্যার হার্ড-কোড করতে চান বা ক্রেস্ট করার জন্য একটি কমান্ড লাইন প্যারামিটারের মাধ্যমে পড়তে পারেন।


4

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

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

রেফারেন্সের জন্য, ট্রিলিনোস ড্যাশবোর্ডে বিভিন্ন ধরণের প্যাকেজ তালিকাভুক্ত রয়েছে এবং আমার কাছে তার সংস্থায় বরং চিত্তাকর্ষক।

সম্পূর্ণ প্রকাশ: আমি একটি কিটওয়্যার কর্মী এবং সিএমকে হ'ল ওপেন সোর্স প্রকল্পগুলির মধ্যে একটি যা কিটওয়্যারের সাথে জড়িত।


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

সিএমকে উইকিতে প্রচুর তথ্য রয়েছে । সেখানে সিএমকেক, সিস্টেস্ট এবং সিপ্যাকের জন্য একটি গুচ্ছ টিউটোরিয়াল রয়েছে। স্ট্যাক ওভারফ্লোতে those অ্যাপ্লিকেশনগুলিতে আমার বেশিরভাগ উত্তর খুঁজে পাই ।
andybauer

andybauer - উত্তরের জন্য ধন্যবাদ। আপনার উত্তরটি সম্পাদনা করা এবং কিটওয়্যারের সাথে আপনার সম্পর্কটি প্রকাশ করতে আপনার কি আপত্তি আছে?
অ্যারন আহমদিয়া

3

আমরা কেবল আমাদের নিজস্ব কোডটিকে চুক্তিতে রোল করি Iআইআই - সংক্ষেপে, আমরা পরীক্ষাগুলি ব্যবহার করে পরীক্ষা চালানোর কাঠামোটি বলি mpirun -np ...। আমরা এর আগে কেবল একটি মেকফাইল-ভিত্তিক পরীক্ষামূলক স্কিম ব্যবহার করেছি (সংকলন, লিঙ্ক, পরীক্ষা চালানো, তারপরে আউটপুটটি যা পূর্বে সংরক্ষণ করা হয়েছিল তার সাথে তুলনা করুন) এবং আপনি এটি এখানে খুঁজে পেতে পারেন:

এবং প্রসঙ্গে, এমপিআইবিহীন লক্ষ্যগুলি এখানে রয়েছে:

আমরা এখানে বর্তমান বিকাশের সাথে সাথে সিএমকেক / সিটেষ্ট ব্যবহার করে জিনিসগুলি আবার লিখছি:


ওল্ফগ্যাং, উত্তরের জন্য ধন্যবাদ! পিইটিএসসি অনুরূপ কিছু করছে বলে মনে হচ্ছে।
জেফ অক্সবেরি

3

ত্রিলিনোসে টুচোস ইউনিট পরীক্ষার জোতা এমপিআই ব্যবহার করে এমন ইউনিট পরীক্ষাগুলি সমর্থন করে। একাধিক প্রক্রিয়া থেকে আউটপুট নিয়ন্ত্রণ করা এবং সমস্ত প্রক্রিয়াতে পাস / ব্যর্থকে একত্রিত করার মতো বিষয়গুলি স্বয়ংক্রিয়। এটা দেখ:

http://trilinos.org/docs/dev/packages/teuchos/doc/html/group__Teuchos__UnitTest__grp.html

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