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