Векторы инициализации Openmp

0

Я хотел бы знать, почему это медленнее, если я использую 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

Теги:
parallel-processing
openmp

1 ответ

0
Лучший ответ

OpenMP приводит к некоторым накладным расходам. Я не знаю, что у вас есть 7000, но 7000 небольших типов, таких как double или int, могут вписываться в самый быстрый кеш L1 одного процессора и, конечно же, вписываются в следующий больший кеш, что означает, что вы распараллеливаете код которые уже пользуются близкими к лучшим случаям в серийном корпусе.

Кроме того, если переменная вашего mat существует только в одном месте, потоки могут сражаться за ссылки на нее, что приводит к конфликту и замедлению.

  • 0
    В этом случае лучшим вариантом будет использование memset .

Ещё вопросы

Сообщество Overcoder
Наверх
Меню