运行 无法在 Linux 上使用 GCC 使用 C++17 并行算法

Can't run C++17 parallel algorithms with GCC on Linux

我想 运行 使用 GCC9.3 的 C++17 执行策略的标准算法。

我已经下载了https://github.com/oneapi-src/oneTBB/releases/download/v2021.1.1/oneapi-tbb-2021.1.1-lin.tgz

但我收到“任务”class 未定义的错误 即使是来自 https://www.ibm.com/developerworks/aix/library/au-intelthreadbuilding/index.html

的“hello world”示例
#include "tbb/tbb.h"
#include <iostream>
using namespace tbb;
using namespace std;
 
class first_task : public task { 
    public: 
    task* execute( ) { 
       cout << "Hello World!\n";
       return NULL;
    }
};
 
int main( )
{ 
    task_scheduler_init init(task_scheduler_init::automatic);
    first_task& f1 = *new(tbb::task::allocate_root()) first_task( );
    tbb::task::spawn_root_and_wait(f1);
}

我收到以下错误:

test.cpp:55:32: error: expected class-name before '{' token
   55 | class first_task : public task {
      |                                ^
test.cpp:57:5: error: 'task' does not name a type
   57 |     task* execute( ) {
      |     ^~~~
test.cpp: In function 'int main()':
test.cpp:65:5: error: 'task_scheduler_init' was not declared in this scope
   65 |     task_scheduler_init init(task_scheduler_init::automatic);
      |     ^~~~~~~~~~~~~~~~~~~
test.cpp:66:38: error: 'allocate_root' is not a member of 'tbb::v1::task'
   66 |     first_task& f1 = *new(tbb::task::allocate_root()) first_task( );
      |                                      ^~~~~~~~~~~~~
test.cpp:67:16: error: 'spawn_root_and_wait' is not a member of 'tbb::v1::task'
   67 |     tbb::task::spawn_root_and_wait(f1);
      |                ^~~~~~~~~~~~~~~~~~~

我正在编译:使用以下命令:

g++ -I<path_to_tbb>/oneapi-tbb-2021.1.1/include/oneapi -I<path_to_tbb>/oneapi-tbb-2021.1.1/include/oneapi/tbb -I<path_to_tbb>/oneapi-tbb-2021.1.1/include -L<path_to_tbb>/oneapi-tbb-2021.1.1/lib/intel64/gcc4.8/ test.cpp -o test

来自

运行ning source env/var.h 没有帮助 我做错了什么吗?

谢谢

从错误消息中我得出结论,您使用的 gcc 或 TBB 实现是一种实验性的。如您所见,gcc 确实找到了 TBB(#include tbb/tbb.h 上没有错误),这很好!然后,错误显示您使用的某些函数隐藏在 tbb::v1 命名空间内。因此,您可以在所有“未知”名称前使用 using namespace tbb::v1 或添加 tbb::v1::

然后,在 https://community.intel.com/t5/Intel-oneAPI-Threading-Building/Unable-to-compile-TBB-program/td-p/1226663
他们说 tbb::task 已贬值。请使用更现代的 TBB 教程:-)

另请参阅:https://github.com/oneapi-src/oneTBB/issues/243