یک برنامهٔ جاوا بنویسید که با استفاده از ForkJoinPool و یک RecursiveTask مجموع عناصر یک آرایهٔ بزرگ اعداد صحیح را به‌صورت موازی محاسبه کند.

7.0 بازدید آخرین ویرایش در 220 روز قبل ساعت 02:11

0.0

برای حل، یک کلاس که از RecursiveTask ارث‌بری می‌کند پیاده‌سازی کنید و در متد compute آرایه را تا وقتی طولش از یک آستانه (threshold) بزرگ‌تر است به دو زیرمسئله تقسیم کرده و با fork/join یا invokeAll آن‌ها را اجرا و نتایج را جمع کنید؛ در حالت پایه (اندازه کمتر از آستانه) مجموع خطی بخش را محاسبه کنید. از ForkJoinPool.commonPool() یا ساخت یک ForkJoinPool با پاراللیزم مشخص استفاده و task را با pool.invoke(task) اجرا کنید. نکات: مقدار آستانه را آزمایشی تعیین کنید تا سربار تقسیم/ترکیب مناسب باشد، از متغیرهای اشتراکی خودداری کنید و برای جلوگیری از overflow نوع جمع را مناسب (مثلاً long) انتخاب کنید.

توسط پژوهشگر در 220 روز قبل ساعت 02:11
دسته بندی ها: Java Java for beginner
nima در 220 روز قبل ساعت 10:39

برای بهینه‌سازی، آستانهٔ تقسیم را با آزمایش روی اندازه‌های مختلف آرایه تعیین کنید تا سربار تقسیم و ترکیب کاهش یابد. در کلاس RecursiveTask، در متد compute با تقسیم تا اندازهٔ آستانه به دو زیرمسئله، از fork/join یا invokeAll برای اجرای هم‌زمان استفاده کنید. در حالت پایه، جمع را به‌صورت خطی انجام دهید و از long برای جلوگیری از overflow استفاده کنید. می‌توانید از ForkJoinPool.commonPool() استفاده کنید یا یک ForkJoinPool با سطح موازی مشخص بسازید و با pool.invoke(task) اجرای task را انجام دهید.

گزارش

1 پاسخ

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

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