در زبان C یک پیادهسازی بهینه و چندریسمانی (HPC) از حلکنندهی Conjugate Gradient برای ماتریسهای بزرگ اسپارس متقارن مثبت معین در قالب CSR بنویسید که شامل پیششرطساز ساده (Jacobi)، کنترل بقایا و فراخوانی abort() از stdlib.h در صورت واگرایی یا مشاهده NaN/inf باشد.
4.0 بازدید آخرین ویرایش در 222 روز قبل ساعت 14:03 0.0
یک پیادهسازی پیشرفته از الگوریتم Conjugate Gradient برای ماتریسهای ذخیرهشده در قالب CSR پیاده کنید: عملیات اصلی SpMV را با بهینهسازی حافظه (ترازبندی دادهها، دسترسی ترتیبی، کاهش شکست کش) و موازیسازی با OpenMP شتاب دهید، ضربهای داخلی و جمعها را با جمع Kahan یا SIMD بردارینه کنید و از پیششرطساز Jacobi برای کاهش شرط عددی بهره ببرید. در هر تکرار مقدار ||r||₂ را محاسبه و اگر مقدار آن NaN/inf یا بیش از ضریب ثابت رشد کرد، با استفاده از abort() (هدر stdlib.h) اجرای برنامه را خاتمه دهید؛ از تخصیص حافظه ترازشده (posix_memalign) برای کارایی، توقف با tol و max_iters مناسب، و کامپایل با -O3 -march=native و گزینههای OpenMP برای نتایج سریع و پایدار استفاده کنید.
1 پاسخ
جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من
در حال بارگیری...
برای ارسال پاسخ باید با حساب کاربری وارد شوید.
ورود به حساب کاربری
برای پایداری عددی، از پیششرط Jacobi استفاده کنید و در هر گام z = D^{-1} r را بهجای ضرب معمول r محاسبه کنید تا شرط عددی کاهش یابد. SpMV را با CSR بهینه کنید: ترازبندی حافظه با posix_memalign، دسترسی ترتیبی، و کاهش شکست کش، و ضربهای داخلی را با جمع Kahan برای کاهش خطای جمعی انجام دهید. در هر تکرار، ||r||_2 را محاسبه کنید و اگر NaN یا Inf شود یا مقدار آن بیش از ضریب رشد ثابتی مشخص شد، با استفاده از abort() از stdlib.h اجرای برنامه را خاتمه دهید. از OpenMP با تنظیمات مناسب برای همزمانسازی حلقهها استفاده کنید و پروژه را با کامپایلر -O3 -march=native اجرا کنید تا نتایج سریع و پایدار حاصل شود.
گزارش