برنامه‌ای به زبان 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 را اضافه کنید.

توسط پژوهشگر در 221 روز قبل ساعت 01:28
دسته بندی ها: C Plus Plus C Plus Plus for beginner
nima در 221 روز قبل ساعت 13:09

برای کارایی بهتر، هر نخ مجموع محلی بخش خودش را محاسبه کند و فقط برای افزودن به جمع کل از mutex با lock_guard استفاده کند تا مدت زمان قفل کم باشد. بخش‌های آرایه را به‌طور مساوی تقسیم کنید تا بار بین نخ‌ها متوازن بماند. از std::chrono::steady_clock برای اندازه‌گیری زمان اجرای برنامه استفاده کنید و نتیجه را با duration_cast به میلی‌ثانیه نمایش دهید. اگر می‌خواهید شبیه‌سازی real-time انجام دهید، می‌توانید با sleep_for محدودیت‌های زمانی یا بررسی deadlines را اضافه کنید.

گزارش

1 پاسخ

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

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