当前位置:  开发笔记 > 编程语言 > 正文

如何静态链接到TBB?

如何解决《如何静态链接到TBB?》经验,为你挑选了2个好方法。

如何将intel的TBB库静态链接到我的应用程序?我知道所有警告,例如调度程序的不公平负载分配,但我不需要调度程序,只需要容器,所以没关系.

无论如何我知道这可以做到,虽然它没有记录,但我现在似乎无法找到方法(尽管我在某处之前已经看过它).

那么有人知道或有任何线索吗?

谢谢



1> Ben-Uri..:

强烈建议不要这样做:

是否有提供静态链接库的TBB版本?

TBB不是作为静态链接库提供的,原因如下*:

大多数图书馆都在本地 例如,英特尔(R)MKL FFT转换阵列.与FFT有多少副本无关.多个副本和版本可以毫无困难地共存.但是一些库控制程序范围的资源,例如内存和处理器.例如,垃圾收集器控制程序中的内存分配.类似地,TBB控制跨程序的任务调度.为了有效地完成工作,每个人都必须是单身人士; 也就是说,有一个唯一的实例可以协调整个程序的活动.在单个程序中允许TBB调度程序的k个实例将导致软件线程的数量是硬件线程的k倍.该程序运行效率低下,因为机器会被k因子超额认购,导致更多的上下文切换,缓存争用和内存消耗.此外,当嵌套并行性来自不同调度程序的嵌套调用时,TBB对嵌套并行性的有效支持将被否定.

创建程序范围单例的最实用的解决方案是包含单例的动态共享库.当然,如果调度程序可以合作,我们就不需要单例.但这种合作需要集中的代理人进行沟通; 就是一个单身人士!

我们决定省略可静态链接的TBB版本受到我们OpenMP经验的强烈影响.与TBB一样,OpenMP也尝试安排整个计划.曾经提供过静态版本的OpenMP运行时,它一直是重复调度程序引起的问题的根源.我们认为最好不要重复那段历史.作为这些考虑的有效性的间接证明,我们可以指出Microsoft Visual C++仅通过动态库提供OpenMP支持的事实.

资料来源:http://www.threadingbuildingblocks.org/faq/11#sthash.t3BrizFQ.dpuf


英特尔提供build/big_iron.inc专门用于构建静态库.所以,我不认为这个答案描绘了全貌.建议sourcedelica的答案如下.

2> sourcedelica..:

编辑 - 更改使用extra_inc.谢谢杰夫!

使用以下参数构建:

make extra_inc=big_iron.inc

将构建静态库.请参阅中的警告build/big_iron.inc.

推荐阅读
拾味湖
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有