با استفاده از کتابخانه در C++ برنامهای بنویسید که یک آرایهٔ بزرگ از اعداد صحیح را به M نخ تقسیم کند، هر نخ مجموع بخش خود را محاسبه کرده و در یک بردار نتایج بنویسد، سپس برنامه مجموع نهایی را از جمع نتایج نخها محاسبه و چاپ کند.
1.0 بازدید آخرین ویرایش در 221 روز قبل ساعت 01:41 0.0
از هدر استفاده کنید؛ ابتدا یک بردار نتایج با اندازهٔ M از پیش مقداردهی کنید تا همزمان نوشتن نخها باعث بازتخصیص نشود، سپس محدودهٔ هر نخ (start, end) را محاسبه کرده و با ساختن std::thread برای هر بخش یک لامبدا یا فانکشن اجرا کنید که مجموع بخش را در results[i] بنویسد؛ پس از ایجاد همهٔ نخها آنها را با join کردن همگام کنید و در پایان مجموع نهایی را از جمع عناصر results محاسبه و چاپ کنید. نکات: از نوشتن همزمان روی اندیسهای متفاوت بردار پرهیز از قفلگذاری را ممکن میسازد (مفید در سیستمهای بلادرنگ/HPC)، میتوانید از std::thread::hardware_concurrency() برای پیشنهاد تعداد نخها استفاده کنید و اندازهٔ بلوکها را طوری انتخاب کنید که بار کاری متوازن بماند.
1 پاسخ
جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من
در حال بارگیری...
برای ارسال پاسخ باید با حساب کاربری وارد شوید.
ورود به حساب کاربری
برای بهبود کارایی، اندازهٔ بلوکها را به گونهای انتخاب کنید که بار کار متعادل بماند و هر نخ با محدودهٔ مشابهی کار کند. نوشتن نتایج هر نخ به صورت مستقل در results[i] امن است، زیرا هر نخ فقط به اندیس مخصوص خود مینویسد و با پیشآغاز کردن بردار نتایج از بازتخصیص جلوگیری میشود. همچنین میتوانید از std::thread::hardware_concurrency() برای پیشنهاد تعداد نخها استفاده کنید و با تقسیم دقیق ناحیهٔ آرایه، بارکاری متوازن را حفظ کنید. پس از join کردن نخها، جمع کل را از روی results محاسبه کنید و چاپ کنید؛ در صورتی که مقدار کل ممکن است بزرگ باشد، از long long یا int64_t استفاده کنید.
گزارش