avere il codice seguente:Clang + OpenMP su Linux utilizza solo 1 core CPU
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;
}
Se compilo con g ++ poi durante l'esecuzione del codice utilizza 4 core:
g++ -fopenmp -std=c++11 main.cpp
Se compilare con clangore ++ 3.7 quindi durante l'esecuzione del codice utilizza solo 1 nucleo:
clang++-3.7 -fopenmp -std=c++11 main.cpp
In entrambi i casi ho impostati:
OMP_NUM_THREADS=4
Entrambi i compilatori sono stati installati dal repository Debian Testing:
sudo apt-get install g++-5
sudo apt-get install clang-3.7
Quindi, tutte le idee perché il clangore utilizza un solo core? Grazie in anticipo.
Ciao. Usando questa opzione ottengo un errore: '/ usr/bin/ld: impossibile trovare -lomp'. Ho anche provato a usare '-fopenmp = libgomp'. Con questo flag il codice viene compilato ma utilizza ancora 1 core della CPU. – AstrOne
onestamente, IDK cosa c'è che non va, ma vorrei provare ad installare clang dai sorgenti, o installare il pacchetto 'libiomp-dev' e usare '-fopenmp = libomp' o' -fopenmp = libiomp5' ... – Gilles
Rileva libomp è in qualche modo integrato con la libreria intel omp. Inoltre, il pacchetto sta attualmente attraversando una fase di transizione importante nel repository Debian. E per peggiorare le cose è attualmente rimosso dal repository Testing. (ma esiste sul sid). Immagino che dovrò aspettare o semplicemente usare la versione sid. :) Grazie per l'aiuto amico mio! – AstrOne