এমপিআই সি ++ ইন্টারফেস থেকে ব্যবহারকারীদের কী বৈশিষ্ট্যগুলির প্রয়োজন?


28

এমপিআই স্ট্যান্ডার্ডের 3.0 সংস্করণটি সি ++ ইন্টারফেসটি আনুষ্ঠানিকভাবে মুছে ফেলে (এটি পূর্বে হ্রাস করা হয়েছিল)। বাস্তবায়নগুলি এখনও এটি সমর্থন করতে পারে, এমপিআই -3 এ নতুন বৈশিষ্ট্যগুলি এমপিআই স্ট্যান্ডার্ডে সি ++ ইন্টারফেস সংজ্ঞায়িত করে না। আরও তথ্যের জন্য http://blogs.cisco.com/performance/the-mpi-c-bindings-hat-happened- এবং-why/ দেখুন ।

এমপিআই থেকে সি ++ ইন্টারফেস অপসারণের অনুপ্রেরণাটি হ'ল সি ইন্টারফেসের তুলনায় এর কোনও উল্লেখযোগ্য মূল্য নেই। "S / _ / :: / g" ব্যতীত খুব কম পার্থক্য ছিল এবং সি ++ ব্যবহারকারীরা নিযুক্ত না হয়ে অভ্যস্ত এমন অনেক বৈশিষ্ট্য (যেমন টেমপ্লেটের মাধ্যমে স্বয়ংক্রিয় টাইপ নির্ধারণ)।

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

এবং হ্যাঁ, আমি বুস্ট :: এমপিআই ( http://www.boost.org/doc/libs/1_54_0/doc/html/mpi.html ) এর সাথে পরিচিত তবে এটি কেবল এমপিআই -1 বৈশিষ্ট্য সমর্থন করে এবং সিরিয়ালাইজেশন মডেলটি হবে আরএমএর পক্ষে সমর্থন করা অত্যন্ত কঠিন।

আমি পছন্দ করি এমন এমপিআই-এর একটি সি ++ ইন্টারফেস হ'ল এলিমেন্টাল ( https://github.com/poulson/Elemental/blob/master/src/core/imports/mpi.cpp ) এর ফলে যাতে লোকেরা কিছুটা প্রো ও কন্টেন্ট সরবরাহ করতে পারে কাছে। বিশেষত, আমি মনে করি এমপিআইপ্যাপ একটি প্রয়োজনীয় সমস্যা সমাধান করে।


আমি মনে করি না যে এটি এই জাতীয় প্রশ্নের উপযুক্ত জায়গা।
জ্যাক পলসন

আপনি কি এর কিছু কারণ দিতে পারেন? এই সাইটের এমপিআইয়ের অনেকগুলি প্রশ্ন আমাকে পরামর্শ দেয় যে এখানকার লোকেরা এই প্রশ্নের উত্তর দেওয়ার জন্য প্রস্তুত। এছাড়াও, প্রতি মিনিটে 0.2 আপগেটগুলি আপনার মূল্যায়নের সাথে অন্য লোকদের একমত হওয়ার পরামর্শ দেয়। যাইহোক, আপনি যদি বর্তমান স্থানটি পছন্দ না করেন তবে পোস্ট করার জন্য বিকল্প জায়গার পরামর্শ দেওয়া আরও সহায়ক হবে।
জেফ

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

@ জেফ: প্রশ্নটি আমার কাছে অনেকটা সমীক্ষার মতোই আসে। আমি এটি মূল্যবান বলে বিতর্ক করি না, তবে আমি সেখানে একটিরও গৃহীত উত্তর দেখতে পাচ্ছি না। এমপিআই ফোরামের জন্য কি এই জাতীয় প্রশ্নটি সাধারণের বাইরে থাকবে?
জ্যাক পলসন

@ জ্যাকপলসন আমি প্রয়োগকারীরা কী সঠিক উত্তর বলে মনে করেন তা জানতে চাই না; গণ্য বিজ্ঞানীদের কী দরকার তা জানতে চাই। এই ক্ষেত্রে, প্রশ্নের উদ্দেশ্যমূলক উত্তর রয়েছে। একটি সঠিক উত্তর নেই তবে এর অর্থ এটি একটি বিষয়গত পরিস্থিতি নয়।
জেফ

উত্তর:


17

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

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

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

সুতরাং আমি মনে করি এমপিআই-এর ইন্টারফেসের C ++ এর বর্তমান ফসলের বিরুদ্ধে এই সমস্তগুলি ষড়যন্ত্র করেছে: পুরানো এমপিআই সি ++ বাইন্ডিংগুলি কোনও সুবিধা দেয় না, এবং বাহ্যিক প্যাকেজগুলির সাথে আসল বিশ্বের সমস্যা ছিল।

এগুলি সমস্তই বলেছিল, আমি এখানে যা বলেছি সেগুলি হত্যাকারী বৈশিষ্ট্যগুলি যা আমি উচ্চ স্তরের ইন্টারফেস থেকে নিতে চাই তা এখানে:

  • এটি জেনেরিক হওয়া উচিত। কোনও ভেরিয়েবলের ডেটা টাইপ নির্দিষ্ট করে দেওয়ার সিদ্ধান্ত নেওয়া সি ++ - এর মতো নয়। অবশ্যই এটি ত্রুটি বাড়ে। এলিমেন্টালের এমপিআইপ্যাপ ক্লাসটি ইতিমধ্যে একটি দুর্দান্ত প্রথম পদক্ষেপ হবে (যদিও আমি বুঝতে পারি না যে কেন হ্যাক MpiMap::typeভেরিয়েবলটি স্থির কনস্ট্যান্ট নয়, যাতে এটি কোনও বস্তু তৈরি না করেই অ্যাক্সেস করা যায়)।

  • এটিতে নির্বিচারে ডেটা প্রকারের স্ট্রিমিংয়ের সুবিধা থাকতে হবে।

  • যে ক্রিয়াকলাপগুলির মধ্যে একটি MPI_Opআর্গুমেন্টের প্রয়োজন হয় (যেমন, হ্রাস) সি ++ এর std::functionইন্টারফেসের সাথে দুর্দান্তভাবে সংহত করা উচিত , যাতে আড়ম্বরপূর্ণভাবে কিছু রেজিস্ট্রেশন না করে কেবল কোনও ফাংশন পয়েন্টার (বা ল্যাম্বদা!) পাস করা সহজ।

বুস্ট :: এমপিআই আসলে এই সমস্তগুলিকে সন্তুষ্ট করে। আমি মনে করি এটি যদি কেবল শিরোনামের গ্রন্থাগার হত তবে এটি অনুশীলনে অনেক বেশি জনপ্রিয় হত। এটি এমপিআই পরবর্তী পোস্ট ১.০ ফাংশন সমর্থন করলে এটিও সহায়তা করবে, তবে আসুন সত্য কথা বলা যাক: আমাদের বেশিরভাগ সময় আমাদের যা প্রয়োজন তা এটি জুড়ে।


বুস্ট :: এমপিআই-এ সিরিয়ালাইজেশনের অন্যতম সমস্যা হ'ল এটি একতরফা (ওরফে আরএমএ) দিয়ে কাজ করে না। আপনি কি মনে করেন যে ব্যবহারকারীরা আগ্রহী সি ++ অবজেক্টগুলির জন্য এমপিআই ডেটাটাইপগুলি তৈরি করা সম্ভব হবে? অবশ্যই, তত্ত্বগতভাবে সমস্ত সমর্থন করা উচিত তবে আমি আরও বাস্তববাদী লক্ষ্য দিয়ে শুরু করতে পছন্দ করি।
জেফ

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

হাই ওল্ফগ্যাং, আপনি সঠিক যে এমপিআইপ্যাপটি আরও মার্জিত হবে যদি এটি স্ট্যাটিক কনস্টের সদস্য ভেরিয়েবল ব্যবহার করে। আমি বাস্তবায়নটিকে পুনর্গঠিত করেছি: github.com/poulson/Elemental/commit/…
জ্যাক পলসন

হ্যাঁ, অনেক সুন্দর :-)
ওল্ফগ্যাং ব্যাঙ্গার্থ

অনেক এমপিআই কল নেই +1 এর মধ্যে @ ওল্ফগ্যাংবাংয়ের্থকে কল করুন। মৌলিকভাবে বলতে গেলে, এমপিআই দ্রুত গণনা করার কথা, আপনি এমপিআই কলগুলি ন্যূনতম করতে চান কারণ সেগুলি আপনার ব্যয় করে!
চার্লস

6

বলটি ঘূর্ণায়মান হওয়ার জন্য, এখানে আমার দুটি প্রয়োজন:

  • ইন্টারফেসটি অপ্রয়োজনীয় বা অপ্রয়োজনীয় যুক্তিগুলি দূর করতে সক্ষম হওয়া উচিত, যেমন MPI_IN_PLACE।
  • ইন্টারফেসটি বিল্ট-ইন ডেটাটাইপস এলিমেন্টালের এমপিআইপ্যাপে স্বয়ংক্রিয়ভাবে সনাক্ত করা উচিত।
  • যদি / যখনই সম্ভব হয়, ক্লাসের জন্য ব্যবহারকারী-সংজ্ঞায়িত ডেটাটাইপগুলি তৈরি করা উচিত।

5

পছন্দের কোনও নির্দিষ্ট ক্রমে আমার তালিকা। ইন্টারফেসের উচিত:

  • কেবলমাত্র শিরোনাম হোন, কোনও নির্ভরতা ছাড়াই কিন্তু <mpi.h>এবং মানক গ্রন্থাগার,
  • জেনেরিক এবং এক্সটেনসিবল হন,
  • কেবল অ-ব্লকিং থাকুন (আপনি যদি অবরুদ্ধ করতে চান তবে স্পষ্টভাবে ব্লক করুন, ডিফল্টরূপে নয়),
  • অবরুদ্ধকরণ অপারেশনগুলির ধারাবাহিকতা ভিত্তিক চেইনিংকে অনুমতি দিন,
  • এক্সটেনসিবল এবং দক্ষ সিরিয়ালাইজেশন সমর্থন করে (বুস্ট.ফিউশন যেমন, এটি আরএমএর সাথে কাজ করে),
  • শূন্য বিমূর্ততা জরিমানা (অর্থাত্ সি ইন্টারফেসের মতো কমপক্ষে দ্রুত হওয়া উচিত),
  • নিরাপদ থাকুন (প্রস্তুত নয় এমন ভবিষ্যতের ধ্বংসকারীকে? -> std :: সমাপ্তি বলা হয়!),
  • DEBUGটন জোর দিয়ে শক্তিশালী মোড আছে ,
  • অত্যন্ত টাইপ-সেফ (সমস্ত কিছুর জন্য আর কোনও ইনটস / অকার্যকর * নেই, হ্যাক আমি ট্যাগগুলি টাইপ হতে চাই!),
  • এটি ল্যাম্বডাস (যেমন সমস্ত হ্রাস + ল্যাম্বদা) নিয়ে কাজ করা উচিত,
  • ত্রুটি-প্রতিবেদনকরণ এবং ত্রুটি-পরিচালনা পদ্ধতি হিসাবে ধারাবাহিকভাবে ব্যতিক্রমগুলি ব্যবহার করুন (আর কোনও ত্রুটি কোডগুলি নেই! কোনও ফাংশন আউটপুট আর্গুমেন্ট নেই!),
  • এমপিআই-আইও-কে বুস্ট.এফআইওর স্টাইলে একটি নন-ব্লকিং আই / ও ইন্টারফেস দেওয়া উচিত,
  • এবং কেবল ভাল আধুনিক সি ++ ইন্টারফেস ডিজাইনের অনুশীলনগুলি অনুসরণ করুন (নিয়মিত ধরণগুলি, অ-সদস্যবিহীন অ-বন্ধু ফাংশনগুলি সংজ্ঞায়িত করুন, সরানো শব্দার্থবিজ্ঞানের সাথে ভাল খেলুন, সমর্থন পরিসীমা ক্রিয়াকলাপগুলি ...)

অতিরিক্ত:

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

  • এসটিএল (এবং বুস্ট) নামকরণের কনভেনশনটি ব্যবহার করুন। কেন? প্রতিটি সি ++ প্রোগ্রামার এটি জানেন।

আমি এই জাতীয় কোড লিখতে চাই:

auto buffer = some_t{no_ranks};
auto future = gather(comm, root(comm), my_offsets, buffer)
              .then([&](){
                /* when the gather is finished, this lambda will 
                   execute at the root node, and perform an expensive operation
                   there asynchronously (compute data required for load 
                   redistribution) whose result is broadcasted to the rest 
                   of the communicator */
                return broadcast(comm, root(comm), buffer);
              }).then([&]() {
                /* when broadcast is finished, this lambda executes 
                   on all processes in the communicator, performing an expensive
                   operation asynchronously (redistribute the load, 
                   maybe using non-blocking point-to-point communication) */
                 return do_something_with(buffer);
              }).then([&](auto result) {
                 /* finally perform a reduction on the result to check
                    everything went fine */
                 return all_reduce(comm, root(comm), result, 
                                  [](auto acc, auto v) { return acc && v; }); 
              }).then([&](auto result) {
                  /* check the result at every process */
                  if (result) { return; /* we are done */ }
                  else {
                    root_only([](){ write_some_error_log(); });
                    throw some_exception;
                  }
              });

/* Here nothing has happened yet! */

/* ... lots and lots of unrelated code that can execute concurrently 
   and overlaps with communication ... */

/* When we now call future.get() we will block 
   on the whole chain (which might have finished by then!).
*/

future.get();

এমপিআই_সিসি ব্যবহার করে কীভাবে কেউ এই সমস্ত ক্রিয়াকলাপকে চেইন করতে পারে তা ভাবুন request। আপনি অবরুদ্ধ ছাড়াই আপনার চেইনকে এগিয়ে নিতে পারেন কিনা তা দেখতে আপনাকে অনেকগুলি সম্পর্কযুক্ত কোডের মাধ্যমে একাধিক (বা প্রতিটি একক) মধ্যবর্তী পদক্ষেপে পরীক্ষা করতে হবে ।


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

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

সমস্যাটি হ'ল এমপিআই অপারেটিং সিস্টেম থেকে স্বেচ্ছায় অনুরোধ করতে পারে can আমার অ্যাপ্লিকেশনটিতে একটি থ্রেড পুল রয়েছে এবং আমি চাই এমপিআই আমার থ্রেড পুল থেকে সেই থ্রেডগুলির জন্য অনুরোধ করবে। এটি বর্তমানে সম্ভব নয় (এবং সাধারণত সমস্যা নয়), যদি না আপনার ওপেনএমপি, টিবিবি, এবং এমপিআই, যার নিজস্ব থ্রেড পুল, প্রতিটি 4x সংখ্যার কোরের সাথে ব্যবহার করে অ্যাপ্লিকেশন না থাকে।
gnzlbg

1
এমপিআই কিন্তু সাধারণত ওএস থ্রেডগুলি অভ্যন্তরীণভাবে ব্যবহার করে না। আমি পরিচিত প্রতিটি ক্ষেত্রে (এমপিআইসিএইচ (2), এমভিএপিসিএইচ 2, ওপেনএমপিআই, ক্রাইএমপিআই), কেবলমাত্র একটি রানটাইম বিকল্প ব্যবহারকারী দ্বারা সরবরাহ করা কারণ এটি ঘটায়, অর্থাত্ ডিফল্টটি এটি হয় না। ব্লু জিন / কিউ এমপিআই একটি ব্যতিক্রম তবে এমন একটি ফর্ম হিসাবে যাতে এই আলোচনার সাথে প্রাসঙ্গিক না হয়।
জেফ

ধন্যবাদ @ জেফ! আপনি কীভাবে এমপিআই একক থ্রেড ব্যবহার করার সময় একাধিক নন-ব্লকিং কল পরিচালনা করেন তা বিশদভাবে বলতে পারেন? এটি কর্টিন / সবুজ থ্রেড / ফাইবার ব্যবহার করে?
gnzlbg

2

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

কেবলমাত্র সি-স্টাইলের এমপিআইয়ের সাথে আমাকে সত্যিই বিরক্ত করে তা হ'ল কাস্টম ডেটাটাইপগুলি এবং কিছুটা কম কাস্টম অপারেশন (কারণ আমি সেগুলি কম ঘন ঘন ব্যবহার করি)। কাস্টম ডেটাটাইপ হিসাবে, আমি বলতে পারি যে একটি ভাল সি ++ ইন্টারফেসটি সম্ভবত পরিচালনা করার মাধ্যমে জেনেরিক এবং দক্ষ পদ্ধতিটি পরিচালনা করতে সক্ষম হওয়া উচিত। এটি অবশ্যই সেই রুটটি boost.mpiনিয়েছে যা আপনি যদি সাবধান হন তবে একটি বড় সময় রক্ষাকারী।

হিসাবে boost.mpiঅতিরিক্ত নির্ভরতা থাকার (বিশেষত boost.serializationশুধুমাত্র হেডার না যা নিজেই করা হয়), আমি সম্প্রতি একটি হেডার শুধুমাত্র সি ++ ধারাবাহিকতাতে গ্রন্থাগার নামক জুড়ে এসেছিল থাকেন খাদ্যশস্য যা প্রতিশ্রুতি বলে মনে হয়; মঞ্জুরিপ্রাপ্ত এর জন্য একটি সি ++ 11 কমপ্লায়েন্ট সংকলক প্রয়োজন। এটা তোলে মূল্য মধ্যে খুঁজছেন এবং অনুরূপ কিছু ভিত্তি করে এটি ব্যবহার হতে পারে boost.mpi


নোট করুন যে আমি এমপিআই স্ট্যান্ডার্ডে রাখার জন্য অগত্যা কিছু খুঁজছিলাম না। আমি সম্পূর্ণরূপে সম্মত হই যে এমপিআইয়ের প্রায় সর্বদা "কিছু উচ্চ স্তরের কোড দ্বারা গুটিয়ে রাখা উচিত", তাই আমি অবাক হওয়ার মতো কী, সেই উচ্চ স্তরের কোডটি কেমন দেখাচ্ছে? এলিমেন্টাল একটি দুর্দান্ত পদ্ধতির আছে, তবে এটি কি সব ক্ষেত্রেই সেরা? যদি কেউ এমপিআইতে সি ++ ইন্টারফেস রাখতে চায় যা খুব বড় সংখ্যক লোককে খুশি করার চেষ্টা করে তবে তা দেখতে কেমন হবে?
জেফ

@Jeff। আমার জন্য: 1. আমি সহজেই কাস্টম ডেটা প্রকারগুলি প্রেরণ করতে সক্ষম হতে চাই like ২. আমি স্বাচ্ছন্দ্যে কাস্টম অপারেশনগুলির সাথে হ্রাস সম্পাদন করতে সক্ষম হতে চাই। এছাড়াও আমি মনে করি 1 টি 2 এর চেয়েও বেশি গুরুত্বপূর্ণ / দরকারী হয়ে
উঠছি

আমি দেখতে পাচ্ছি না যে সি ++ কীভাবে যাদুকরী কিছু করতে পারে (2)। আপনি এখানে কি কল্পনা করবেন?
জেফ

@thrust
জেফ

-1

গিথুব প্রকল্প গিথুব ইজিলম্বদা সি ++ 14 দিয়ে এমপিআইতে একটি উচ্চ স্তরের ইন্টারফেস সরবরাহ করে।

আমি মনে করি প্রকল্পটির একই লক্ষ্য রয়েছে এবং এটি আধুনিক সি ++ ব্যবহার করে এই অঞ্চলে যেগুলি হতে পারে এবং করা হচ্ছে সেগুলি সম্পর্কে কিছু ধারণা দেবে। অন্যান্য প্রচেষ্টার পাশাপাশি ইজলম্বদা নিজেই গাইড করে।

কার্য সম্পাদন এবং কোডের লাইনগুলির প্রাথমিক মানদণ্ডগুলি আশাব্যঞ্জক ফলাফল দেখিয়েছে।

এখানে চিত্র বর্ণনা লিখুন

নীচে এটি সরবরাহ করে এমন বৈশিষ্ট্য এবং ইন্টারফেসের একটি সংক্ষিপ্ত বিবরণ দেওয়া হল।

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

আমি আশা করি এখানে আরও বিশদ এবং উদাহরণ কোড যুক্ত করার পরিবর্তে লিঙ্কগুলি দেওয়া ভাল।

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


প্রশ্নটি বলে " আমরা দীর্ঘ উত্তর খুঁজছি যা কিছু ব্যাখ্যা এবং প্রসঙ্গ সরবরাহ করে। কেবল একটি এক-লাইন উত্তর দেবেন না; কারণ আপনার উত্তরটি সঠিক কেন, আদর্শভাবে উদ্ধৃতি দিয়ে ব্যাখ্যা করুন expla যে ব্যাখ্যাগুলিতে অন্তর্ভুক্ত নেই এমন উত্তরগুলি সরানো যেতে পারে । "। আপনি কেন মনে করেন যে এই উত্তরটি ফিট করার জন্য আপনার উত্তর যথেষ্ট পরিপূর্ণ?
নিকোগুয়ারো

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

@ উটকারশ ভরদ্বাজ: কিছু মন্তব্য: (১) এমন একটি লাইব্রেরি লেখার জন্য আপনাকে ধন্যবাদ যা এমপিআইয়ের সাথে সি ++ ইন্টারফেস করে। এটি একটি তাৎপর্যপূর্ণ উদ্যোগ এবং এটি দেখে মনে হচ্ছে আপনি এতে প্রচুর কাজ চালিয়ে গেছেন। (২) দস্তাবেজগুলি দ্রুত (আবার, দুর্দান্ত কাজ) বারণ করা হচ্ছে, যা ব্যবহার করা হয়েছে তা হ'ল পদ্ধতি কমান্ডগুলির দীর্ঘ শৃঙ্খলাগুলি যা স্টাইলিস্টিকভাবে ... ডিবাগ করার জন্য বেদনাদায়ক বলে মনে হচ্ছে, যদিও আপনি সেগুলি সুন্দরভাবে ফর্ম্যাট করেছেন। (৩) বিমূর্ততাগুলি একটি কার্যকরী দৃষ্টান্তটি অনুমান করে, যা মানচিত্র-হ্রাস-মতো কাজের জন্য দরকারী বলে মনে হয় তবে এমপিআইতে প্রোগ্রাম করা এমন একজন হিসাবে আমি আমার অ্যালগরিদমগুলি পুনরায় কাজ করতে এবং আমার পরিচিত ইন্টারফেসগুলি থেকে খুব বেশি দূরে সরে যেতে চাই না।
জিফ অক্সবেরি

(৪) আমি উদাহরণটিতে কোথাও যোগাযোগকারী দেখতে পাচ্ছি না, যা আমাকে সন্দেহ করতে পরিচালিত করে যে আপনি সবকিছুর জন্য এমপিআই_সিএমএম_আরএলডি ব্যবহার করছেন, এবং আপনার গ্রন্থাগারের সম্ভাবনাকে সীমাবদ্ধ করেছেন। (৫) বিমূর্ততাগুলি এমপিআই বিমূর্ততাগুলি তৈরি করে বলে মনে হচ্ছে এবং এটির একটি আলাদা ব্যাকএন্ড থাকতে পারে। ()) উপর ভিত্তি করে (3) - (5), আমি মনে করি না এই লাইব্রেরিটি একটি এমপিআই ইন্টারফেস, এবং আমি বিশ্বাস করি যে ফলস্বরূপ এই মন্তব্যটি অফ-টপিক।
জিফ অক্সবেরি

@ জিওফ মূল্যবান প্রতিক্রিয়ার জন্য ধন্যবাদ, অনেক প্রশংসা। নির্দিষ্ট পয়েন্টগুলিতে জবাব দিন: 2) শৃঙ্খলটিকে কখনও কখনও এক্সপ্রেশনবিল্ডারও বলা হয় । এটি কার্যকরী শৈলীতে রচনা প্রকাশের একটি সাধারণ উপায়। ইজিতে এই স্টাইলে লেখার প্রয়োজন নেই। প্রথমে পৃথক ইউনিটগুলি লিখতে এবং তারপরে তাদের রচনা করা সম্ভব, [উদাহরণস্বরূপ] ( goo.gl/YzaL0k ) পরীক্ষা করুন । 3) আমি জানি যে নিয়ন্ত্রণ-প্রবাহ এবং অপরিহার্য থেকে ডেটাফ্লো এবং ক্রিয়ামূলক দিকে যাওয়া শক্ত। প্রত্যেকেরই রয়েছে বিপরীতে তবে, আমি বিশ্বাস করি যে এর পরবর্তী কার্যকারিতাটি জানতে তার আরও কার্যকর হওয়া দরকার।
উত্কর্ষ ভরদ্বাজ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.