// ================================================================== // Author: Jean-Michel Richer // Date: August 2016 // Purpose: use of atomic operation fetch_add to perform reduction // ================================================================== #include #include #include #include #include using namespace std; int main() { const int SIZE = 1024; int *tab = new int [SIZE]; for (int i= 0; i < SIZE; ++i) tab[i] = i+1; // reduction with atomic atomic sum(0); for (int i = 0; i < SIZE; ++i) { sum.fetch_add(tab[i], std::memory_order_relaxed); } cout << "reduction=" << sum << endl; assert(sum == (SIZE)*(SIZE+1)/2); return EXIT_SUCCESS; }