У меня есть следующий код:Clang + OpenMP на Linux использует только один процессор ядро
int main(int argc, char** argv)
{
const int64_t N = 10000000000;
float* data = new float[N];
int64_t i;
omp_set_dynamic(0);
omp_set_num_threads(4);
#pragma omp parallel for
for(i = 0; i < N; ++i)
data[i] = i*i;
return 0;
}
Если я скомпилировать его с г ++, то во время выполнения кода использует 4 ядра:
g++ -fopenmp -std=c++11 main.cpp
Если я скомпилировать его с лязгом ++ 3.7, то во время выполнения кода использует только 1 ядро:
clang++-3.7 -fopenmp -std=c++11 main.cpp
в обоих случаях я установили:
OMP_NUM_THREADS=4
Оба компиляторы были установлены из репозитория Debian Testing:
sudo apt-get install g++-5
sudo apt-get install clang-3.7
Таким образом, любые идеи, почему лязг использует только одно ядро? Заранее спасибо.
Здравствуйте. Используя эту опцию, я получаю сообщение об ошибке: '/ usr/bin/ld: не могу найти -lomp'. Я также пытался использовать '-fopenmp = libgomp'. С этим флагом код компилируется, но он все еще использует 1 ядро ЦП. – AstrOne
честно, IDK, что не так, но я либо попытаюсь установить clang из источников, либо установить пакет libiomp-dev и использовать '-fopenmp = libomp' или' -fopenmp = libiomp5' ... – Gilles
Выключает libomp как-то в комплекте с библиотекой intel omp. Кроме того, пакет в настоящее время претерпевает существенный переход в репозиторий Debian. И чтобы усугубить ситуацию, в настоящее время она удаляется из репозитория тестирования. (но он существует на сиде). Думаю, придется либо ждать, либо просто использовать версию sid. :) Спасибо за помощь моему другу! – AstrOne