Monday 15 February 2010

c++ - Can't wrap my head around parallel_for from tbb -


<पूर्व> #include & lt; tbb / concurrent_vector.h & gt; # शामिल करें & lt; tbb / parallel_for.h & gt; # शामिल करें & lt; यादृच्छिक & gt; #define N 1000000 int main () {tbb :: concurrent_vector & lt; u_int32_t & gt; वी (एन); Std :: mt19937 mt; std :: uniform_int_distribution & LT; u_int32_t & gt; जिले (0499); Tbb :: parallel_for (tbb :: blocked_range & lt; tbb :: concurrent_vector & lt; u_int32_t & gt; & gt; (v.begin (), v.end ()), [& amp;] {वापसी जिला (एमटी);}); वापसी (0); }

मुझे ये नहीं मिलता कि यह क्यों काम नहीं कर रहा है, यह मेरी समझ है कि इस समानांतर_पर के इंटरफेस में कंटेनर के प्रारंभिक बिंदु शामिल होना चाहिए एंड पॉइंट और स्टेप का आकार, जो लूप के प्रत्येक पुनरावृत्ति पर किया जाना चाहिए, आखिरी तर्क यह फ़ंक्शन है जिसे इसे निष्पादित किया जाएगा।

अब tbb :: blocked_range यह है कंटेनर (दाएं?) को विभाजित करने के लिए इस्तेमाल किया गया था, इसलिए इस मामले में यह उपयोगी होना चाहिए, मुझे यह काम करने के लिए नहीं मिल रहा है और मुझे ये नहीं मिलता कि क्यों यह बहुत सरल तरीके से यह चलने वाले लोगों के साथ काम नहीं करता है ...

मैं iterators का उपयोग करना चाहूंगा, v.begin () और v.end () या tbb :: block_range, मैं स्थिरांकों के उपयोग से बचने और पुन: प्रयोज्य घटकों के साथ इसे लागू करने और अधिक सी ++ - ish

टीबीबी के पास parallel_for_each फ़ंक्शन टेम्पलेट, iterator आधारित लूप के लिए।

  #include "tbb / parallel_for_each.h" tbb :: Parallel_for_each (v.begin (), v.end (), [& amp;] (u_int32_t & amp; ई) {ई = /*...*/; });    

No comments:

Post a Comment