У меня был неожиданный результат от сокращения параллельного simd openmp на Apple M1 с Clang 17.0.6 и -O3, которого я никогда не встречал с gcc. В конечном итоге проблема сводится к следующему примеру:
У меня был неожиданный результат от сокращения параллельного simd openmp на Apple M1 с Clang 17.0.6 и -O3, которого я никогда не встречал с gcc. В конечном итоге проблема сводится к следующему примеру: [code]std::size_t size = 1024; std::vector vec(size);
double total = 0.0; #pragma omp parallel for simd reduction(+ : total) schedule(static) for (std::size_t itr_x = 0; itr_x < size; ++itr_x) { double val = 1; vec[itr_x] = val; // without this line `total` gives 1024 as expected total += val; } std::cout