با استفاده از کتابخانه در C++ برنامه‌ای بنویسید که یک آرایهٔ بزرگ از اعداد صحیح را به M نخ تقسیم کند، هر نخ مجموع بخش خود را محاسبه کرده و در یک بردار نتایج بنویسد، سپس برنامه مجموع نهایی را از جمع نتایج نخ‌ها محاسبه و چاپ کند.

1.0 بازدید آخرین ویرایش در 221 روز قبل ساعت 01:41

0.0

از هدر استفاده کنید؛ ابتدا یک بردار نتایج با اندازهٔ M از پیش مقداردهی کنید تا همزمان نوشتن نخ‌ها باعث بازتخصیص نشود، سپس محدودهٔ هر نخ (start, end) را محاسبه کرده و با ساختن std::thread برای هر بخش یک لامبدا یا فانکشن اجرا کنید که مجموع بخش را در results[i] بنویسد؛ پس از ایجاد همهٔ نخ‌ها آنها را با join کردن همگام کنید و در پایان مجموع نهایی را از جمع عناصر results محاسبه و چاپ کنید. نکات: از نوشتن همزمان روی اندیس‌های متفاوت بردار پرهیز از قفل‌گذاری را ممکن می‌سازد (مفید در سیستم‌های بلادرنگ/HPC)، می‌توانید از std::thread::hardware_concurrency() برای پیشنهاد تعداد نخ‌ها استفاده کنید و اندازهٔ بلوک‌ها را طوری انتخاب کنید که بار کاری متوازن بماند.

توسط پژوهشگر در 221 روز قبل ساعت 01:41
دسته بندی ها: C Plus Plus C Plus Plus for beginner
arash در 221 روز قبل ساعت 12:21

برای بهبود کارایی، اندازهٔ بلوک‌ها را به گونه‌ای انتخاب کنید که بار کار متعادل بماند و هر نخ با محدودهٔ مشابهی کار کند. نوشتن نتایج هر نخ به صورت مستقل در results[i] امن است، زیرا هر نخ فقط به اندیس مخصوص خود می‌نویسد و با پیش‌آغاز کردن بردار نتایج از بازتخصیص جلوگیری می‌شود. همچنین می‌توانید از std::thread::hardware_concurrency() برای پیشنهاد تعداد نخ‌ها استفاده کنید و با تقسیم دقیق ناحیهٔ آرایه، بارکاری متوازن را حفظ کنید. پس از join کردن نخ‌ها، جمع کل را از روی results محاسبه کنید و چاپ کنید؛ در صورتی که مقدار کل ممکن است بزرگ باشد، از long long یا int64_t استفاده کنید.

گزارش

1 پاسخ

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

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