2016-05-28 3 views
0

Я должен оптимизировать приведенный ниже код, чтобы он выполнялся как можно быстрее в 16 раз с использованием openMP и блокировки памяти. До сих пор я могу думать только о сворачивании циклов for с моим простым заявлением ниже. Это заставляет его работать в 3 раза быстрее. Любые идеи о приближении к 16?Оптимизация OpenMP с c

int i,j; 
#pragma omp parallel for collapse(2) //my inserted code 
for (i = 0; i < MSIZE; i++) 
    for (j = 0; j < MSIZE; j++) 
     d[i][j] = c[j][i]; 
+0

Сколько ядер у вас есть? если вы хотите, чтобы какой-то код работал быстрее на 16 раз. Вам понадобится не менее 17 ядер;) (кроме оптимизации алгоритма) –

+0

@MichalWalenciak У меня есть 10 ядер – user6382770

+0

, тогда ~ 9 раз быстрее будет ваш максимум. Насколько велика 'MSIZE'? Для небольших значений управление потоками будет слишком много. –

ответ

0

При объявлении индекса внутреннего цикла в внешней области, вы должны использовать личное положение, чтобы дать каждый поток своей собственную копии. Коллапс может мешать симд-векторизации.

+1

'collapse' делает внутренний цикл * связанный цикл *, поэтому его итераторы должны быть частными, а также –

Смежные вопросы