সি ++ 17 সমান্তরাল `for_each` এর জন্য থ্রেডের গণনা সীমাবদ্ধ করা সম্ভব?


10

আমি ব্যবহার std::for_eachসঙ্গে std::execution::parস্ট্রাকচার ভেক্টর হিসাবে প্রতিনিধিত্ব বিশাল ইনপুটের জটিল গণনার সঞ্চালন। গণনায় হার্ডওয়্যার সম্পর্কিত কোনও বিলম্বের প্রয়োজন নেই (উদাহরণস্বরূপ নেটওয়ার্ক বা ডিস্ক আইও), এটি "কেবলমাত্র সিপিইউ" গণনা। আমার কাছে এটি যৌক্তিক মনে হচ্ছে যে আমাদের কাছে হার্ডওয়ার রয়েছে এমন আরও ওএস থ্রেড তৈরি করার কোনও বুদ্ধি নেই; তবে ভিজ্যুয়াল সি ++ 2019 গড়ে 50 টি থ্রেড তৈরি করে এবং কখনও কখনও 500 টি পর্যন্ত এমনকি 12 টি হার্ডওয়্যার থ্রেড থাকে।

সেখানে পর্যন্ত গণনা সমান্তরাল থ্রেড সীমিত করতে একটি উপায় আছে কি hardware_concurrencyসঙ্গে std::for_eachএবং std::execution::parএকমাত্র উপায় যুক্তিসংগত থ্রেড তৈরি করতে গণনা সাথে ব্যবহারের কাস্টম কোডে হয়, অথবা std::thread?


open-std.org/jtc1/sc22/wg21/docs/papers/2016/… - তবে আমার কি মনে হয় এটি এখনও প্রস্তাব?
ক্যারামিরিল

1
এমনকি যদি এটি কোনও দিন স্ট্যান্ডার্ড হয়ে যায়, থ্রেড পুলের মূল সমস্যাটি এটি শিরোনামের তুলনায় অনেক কম স্তর std::for_eachএবং অন্যান্য অ্যালগরিদমে <algorithm>। পেছনের মূল ধারণাটি std::execution::parহ'ল সিক্যুয়ালাল কোডের মতো সমান্তরাল কোড তৈরি করা এবং ন্যূনতম কোড এবং শব্দার্থবিজ্ঞানের পরিবর্তনের সাথে বিদ্যমান অ্যালগরিদমের সমান্তরালকরণ।
ভিটালি

উত্তর:


5

সি ++ 17 সমান্তরাল জন্য থ্রেড গণনা সীমাবদ্ধ করা সম্ভব for_each?

না, কমপক্ষে সি ++ 17 এ নেই। তবে, executorsএকটি স্ট্যান্ডার্ডে আসার প্রস্তাব রয়েছে , যা মূলত আপনাকে উচ্চ-স্তরের এসটিএল অ্যালগরিদম ইন্টারফেসের জন্য কার্যকর করা প্রসঙ্গে (অবস্থান এবং সময় বিবেচনায়) প্রভাবিত করার ক্ষমতা দেয়:

thread_pool pool{ std::thread::hardware_concurrency() };
auto exec = pool.executor();
std::for_each(std::execution::par.on(exec), begin(data), end(data), some_operation);

ততক্ষণে, আপনাকে হয় আপনার সংকলক বিক্রেতাকে বিশ্বাস করতে হবে যে তিনি সামগ্রিক পারফরম্যান্সের জন্য সবচেয়ে ভাল কি জানেন, যেমন ভিজ্যুয়াল স্টুডিও রাজ্যের বিকাশকারী :

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

অন্য বিকল্পটি হ'ল একমাত্র স্ট্যান্ডার্ড লাইব্রেরির উপর নির্ভর করা ছেড়ে দেওয়া এবং এসটিএল বাস্তবায়নগুলি ব্যবহার করা যা ইতিমধ্যে নতুন প্রস্তাবটি বৈশিষ্ট্যযুক্ত।

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