當我並行化的fibonacci實現(效率低下,只是爲了比較庫的性能)比正常的低效實現慢得多時,即使在使用我的i7-6700HQ處理器的所有8個邏輯內核之後。與非並行實施相比,處理器風扇開始處理時間非常緩慢。使用intel TBB的低效fibonacci系列比非線程實現慢得多
的例子是直接從TBB教程英特爾 - https://www.threadingbuildingblocks.org/tutorial-intel-tbb-task-based-programming
這裏是我的代碼
#include <tbb/task_group.h>
#include <chrono>
#include <iostream>
#define FIB_NUM 40
long fib1(int n)
{
if(n < 2) return n;
else
{
int x, y;
tbb::task_group g;
g.run([&]{x=fib1(n - 1);});
g.run([&]{y=fib1(n - 2);});
g.wait();
return x + y;
}
}
long fib2(int n)
{
return n < 2? n : fib2(n - 1) + fib2(n - 2);
}
int main()
{
auto t1 = std::chrono::high_resolution_clock::now();
std::cout << fib2(FIB_NUM) << std::endl;
auto t2 = std::chrono::high_resolution_clock::now();
std::cout << (t2 - t1).count() << std::endl;
t1 = std::chrono::high_resolution_clock::now();
std::cout << fib1(FIB_NUM) << std::endl;
t2 = std::chrono::high_resolution_clock::now();
std::cout << (t2 - t1).count() << std::endl;
}
我不知道我做錯了。如果有人能指出它會有所幫助。
謝謝
從您的鏈接:「不是一個可擴展的解決方案」=>毫不奇怪,實現比平凡慢。你創建了很多線程,並對它們進行同步,只是做了一個補充......創建線程的開銷比你意識到的更大。 – Garf365
哦,我明白了!我其實想要將遞歸矩陣乘法並行化爲一項任務。我想過用tbb來達到這個目的。如果是這種情況,TBB是否值得使用該應用程序?事實上,tbb適用於什麼應用?想要一些資源來指導我。謝謝 –
要求外部資源是SO的Off Topic。但是,也許,關於使用線程來提高計算速度的機會的一般問題可以被接受(不確定)。 ou可以在計算大量獨立數據時使用線程(使用tbb或其他lib)(如對圖像應用過濾器或計算平均值) – Garf365