Изучив проблемы с производительностью кода, я понял, что параллельный код на основе OpenMP, работающий на изолированных ядрах, ограничивает количество потоков одним ядром.
Этот код должен развернуться. цикл for для N ядер (например, $OMP_NUM_THREADS=N):
// g++ -fopenmp -I/usr/include/ -03 test_openmp.cpp -o testomp
#include
#include
#include
#include
const float nano = 1000000000;
int main(){
std::size_t niter = 10000000000;
auto start = std::chrono::system_clock::now();
#pragma omp parallel for
for(std::size_t i = 0; i < niter; i++){
std::size_t x = sqrt(i);
}
auto elapsed = std::chrono::duration_cast(std::chrono::system_clock::now() - start);
std::cout
Подробнее здесь: https://stackoverflow.com/questions/779 ... ingle-core