В моем коде я использую простую переменную int (named counter) для синхронизации 4 потоков.Не оптимизируйте определенный цикл с использованием флага -O3 в GCC
Вот отрывок из моего кода:
int counter = 0;
#pragma omp parallel shared(counter) num_threads(4)
{
while(counter != thread_id){
// What should I put here?
}
// Actions needed to be performed 'in order'
counter++;
// The rest of the code
}
Проблема я столкнулся в том, что если я использую -O3 оптимизации флаг, то время цикла пропадают в скомпилированный код ... Если для Например, я помещаю строку printf внутри цикла, происходит и все работает нормально ...
Что следует помещать внутри цикла while, поэтому -O3 не влияет на его поведение?
--- Редактировать ---
Извините за отсутствие контекста ... Мне нужно создать команду нитей, которые работают на конкретном proccessors, так как я работаю с системой NUMA, так что я нужен " создание команды "в порядке, чтобы я мог использовать сродство к процессору ... Пожалуйста, смотрите этот вопрос: Specific thread order in C using GCC and OMP
Вы пытаетесь синхронизировать/присоединяться к своим темам? Для этого у OpenMP уже есть конструкции. Не пытайтесь катиться самостоятельно; что полностью побеждает точку! –
Если вы пытаетесь синхронизировать потоки таким образом, ** я передам все ответы, которые расскажут вам, как это сделать **. –
Как правило, если цикл, кажется, ничего не делает, вы не должны удивляться, если он просто отбрасывается оптимизатором. –