Ich habe den folgenden Code:Clang + OpenMP auf Linux verwendet nur 1 CPU-Kern
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;
}
Wenn ich es mit g ++ kompilieren dann während der Laufzeit der Code verwendet 4 Kerne:
g++ -fopenmp -std=c++11 main.cpp
Wenn ich kompiliert es mit Klirren ++ 3.7 dann während der Laufzeit verwendet der Code nur 1 Kern:
clang++-3.7 -fopenmp -std=c++11 main.cpp
In beiden Fällen, die ich gesetzt haben:
OMP_NUM_THREADS=4
Beiden Compiler wurden aus der Debian-Testing-Repository installiert:
sudo apt-get install g++-5
sudo apt-get install clang-3.7
So, irgendwelche Ideen, warum das Klirren nur einen Kern verwendet? Danke im Voraus.
Hallo. Mit dieser Option bekomme ich einen Fehler: '/ usr/bin/ld: kann -lomp nicht finden. Ich habe auch versucht, '-fopenmp = libgomp' zu verwenden. Mit diesem Flag kompiliert der Code aber es verwendet immer noch 1 CPU-Kern. – AstrOne
ehrlich gesagt, IDK was ist falsch, aber ich würde entweder versuchen, clang aus Quellen zu installieren, oder das Paket 'libiomp-dev' zu installieren und '-fopenmp = libomp' oder' -fopenmp = libiomp5' zu verwenden ... – Gilles
Stellt libomp aus ist irgendwie mit der intel omp-Bibliothek gebündelt. Außerdem befindet sich das Paket im Debian-Repository derzeit im Umbruch. Und um es noch schlimmer zu machen, wird es derzeit aus dem Testing-Repository entfernt. (aber es existiert auf der Sid). Ich denke, entweder muss warten oder einfach die Sid-Version verwenden. :) Danke für die Hilfe mein Freund! – AstrOne