لماذا يتباطأ كود C++ الخاص بي بشكل كبير عندما يكون حجم المصفوفة 8192؟
مرحباً بالجميع. أكتب برنامجاً بلغة C++ لمعالجة الصور. اكتشفت مشكلة غريبة: عندما يكون حجم المصفوفة (أو خطوة الحلقة) مساوياً تماماً لـ 8192 عنصراً، يبدأ البرنامج في العمل بشكل أبطأ بمقدار 10 مرات. عند الحجم 8191 أو 8193، كل شيء يعمل بسرعة.
إليك كود مبسط يعيد إنتاج المشكلة:
```cpp
#include
#include
#include
int main() {
const int SIZE = 8192;
// إذا استبدلت بـ 8191 أو 8193، السرعة طبيعية
std::vector> matrix(SIZE, std::vector(SIZE, 1));
auto start = std::chrono::high_resolution_clock::now();
long long sum = 0;
for (int i = 0; i < SIZE; ++i) {
for (int j = 0; j < SIZE; ++j) {
sum += matrix[i][j];
}
}
auto end = std::chrono::high_resolution_clock::now();
std::chrono::duration elapsed = end - start;
std::cout << "الوقت: " << elapsed.count() << " ثانية، المجموع: " << sum << std::endl;
return 0;
}
```