加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 使用intel TBB的低效fibonacci系列比非线程实现慢得多

发布时间:2020-12-16 10:03:50 所属栏目:百科 来源:网络整理
导读:当我使用我的i7-6700HQ处理器的所有8个逻辑内核时,我的并行化版本的fibonacci实现(效率低,只是为了比较库的性能)比普通的低效实现慢得多,这是一个惊喜.与非并行实现相比,处理器风扇开始变得混乱,处理时间非常慢. 该示例直接来自intel-https://www.threadingb
当我使用我的i7-6700HQ处理器的所有8个逻辑内核时,我的并行化版本的fibonacci实现(效率低,只是为了比较库的性能)比普通的低效实现慢得多,这是一个惊喜.与非并行实现相比,处理器风扇开始变得混乱,处理时间非常慢.

该示例直接来自intel-https://www.threadingbuildingblocks.org/tutorial-intel-tbb-task-based-programming上的TBB教程

这是我的代码

#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;
}

我不知道我做错了什么.如果有人能指出它会很有帮助.

谢谢

解决方法

该示例的主要问题是小任务.叶任务(n <2)仅计算返回n.毫无疑问,并行性效率低下.当子问题被认为对于并行化而言太小时,可以利用“截止”条件来改进该示例.让我们假设没有意义并行计算前12个斐波纳契数,我们将使用串行实现:

long fib1(int n)
{
    // Use a serial implementation for "small" numbers.
    if(n < 12) return fib2(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;
    }
}

也许,你想阅读关于Divide and Conquer和The Task Scheduler的文章.

附:英特尔TBB使用基于任务的方法进行并行处理.方法tbb :: task_group :: run创建一个任务(不是线程),当线程池中的一个线程可用时执行该任务.因此,系统中有多少任务并不重要 – 线程数总是有限的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读