我想按照本指南: http://gcc.gnu.org/onlinedocs/libstdc++/manual/bk01pt12ch31s03.html爲什麼GNU Parallel擴展似乎會讓算法變慢?
下面是一些示例代碼:
#include <numeric>
#include <vector>
#include <iostream>
#include <chrono>
using namespace std;
int main()
{
vector<int> in(1000);
vector<double> out(1000);
iota(in.begin(), in.end(), 1);
auto t = std::chrono::high_resolution_clock::now();
for(int i = 0; i < 100000; ++i)
accumulate(in.begin(), in.end(), 0);
auto t2 = std::chrono::high_resolution_clock::now();
cout << std::chrono::duration_cast<std::chrono::milliseconds>(t2 - t).count() << endl;
return 0;
}
我有以下結果:
~:$ g++ test.cpp -std=c++11
~:$ ./a.out
900
~:$ g++ test.cpp -D_GLIBCXX_PARALLEL -std=c++11 -fopenmp -march=native
~:$ ./a.out
1026
當進行多次試驗,這兩個停留在大約在同一時間。 我也嘗試過其他算法,如排序,生成,查找,轉換... 我有一個i7,啓用超線程(4個邏輯核心)。 我跑的g ++ - 4.8.1
感謝
請記住,在創建線程時,和操作系統在它們之間進行切換存在的開銷。對於像你這樣的小型循環來說,開銷可能很大,你應該嘗試使用更大的數據集(即循環更多)。 –