У меня есть код, который я хочу оптимизировать, который должен работать в разных томах. После выполнения некоторых тестов с использованием разных методов планирования в цикле for, который у меня есть, я пришел к выводу, что наиболее подходящим является выполнение динамического планирования, когда у меня есть только один поток и управляемый иначе. Возможно ли это в openMP?Выберите OpenMP pragma в соответствии с условием
Чтобы быть более точным, я хочу, чтобы иметь возможность сделать что-то вроде следующего:
if(omp_get_max_threads()>1)
#pragma omp parallel for .... scheduling(guided)
else
#pragma omp parallel for .... scheduling(dynamic)
for(.....){
...
}
Если кто-то может помочь мне, я был бы признателен. Другим решением было бы написать два раза цикл for и использовать условие if. Но я хочу избежать этого, если это возможно.
Единственный метод, который я могу думать о том, чтобы дублировать петлю в Условный оператор ... – Mysticial
Вот что я имел в виду и в конце. Плохо, я немного устал. Я знаю, что это одно решение, но оно увеличит также сложность и размер кода. Вот почему это мое последнее средство. – gkaran89
Я думаю, что @Mysticial имеет правильную идею. #pragma обычно управляет событиями, которые происходят во время компиляции, поэтому код, сгенерированный для цикла 'for', вероятно, будет отличаться между двумя - вы используете условие времени выполнения для выбора #pragma самостоятельно. –