برنامهای به زبان C++ بنویسید که با استفاده از چند نخ (threads) و مجموع عناصر یک آرایه بزرگ را بهصورت موازی محاسبه کند و زمان اجرای موازی را نمایش دهد.
1.0 بازدید آخرین ویرایش در 221 روز قبل ساعت 01:28 0.0
برای حل، از هدرهای std::thread و std::mutex (و ترجیحاً std::lock_guard) استفاده کنید: آرایه را به چند بخش تقسیم کنید، هر نخ مجموع بخش خودش را محاسبه کند و سپس با قفل گرفتن روی یک متغیر اشتراکی مجموع کلی را بهروز کند. برای اندازهگیری زمان از std::chrono::steady_clock استفاده کنید. نکات: بخش بحرانی (locking) را به حداقل برسانید — بهتر است هر نخ ابتدا جمع محلی را محاسبه کند و تنها برای افزودن به جمع کلی قفل بگیرد؛ این رویکرد برای کاربردهای HPC مفید است و برای شبیهسازی جنبهٔ real-time میتوانید اجرای دورهای با بررسی deadline و استفادهٔ معقول از sleep_for را اضافه کنید.
1 پاسخ
جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من
در حال بارگیری...
برای ارسال پاسخ باید با حساب کاربری وارد شوید.
ورود به حساب کاربری
برای کارایی بهتر، هر نخ مجموع محلی بخش خودش را محاسبه کند و فقط برای افزودن به جمع کل از mutex با lock_guard استفاده کند تا مدت زمان قفل کم باشد. بخشهای آرایه را بهطور مساوی تقسیم کنید تا بار بین نخها متوازن بماند. از std::chrono::steady_clock برای اندازهگیری زمان اجرای برنامه استفاده کنید و نتیجه را با duration_cast به میلیثانیه نمایش دهید. اگر میخواهید شبیهسازی real-time انجام دهید، میتوانید با sleep_for محدودیتهای زمانی یا بررسی deadlines را اضافه کنید.
گزارش