- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我尝试使用 TBB 和 lambda 表达式编写一个基本的 C++ 程序,但我无法编译它。
#include
#include
#include
#include
使用命名空间标准;
使用命名空间 tbb;
void Foo(int number) {
cout<<数字<
}
void ParallelApplyFoo(int* a, size_t n) {
parallel_for(blocked_range
(0, n),
[ = ](const blocked_range
& r){
对于 (size_t i = r.begin(); i != r.end();++i)
Foo(a[i]);
}
);
}
int main(int argc, char** argv) {
整数 = 10;
int* a = new int[num];
for(int i = 0; i < num; i++)
[我] = 我;
ParallelApplyFoo(a,num);
返回 0;
}
和编译器消息:
main.cpp: In function ‘void ParallelApplyFoo(int*, size_t)’:main.cpp:25:9: warning: lambda expressions only available with -std=c++11 or -std=gnu++11 [enabled by default]main.cpp:26:5: error: no matching function for call to ‘parallel_for(tbb::blocked_range, ParallelApplyFoo(int*, size_t)::&)>)’main.cpp:26:5: note: candidates are:In file included from main.cpp:10:0:/usr/include/tbb/parallel_for.h:161:6: note: template void tbb::parallel_for(const Range&, const Body&)main.cpp:26:5: error: template argument for ‘template void tbb::parallel_for(const Range&, const Body&)’ uses local type ‘ParallelApplyFoo(int*, size_t)::&)>’main.cpp:26:5: error: trying to instantiate ‘template void tbb::parallel_for(const Range&, const Body&)’In file included from main.cpp:10:0:/usr/include/tbb/parallel_for.h:168:6: note: template void tbb::parallel_for(const Range&, const Body&, const tbb::simple_partitioner&)/usr/include/tbb/parallel_for.h:168:6: note: template argument deduction/substitution failed:main.cpp:26:5: note: candidate expects 3 arguments, 2 providedIn file included from main.cpp:10:0:/usr/include/tbb/parallel_for.h:175:6: note: template void tbb::parallel_for(const Range&, const Body&, const tbb::auto_partitioner&)/usr/include/tbb/parallel_for.h:175:6: note: template argument deduction/substitution failed:main.cpp:26:5: note: candidate expects 3 arguments, 2 providedIn file included from main.cpp:10:0:/usr/include/tbb/parallel_for.h:182:6: note: template void tbb::parallel_for(const Range&, const Body&, tbb::affinity_partitioner&)/usr/include/tbb/parallel_for.h:182:6: note: template argument deduction/substitution failed:main.cpp:26:5: note: candidate expects 3 arguments, 2 providedIn file included from main.cpp:10:0:/usr/include/tbb/parallel_for.h:190:6: note: template void tbb::parallel_for(const Range&, const Body&, const tbb::simple_partitioner&, tbb::task_group_context&)/usr/include/tbb/parallel_for.h:190:6: note: template argument deduction/substitution failed:main.cpp:26:5: note: candidate expects 4 arguments, 2 providedIn file included from main.cpp:10:0:/usr/include/tbb/parallel_for.h:197:6: note: template void tbb::parallel_for(const Range&, const Body&, const tbb::auto_partitioner&, tbb::task_group_context&)/usr/include/tbb/parallel_for.h:197:6: note: template argument deduction/substitution failed:main.cpp:26:5: note: candidate expects 4 arguments, 2 providedIn file included from main.cpp:10:0:/usr/include/tbb/parallel_for.h:204:6: note: template void tbb::parallel_for(const Range&, const Body&, tbb::affinity_partitioner&, tbb::task_group_context&)/usr/include/tbb/parallel_for.h:204:6: note: template argument deduction/substitution failed:main.cpp:26:5: note: candidate expects 4 arguments, 2 providedIn file included from main.cpp:10:0:/usr/include/tbb/parallel_for.h:248:6: note: template void tbb::strict_ppl::parallel_for(Index, Index, const Function&, tbb::task_group_context&)/usr/include/tbb/parallel_for.h:248:6: note: template argument deduction/substitution failed:main.cpp:26:5: note: deduced conflicting types for parameter ‘Index’ (‘tbb::blocked_range’ and ‘ParallelApplyFoo(int*, size_t)::&)>’)In file included from main.cpp:10:0:/usr/include/tbb/parallel_for.h:235:6: note: template void tbb::strict_ppl::parallel_for(Index, Index, Index, const Function&, tbb::task_group_context&)/usr/include/tbb/parallel_for.h:235:6: note: template argument deduction/substitution failed:main.cpp:26:5: note: deduced conflicting types for parameter ‘Index’ (‘tbb::blocked_range’ and ‘ParallelApplyFoo(int*, size_t)::&)>’)In file included from main.cpp:10:0:/usr/include/tbb/parallel_for.h:228:6: note: template void tbb::strict_ppl::parallel_for(Index, Index, const Function&)/usr/include/tbb/parallel_for.h:228:6: note: template argument deduction/substitution failed:main.cpp:26:5: note: deduced conflicting types for parameter ‘Index’ (‘tbb::blocked_range’ and ‘ParallelApplyFoo(int*, size_t)::&)>’)In file included from main.cpp:10:0:/usr/include/tbb/parallel_for.h:215:6: note: template void tbb::strict_ppl::parallel_for(Index, Index, Index, const Function&)/usr/include/tbb/parallel_for.h:215:6: note: template argument deduction/substitution failed:main.cpp:26:5: note: deduced conflicting types for parameter ‘Index’ (‘tbb::blocked_range’ and ‘ParallelApplyFoo(int*, size_t)::&)>’)gmake[2]: *** [build/Release/GNU-Linux-x86/main.o] Error 1
我尝试了编译器标志“-std=c++11”和“-std=gnu++11”然后输出:
g++ -std=gnu++11 -o dist/Release/GNU-Linux-x86/test build/Release/GNU-Linux-x86/main.o build/Release/GNU-Linux-x86/main.o: In function `tbb::interface6::internal::start_for, ParallelApplyFoo(int*, unsigned int)::{lambda(tbb::blocked_range const&)#1}, tbb::auto_partitioner>::~start_for()':main.cpp:(.text+0x6): undefined reference to `vtable for tbb::task'build/Release/GNU-Linux-x86/main.o: In function `tbb::interface6::internal::start_for, ParallelApplyFoo(int*, unsigned int)::{lambda(tbb::blocked_range const&)#1}, tbb::auto_partitioner>::~start_for()':main.cpp:(.text+0x26): undefined reference to `vtable for tbb::task'build/Release/GNU-Linux-x86/main.o: In function `tbb::interface6::internal::start_for, ParallelApplyFoo(int*, unsigned int)::{lambda(tbb::blocked_range const&)#1}, tbb::auto_partitioner>::run(tbb::blocked_range const&, {lambda(tbb::blocked_range const&)#1} const&, ParallelApplyFoo(int*, unsigned int)::{lambda(tbb::blocked_range const&)#1} const&)':main.cpp:(.text+0x9d): undefined reference to `tbb::task_group_context::init()'main.cpp:(.text+0xb5): undefined reference to `tbb::internal::allocate_root_with_context_proxy::allocate(unsigned int) const'main.cpp:(.text+0xe1): undefined reference to `tbb::internal::get_initial_auto_partitioner_divisor()'main.cpp:(.text+0x107): undefined reference to `tbb::task_group_context::~task_group_context()'main.cpp:(.text+0x116): undefined reference to `tbb::task_group_context::~task_group_context()'main.cpp:(.text+0x12a): undefined reference to `vtable for tbb::task'main.cpp:(.text+0x138): undefined reference to `tbb::internal::allocate_root_with_context_proxy::free(tbb::task&) const'build/Release/GNU-Linux-x86/main.o: In function `tbb::interface6::internal::start_for, ParallelApplyFoo(int*, unsigned int)::{lambda(tbb::blocked_range const&)#1}, tbb::auto_partitioner>::execute()':main.cpp:(.text+0x251): undefined reference to `tbb::internal::allocate_continuation_proxy::allocate(unsigned int) const'main.cpp:(.text+0x27b): undefined reference to `tbb::internal::allocate_child_proxy::allocate(unsigned int) const'main.cpp:(.text+0x313): undefined reference to `tbb::internal::allocate_continuation_proxy::allocate(unsigned int) const'main.cpp:(.text+0x33d): undefined reference to `tbb::internal::allocate_child_proxy::allocate(unsigned int) const'main.cpp:(.text+0x4b6): undefined reference to `tbb::internal::allocate_continuation_proxy::allocate(unsigned int) const'main.cpp:(.text+0x4e8): undefined reference to `tbb::internal::allocate_child_proxy::allocate(unsigned int) const'main.cpp:(.text+0x585): undefined reference to `tbb::task_group_context::is_group_execution_cancelled() const'build/Release/GNU-Linux-x86/main.o: In function `tbb::interface6::internal::flag_task::~flag_task()':main.cpp:(.text._ZN3tbb10interface68internal9flag_taskD2Ev[_ZN3tbb10interface68internal9flag_taskD5Ev]+0x6): undefined reference to `vtable for tbb::task'build/Release/GNU-Linux-x86/main.o: In function `tbb::interface6::internal::signal_task::~signal_task()':main.cpp:(.text._ZN3tbb10interface68internal11signal_taskD2Ev[_ZN3tbb10interface68internal11signal_taskD5Ev]+0x6): undefined reference to `vtable for tbb::task'build/Release/GNU-Linux-x86/main.o: In function `tbb::interface6::internal::signal_task::~signal_task()':main.cpp:(.text._ZN3tbb10interface68internal11signal_taskD0Ev[_ZN3tbb10interface68internal11signal_taskD0Ev]+0x6): undefined reference to `vtable for tbb::task'build/Release/GNU-Linux-x86/main.o: In function `tbb::interface6::internal::flag_task::~flag_task()':main.cpp:(.text._ZN3tbb10interface68internal9flag_taskD0Ev[_ZN3tbb10interface68internal9flag_taskD0Ev]+0x6): undefined reference to `vtable for tbb::task'build/Release/GNU-Linux-x86/main.o:(.rodata+0x20): undefined reference to `typeinfo for tbb::task'build/Release/GNU-Linux-x86/main.o:(.rodata._ZTVN3tbb10interface68internal11signal_taskE[_ZTVN3tbb10interface68internal11signal_taskE]+0x14): undefined reference to `tbb::task::note_affinity(unsigned short)'build/Release/GNU-Linux-x86/main.o:(.rodata._ZTVN3tbb10interface68internal9flag_taskE[_ZTVN3tbb10interface68internal9flag_taskE]+0x14): undefined reference to `tbb::task::note_affinity(unsigned short)'build/Release/GNU-Linux-x86/main.o:(.rodata._ZTIN3tbb10interface68internal11signal_taskE[_ZTIN3tbb10interface68internal11signal_taskE]+0x8): undefined reference to `typeinfo for tbb::task'build/Release/GNU-Linux-x86/main.o:(.rodata._ZTIN3tbb10interface68internal9flag_taskE[_ZTIN3tbb10interface68internal9flag_taskE]+0x8): undefined reference to `typeinfo for tbb::task'
我使用的是 Fedora 18(当然安装了 tbb 和 tbb-devel 软件包)。
有人有什么想法吗?代码是从这里复制的:http://software.intel.com/en-us/blogs/2009/08/03/parallel_for-is-easier-with-lambdas-intel-threading-building-blocks
最佳答案
使用 -ltbb 编译器标志解决了它,可在此处找到:http://goparallel.sourceforge.net/compiling-tbb-programs-and-examples-on-linux-ubuntu/ .无论如何,感谢大家的帮助:)
关于c++ - 无法使用 TBB 和 lambda 编译基本的 C++ 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15467710/
我有疑问。 对于 tbb::memory_pool shared_memory_pool_; 如果在主线程中实例化。而且,我在工作线程中调用了 shared_memory_pool_.malloc(s
我想遍历图像并处理一些与元素的顺序相关的特定值。图像有一个 unsigned char*包含掩码的数组(如果应处理像素则为 255,否则为 0)和 unsigned short*具有像素值的数组。 我
我正在 MinGW32(在 Windows 7 64 位上)下构建 TBB 并成功地将一个简单的程序链接到它。不幸的是,我的同事无法成功链接。我们都运行相同版本的 Windows,相同版本的 MinG
寻找要使用的示例代码 tbb::concurrent_hash_map来自英特尔线程构建模块 (TBB)。 我可以插入,但我似乎无法读回值。 official Intel documentation示
刚刚看了TBB最新的文档。我找不到任何关于 tbb::thread 的信息,但我看到了一些关于互斥锁的信息。 顺便说一句,如果 TBB-4.x 有线程库,请帮我找到使用 tbb 线程的资源。请不要推荐
我对两个程序进行了一些比较,这两个程序使用梅森扭曲器中的伪随机整数填充给定的 vector ,关键是 TBB 版本非常慢,std 版本在大约 0.6 秒内执行任务当TBB至少需要1.1s时。 我还注意
这是我用来学习如何使用 TBB 的玩具示例。 Parallel::operator() 应该并行运行,但它有一个临界区,一次只能由一个处理器访问,因此它打印的消息不会被扰乱。我的问题是它无法编译,而且
我正在使用 SDL Tridion World 的 XSLT 中介器来创建 XSLT TBB。我的要求是,我想将一个 XSLTTBB 的输出传递到另一个 XSLT TBB。 假设我有一个名为“1”的
只是想知道 boost 或 C++11 是否具有与 tbb::queuing_mutex 和 tbb::spin_mutex 相同的互斥锁? 最佳答案 您可以在 reference 中找到支持的互斥锁
有人可以帮我解决这个错误吗? 我尝试在互联网上进行研究并尝试了不同的方法来解决问题(例如:卸载其他版本的 visual c++,添加代码等),但它们似乎都不起作用:( 我做了什么: under c/c
我正在尝试构建一个具有许多依赖项的大型项目。阻止它构建的最后一件事(?)是 TBB 未能处理 int 的类型转换进入 const tbb::& .烦人的是,同一个 Actor 使用std::atomi
我有一个用 C 语言编写的串行(非并行)应用程序。我使用英特尔线程构建模块对其进行了修改和重写。当我在四核机器 AMD Phenom II 机器上运行这个并行版本时,我获得了超过 4 倍的性能增益,这
我有一个视频检索系统,在检索过程中会占用大量内存。我知道 tbb 可扩展分配器将释放的内存释放到内存池,并且不会将其返回给操作系统。这是否意味着该池将始终在其池中拥有那些先前分配的内存,而当其他线程需
我正在tbb::parallel_for_each中深入运行task_group。 task_group被取消,这似乎导致tbb::parallel_for_each在不满足其后置条件的情况下退出。这
我有一个非常简单的parallel_for循环 tbb::parallel_for(tbb::blocked_range(0, values.size()), [&](tbb::blo
假设我有一个并行算法,它使用带有一个或两个锁的显式线程进行同步,并经过优化以利用缓存行(包括多个内核之间的共享 L3 缓存),将其合并到 TBB 程序中的好方法是什么?所讨论的算法并没有像分解成线程那
我想在大型数据集上运行 tbb::parallel_for 并生成一个唯一的集。 parallel_for 主体中包含一些额外的逻辑,用于确定原始数据集的每个子元素是否应包含在该集合中。结果集通常比原
在我之前的问题中,我使用带有输入、转换和输出过滤器的 C++ (Linux) 实现了一个 TBB 管道: incorrect output with TBB pipeline Input 过滤器正在从
我们有一段代码利用 TBB 生成任务来执行一些处理,这是使用以下 TBB 代码初始化 TBB 线程池(以匹配核心数)完成的: tbb::task_scheduler_init(8); 然后对于我们想要
我正在尝试通过 TBB 任务和延续来遍历树。代码如下。当我运行代码时,它不断中止(经常,但不总是)并出现以下错误: Assertion t_next->state()==task::allocated
我是一名优秀的程序员,十分优秀!