Я хотел бы знать, почему это медленнее, если я использую openmp для инициализации векторов, используя этот код:
размер = 7000; chunksize = 700;
Они предназначены для двух разных мест.
#pragma omp parallel for schedule (static, chunksize) private(i)
for (i=0;i<dimension;i++){
visited[i]=0;
used[i]=0;
connected[i]=0;
}
#pragma omp parallel for schedule(static,chunksize) private(j)
for(j=0;j<dimension;j++){
if (mat[next][j]) {
visited[j]=1;
connected[j]=tag;
}
}
У меня 4 ядра (2 физических, 2 логических), и это скорость для первого для: Без Openmp: 0.000048 С Openmp: 0.000168
OpenMP приводит к некоторым накладным расходам. Я не знаю, что у вас есть 7000, но 7000 небольших типов, таких как double или int, могут вписываться в самый быстрый кеш L1 одного процессора и, конечно же, вписываются в следующий больший кеш, что означает, что вы распараллеливаете код которые уже пользуются близкими к лучшим случаям в серийном корпусе.
Кроме того, если переменная вашего mat
существует только в одном месте, потоки могут сражаться за ссылки на нее, что приводит к конфликту и замедлению.
memset
.