当我并行化的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