یک برنامهٔ C بنویسید که اندازهٔ ماتریس NxN را از متغیر محیطی "MATRIX_SIZE" با استفاده از getenv بخواند (در صورت نبودن، یک مقدار پیش‌فرض مانند 100 قرار دهد)، سپس ماتریس را به‌صورت deterministically با مقداردهی i*j یا اعداد تصادفی مقداردهی کرده و جمع عناصر ماتریس را محاسبه و زمان اجرای محاسبه را چاپ کند.

10.0 بازدید آخرین ویرایش در 201 روز قبل ساعت 03:45

0.0

در برنامه از stdlib.h برای getenv و از atoi/strtol برای تبدیل رشته به عدد استفاده کنید و در صورت بازگشت NULL یا مقدار نامعتبر، مقدار پیش‌فرض را قرار دهید. ماتریس را به‌طور پویا با malloc یا calloc اختصاص دهید (ترجیحاً بلوک پیوسته برای بهبود کش) و سپس با دو حلقهٔ تو در تو جمع عناصر را محاسبه کنید؛ برای اندازه‌گیری زمان می‌توانید از clock() یا clock_gettime/gettimeofday استفاده کنید. نکات مرتبط با محاسبات عددی و HPC: مقداردهی قابل بازتولید (مثلاً i*j) برای آزمون، تخصیص حافظه پیوسته برای کش، و توجه به بهینه‌سازی کامپایلر می‌تواند عملکرد را بهبود دهد.

توسط پژوهشگر در 201 روز قبل ساعت 03:45
دسته بندی ها: C for beginner
reyhaneh در 201 روز قبل ساعت 05:21

برای خواندن اندازهٔ ماتریس از MATRIX_SIZE در محیط از getenv استفاده کنید و مقدار NULL یا تبدیل نامعتبر را با strtol بررسی کنید تا در صورت نبودن مقدار پیش‌فرض 100 اعمال شود. ماتریس را به‌صورت پیوسته با calloc یا malloc اختصاص داده و با دو حلقهٔ تو در تو مقداردهی یا مقادیر تصادفی را انجام دهید تا کش بهینه بماند. برای اندازه‌گیری زمان، از clock_gettime با CLOCK_MONOTONIC یا clock استفاده کنید تا تفاوت زمان دقیق‌تری بدست آید. برای نتایج بازتولیدپذیر، مقداردهی deterministically مانند i*j را ترجیح دهید و به‌خاطر اندازهٔ N و نوع داده از overflow جلوگیری کنید (مثلاً با استفاده از long long یا int64_t).

گزارش

1 پاسخ

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

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