标签: tbb

关于TBB/C++代码的问题

我正在阅读线程积木书。我不明白这段代码:

            FibTask& a=*new(allocate_child()) FibTask(n-1,&x);
FibTask& b=*new(allocate_child()) FibTask(n-2,&y);
Run Code Online (Sandbox Code Playgroud)

这些指令是什么意思?类对象引用和 new 一起工作吗?谢谢解释。

下面的代码是这个类FibTask的定义。

class FibTask: public task

{
public:

 const long n;
    long* const sum;
 FibTask(long n_,long* sum_):n(n_),sum(sum_)
 {}
 task* execute()
 {
  if(n<CutOff)
  {
   *sum=SFib(n);
  }
  else
  {
   long x,y;

   FibTask& a=*new(allocate_child()) FibTask(n-1,&x);
   FibTask& b=*new(allocate_child()) FibTask(n-2,&y);
   set_ref_count(3);
   spawn(b);
   spawn_and_wait_for_all(a);
   *sum=x+y;
  }
  return 0;

 }
};
Run Code Online (Sandbox Code Playgroud)

c++ tbb

4
推荐指数
1
解决办法
846
查看次数

使用 gcc 在 Linux 上运行线程构建块 (Intel TBB)

我正在尝试为线程构建块构建一些测试。不幸的是,我无法配置 tbb 库。链接器找不到库 tbb。我试过在 bin 目录中运行脚本,但没有帮助。我什至尝试将库文件移动到 /usr/local/lib/ ,这又失败了。任何的意见都将会有帮助。

c c++ multithreading tbb c++11

4
推荐指数
2
解决办法
5025
查看次数

TBB concurrent_vector 与 openmp

我们可以在 openmp 中使用 TBB concurrent_vector 吗?

是否允许并发更新?

c++ tbb openmp

4
推荐指数
1
解决办法
577
查看次数

英特尔 TBB 中的任务延续

TBB中有类似PPL的任务延续的东西吗?我知道手动分配tbb::tasks 和手动分配连续任务以及手动管理它们的引用计数的低级 TBB 方法:

struct FibContinuation: public task {
    long* const sum;
    long x, y;
    FibContinuation( long* sum_ ) : sum(sum_) {}
    task* execute() {
        *sum = x+y;
        return NULL;
    }
};

struct FibTask: public task {
    const long n;
    long* const sum;
    FibTask( long n_, long* sum_ ) :
        n(n_), sum(sum_)
    {}
    task* execute() {
        if( n<CutOff ) {
            *sum = SerialFib(n);
            return NULL;
        } else {
            // long x, y; This line removed 
            FibContinuation& c = …
Run Code Online (Sandbox Code Playgroud)

c++ tbb c++11 ppl

4
推荐指数
1
解决办法
1780
查看次数

如何使用mingw安装启用tbb的opencv

如何在启用TBB的情况下安装Opencv?

我尝试了以下方法:

1)下载TBB包.

2)使用以下命令构建

 mingw32-make compiler=gcc arch=ia32 runtime=mingw default
Run Code Online (Sandbox Code Playgroud)

3)我将环境变量路径设置为"d:\ tbb\build\windows_ia32_gcc_mingw_release

3)现在使用cmake,我启用了"WITH_TBB"并编译了opencv.

它抛出以下错误.

[ 22%] Built target pch_Generate_opencv_core
Linking CXX shared library ..\..\bin\libopencv_core245.dll
c:/mingw/bin/../lib/gcc/mingw32/4.6.2/../../../../mingw32/bin/ld.exe: cannot fin
d -ltbb
collect2: ld returned 1 exit status
make[2]: *** [bin/libopencv_core245.dll] Error 1
make[1]: *** [modules/core/CMakeFiles/opencv_core.dir/all] Error 2
make: *** [all] Error 2
Run Code Online (Sandbox Code Playgroud)

我错过了什么...请建议..

windows opencv mingw tbb cmake

4
推荐指数
1
解决办法
8960
查看次数

如何在tbb流程图中中止节点及其子节点的执行

我目前正在测试 tbb 的流程图功能。为了使用它,我必须能够中止图中某个节点的执行,包括所有依赖它的子节点,但让其他不依赖它的子节点执行。从主体抛出异常或调用 task::cancel_group_execution() 会中止所有节点的执行。

#include <cstdio>
#include "tbb/flow_graph.h"

using namespace tbb::flow;

struct body
{   std::string my_name;
    body( const char *name ) : my_name(name)
    {
    }
    void operator()( continue_msg ) const
    {   if (my_name == "B")
            tbb::task::self().group()->cancel_group_execution();
        else
        {   sleep(1);
            printf("%s\n", my_name.c_str());
        }
    }
};

int main()
{
    graph g;

    broadcast_node< continue_msg > start(g);
    continue_node<continue_msg> a( g, body("A"));
    continue_node<continue_msg> b( g, body("B"));
    continue_node<continue_msg> c( g, body("C"));
    continue_node<continue_msg> d( g, body("D"));
    continue_node<continue_msg> e( g, body("E"));

    make_edge( start, a );
    make_edge( start, …
Run Code Online (Sandbox Code Playgroud)

c++ multithreading tbb tbb-flow-graph

4
推荐指数
1
解决办法
957
查看次数

tbb并发哈希映射查找和插入

我目前正在使用tbb的并发哈希映射来执行并发插入哈希映射.每个键都是一个字符串,值是整数的向量.我想实现以下内容:在插入期间,如果密钥不存在,我插入它并将值添加到其向量.如果存在,我只需将值添加到其向量中.

在检查tbb并发哈希映射API之后,我注意到find和insert函数都只返回布尔值.那么如果它存在,如何返回指向键的指针呢?

c++ tbb concurrenthashmap

4
推荐指数
1
解决办法
5456
查看次数

-mimplicit-it 编译器标志无法识别

我正在尝试为 Tegra TK1 编译 C++ 库。该库链接到我使用包管理器拉取的 TBB。在编译期间我收到以下错误

/tmp/cc4iLbKz.s: Assembler messages:
/tmp/cc4iLbKz.s:9541: Error: thumb conditional instruction should be in IT block -- `strexeq r2,r3,[r4]'
Run Code Online (Sandbox Code Playgroud)

有点谷歌搜索,这个问题让我尝试添加-mimplicit-it=thumb到 CMAKE_CXX_FLAGS,但编译器无法识别它。

我正在使用内核 3.10.40-grinch-21.3.4 在 tegra 上编译,并使用 gcc 4.8.4 编译器(这就是我输入 c++ -v 时返回的内容)

我不确定最初的错误消息是什么意思,但我认为它与 TBB 链接库而不是我正在编译的源有关。修复的问题也很神秘。任何人都可以对此有所了解吗?

c++ arm tbb tegra

4
推荐指数
1
解决办法
939
查看次数

tbb:concurrent_hash_map&lt;K,V&gt;:英特尔线程构建模块 (TBB) 的示例代码

tbb::concurrent_hash_map<K,V>从英特尔线程构建模块 (TBB) 中查找要使用的示例代码。

我可以插入,但我似乎无法读回这些值。

英特尔官方文档似乎在示例代码方面有些缺乏。

更新

最好的文档位于 Voss 的“Pro TBB:使用线程构建块的 C++ 并行编程”。免费下载本书(属于公共领域)。

忽略英特尔文档。它们本质上是函数签名的集合。

c++ concurrency multithreading tbb c++17

4
推荐指数
1
解决办法
4288
查看次数

非常基本的循环使用TBB

我是一个非常新的程序员,我对intel的例子有些麻烦.我认为如果能看到tbb中最基本的可能循环是如何实现的话会有所帮助.

for (n=0 ; n < songinfo.frames; ++n) {  

         sli[n]=songin[n*2];
         sri[n]=songin[n*2+1];

}
Run Code Online (Sandbox Code Playgroud)

这是我用来解交错音频数据的循环.这个循环会从tbb中受益吗?你会如何实现它?

c++ multithreading tbb

3
推荐指数
1
解决办法
1862
查看次数