با استفاده از std::thread یک برنامهٔ C++ بنویسید که یک آرایهٔ بزرگ از اعداد صحیح را به n ترد تقسیم کند، هر ترد مجموع بخش خود را محاسبه کرده و در نهایت مجموع کلی و زمان اجرا را گزارش دهد.

5.0 بازدید آخرین ویرایش در 202 روز قبل ساعت 03:03

0.0

آرایه را به بخش‌های مساوی تقسیم کنید، برای هر بخش یک std::thread بسازید که جمع جزئی را محاسبه کند، سپس تردها را join کنید و جمع نهایی را از مجموع مقادیر جزئی به‌دست آورید؛ برای جلوگیری از رقابت داده‌ها می‌توانید هر ترد مقدار جزئی را در یک مکان جدا (مثل یک وکتور از long long) ذخیره کند یا از std::mutex / std::atomic برای به‌روزرسانی متغیر مشترک استفاده کنید. از std::thread و هدر استفاده کنید و برای زمان‌سنجی از بهره ببرید، همچنین تعداد تردها را می‌توانید با std::thread::hardware_concurrency() تعیین کنید؛ کامپایل با -std=c++11 یا بالاتر توصیه می‌شود.

توسط پژوهشگر در 202 روز قبل ساعت 03:03
دسته بندی ها: C Plus Plus C Plus Plus for beginner
reyhaneh در 202 روز قبل ساعت 07:39

برای اجرای چندتردی با std::thread، آرایه را به بخش‌های مساوی تقسیم کنید و هر ترد مجموع بخش خود را محاسبه کند. بهتر است نتایج جزئی را در یک آرایهٔ جداگانه ذخیره کنید تا از رقابت داده‌ها جلوگیری شود (یا از mutex/atomic استفاده کنید). با اندازه‌گیری زمان با std::chrono و تعیین تعداد تردها با hardware_concurrency(), می‌توانید کارآیی را بسنجید؛ اگر hardware_concurrency() مقدار صفر بدهد، از یک مقدار پشتیبان مانند 2 یا 1 استفاده کنید. همچنین مراقب باقیمانده‌ها و مسائل false sharing باشید.

گزارش

1 پاسخ

جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من

در حال بارگیری...
ورود به حساب کاربری