я делаю тест о производительности OpenMP, бушель я найти какие-то странные результаты, вот мой тестовый код:Производительность OpenMP
void test()
{
int a = 0;
clock_t t1 = clock();
int length =50000;
double *t3 = new double[length]();
double *t4 = new double[length]();
for (int i = 0; i <8000; i++)
{
for (int j = 0; j < length; j++)
{
t3[j] = t3[j] + t4[j];
}
}
clock_t t2 = clock();
printf("Time = %d %d\n", t2 - t1,omp_get_thread_num());
delete[] t3;
delete[] t4;
}
int main()
{
clock_t t1 = clock();
printf("In parallel region:\n");
#pragma omp parallel for
for (int j = 0; j < 8; j++)
{
test();
}
clock_t t2 = clock();
printf("Total time = %d\n", t2 - t1);
printf("In sequential region:\n");
test();
printf("\n");
}
когда я установить length=50000
или length=100000
или length=150000
соответственно, результаты показали на рисунке:
странно, что
- Истекшее время не является прямой линией (прошедшее время, когда
length=150000
почти в 5 раз больше, чем приlength=50000
), а сумма вычислений - прямая линия вверх. - также странно, что прошедшее время для тестовой функции в параллельной области не совпадает с прошедшим временем для тестовой функции в последовательной области, когда
length=150000
.
мой центральный процессор Intel Core i5-4590 (4 ядра) и платформа vs2013, win8
Я готов надеюсь кто-нибудь может сказать мне причину и как решить эту проблему, чтобы улучшить производительность спасибо, спасибо.
@ZheyuanLi я выбираю этот код из книги, так какой таймер я должен использовать, чтобы получить правильный результат? – Debo
@Debo use 'omp_get_wtime()' –