Mam następujący kod:Clang + OpenMP na Linux używa tylko 1 CPU rdzeń
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;
}
Gdybym go skompilować z g ++ następnie podczas wykonywania kodu wykorzystuje 4 rdzenie:
g++ -fopenmp -std=c++11 main.cpp
Gdybym skompilować go z brzękiem ++ 3.7 następnie podczas wykonywania kodu używa tylko 1 rdzeń:
clang++-3.7 -fopenmp -std=c++11 main.cpp
w obu przypadkach mam ustawić:
OMP_NUM_THREADS=4
obu kompilatorów zostały zainstalowane z repozytorium Debian Testing:
sudo apt-get install g++-5
sudo apt-get install clang-3.7
Więc jakieś pomysły dlaczego tylko brzęk wykorzystuje jeden rdzeń? Z góry dziękuję.
Witam. Korzystając z tej opcji, pojawia się błąd: '/ usr/bin/ld: can not find -lomp'. Próbowałem również użyć '-fopenmp = libgomp'. Za pomocą tej flagi kod się kompiluje, ale nadal używa 1 rdzenia procesora. – AstrOne
Szczerze mówiąc, IDK, co jest nie tak, ale chciałbym albo spróbować zainstalować clang ze źródeł, albo zainstalować pakiet 'libiomp-dev' i użyć '-fopenmp = libomp' lub' -fopenmp = libiomp5' ... – Gilles
Wyłącza libomp jest w jakiś sposób dołączony do biblioteki intel. Ponadto pakiet przechodzi obecnie ważną zmianę w repozytorium Debiana. Co gorsza, jest ona obecnie usuwana z repozytorium testowego. (ale istnieje na sid). Chyba będę musiał poczekać lub po prostu użyć wersji sid. :) Dzięki za pomoc przyjacielu! – AstrOne