问题标签 [tbb]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
10 回答
6627 浏览

c++ - 有使用英特尔线程构建模块的经验吗?

英特尔的线程构建模块 (TBB)开源库看起来非常有趣。即使有一本关于这个主题的O'Reilly 书,我也没有听说有很多人在使用它。我有兴趣将它用于 Unix(Mac、Linux 等)环境中的一些多级并行应用程序(MPI + 线程)。对于它的价值,我对高性能计算/数值方法类应用感兴趣。

有没有人有 TBB 的经验?它运作良好吗?它是否相当可移植(包括 GCC 和其他编译器)?该范式是否适用于您编写的程序?还有其他我应该研究的图书馆吗?

0 投票
8 回答
7541 浏览

c++ - 这个用于原子浮点的 C++ 实现安全吗?

编辑:这里的代码仍然有一些错误,它可以在性能部门做得更好,但是我没有尝试修复这个问题,而是将问题提交给英特尔讨论组并得到了很多很好的反馈,如果一切顺利,Atomic float 的抛光版本将包含在英特尔线程构建模块的近期版本中

好的,这是一个艰难的,我想要一个原子浮点数,不是为了超快的图形性能,而是作为类的数据成员常规使用。而且我不想为在这些类上使用锁付出代价,因为它没有为我的需求提供额外的好处。

现在有了英特尔的 tbb 和我见过的其他原子库,支持整数类型,但不支持浮点。所以我继续实施了一个,它有效......但我不确定它是否真的有效,或者我很幸运它有效。

这里的任何人都知道这是否不是某种形式的线程异端?

谢谢!

编辑:按照 Greg Rogers 的建议将 size_t 更改为 uint32_t,这样它更便携

编辑:为整个事物添加了列表,并进行了一些修复。

更多编辑:在我的机器上使用锁定浮点数进行 5.000.000 += 操作(在我的机器上使用 100 个线程)需要 3.6 秒,而我的原子浮点数即使是愚蠢的 do-while 也需要 0.2 秒才能完成相同的工作。因此,> 30 倍的性能提升意味着它是值得的,(这就是问题所在)如果它是正确的。

更多编辑:正如 Awgn 指出的那样,我的fetch_and_xxxx部分都错了。修复了这个问题并删除了我不确定的部分 API(模板化内存模型)。并在运算符 += 方面实现了其他操作,以避免代码重复

添加:添加了运算符 *= 和运算符 /=,因为没有它们,浮点数就不会是浮点数。感谢 Peterchen 的评论,这被注意到了

编辑:最新版本的代码如下(我将保留旧版本以供参考)

0 投票
1 回答
3828 浏览

licensing - 英特尔的线程构建块“运行时异常”许可证:这是什么意思?

刚刚查看了线程构建块,作为他们的许可证,他们说这是带有运行时异常的 GPLv2 。在英特尔页面上,他们说如果您需要商业支持,商业许可证是正确的。

那么,如果我正在做一个使用 TBB 的商业、封闭源代码应用程序,但我不需要商业支持,该怎么办?我还可以使用开源版本,还是必须购买商业版本?

毕竟,我假设我可以在商业应用程序中不受限制地使用 libstdc++(即链接它)。

0 投票
7 回答
30939 浏览

c++ - C++ 并行化库:OpenMP 与线程构建块

我将改造我的自定义图形引擎,以便它能够利用多核 CPU。更确切地说,我正在寻找一个库来并行化循环。

在我看来,OpenMP 和英特尔的线程构建块都非常适合这项工作。此外,Visual Studio 的 C++ 编译器和大多数其他流行的编译器都支持两者。这两个库似乎都非常易于使用。

那么,我应该选择哪一个呢?有没有人尝试过这两个库,并且可以给我一些使用这两个库的利弊?另外,你最终选择了与什么合作?

谢谢,

阿德里安

0 投票
7 回答
12814 浏览

c++ - 如何静态链接到 TBB?

如何将英特尔的 TBB 库静态链接到我的应用程序?我知道调度程序的负载分配不公平等所有注意事项,但我不需要调度程序,只需要容器,所以没关系。

无论如何,我知道这是可以做到的,尽管它没有记录,但是我现在似乎找不到这样做的方法(尽管我以前在某个地方见过它)。

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

谢谢

0 投票
2 回答
21029 浏览

c++ - 英特尔 TBB 的可扩展分配器如何工作?

tbb::scalable_allocatorIntel Threading Building Blocks 中的实际作用是什么?

它当然可以有效。我刚刚用它来减少 25% 的应用程序执行时间(并看到 CPU 利用率在 4 核系统上从 ~200% 增加到 350% std::vector<T>std::vector<T,tbb::scalable_allocator<T> >。另一方面,在另一个应用程序中,我看到它使已经很大的内存消耗翻了一番,并将东西发送到交换城市。

英特尔自己的文档并没有提供太多内容(例如,本常见问题解答末尾的一小部分 )。在我自己深入研究它的代码之前,谁能告诉我它使用了什么技巧?

更新:第一次使用 TBB 3.0,并从可扩展分配器中看到了我最好的加速。将单个更改vector<int>vector<int,scalable_allocator<int> >减少某些东西的运行时间从 85 秒到 35 秒(Debian Lenny,Core2,TBB 3.0 来自测试)。

0 投票
3 回答
714 浏览

c++ - 调试 Intel 的 TBB 容器

最近我们开始与英特尔的 TBB 合作,发现在调试容器时我们无法真正观察元素及其数据。

是否有标志设置、插件或棘手的方法来启用它?(也许是 Visual 使用的脚本片段)

0 投票
2 回答
948 浏览

c++ - 基于 Qt 的 CD ripper 的线程构建块 (TBB)?

我正在用 C++ 和 Qt 构建一个 CD 开膛手应用程序。我想并行化应用程序,以便可以同时编码多个轨道。因此,我以这样一种方式构建应用程序,即编码轨道是一个“任务”,并且我正在研究一种机制来同时运行一些这些任务。当然,我可以使用线程来完成此任务并编写自己的任务队列或工作管理器,但我认为英特尔的线程构建块 (TBB) 可能是完成这项工作的更好工具。不过,我有几个问题。

  1. 将 WAV 文件编码为 FLAC、Ogg Vorbis 或 Mp3 文件是否可以作为 tbb::task 很好地工作?教程文档指出“如果线程频繁阻塞,使用任务调度程序时会出现性能损失”。我不认为我的编码任务会经常阻塞互斥锁,但是需要相对频繁地访问磁盘,因为它们必须从磁盘读取 WAV 数据才能进行编码。在本教程描述的意义上,这种级别的磁盘活动是否存在问题?
  2. TBB 是否与 Qt 配合得很好?使用 Qt 线程时,您可以跨线程透明地使用 Qt 的信号/槽机制。如果我使用 tbb::tasks 而不是 Qt 线程,情况也会如此吗?还会有其他“陷阱”吗?

感谢您提供的任何见解。

0 投票
1 回答
382 浏览

performance - Visual Studio 2008 SP1 引入了运行时错误还是我疯了?

我一直在绞尽脑汁想弄清楚最新(非测试版)Visual Studio 2008 SP1 到底发生了什么:

我使用 OpenMP 构建的应用程序在调试器中运行速度非常慢,使 CPU 使用率达到 100%。当它们在调试器之外运行时,它只是运行缓慢(对于发布版本)。

我使用英特尔线程构建块库或我自己的线程团队实现构建的应用程序在调试器中的运行速度比在调试器外部运行时慢(对于发布版本)。

当我转到我的另一台没有安装 SP1 的开发机器时,情况就不同了。在调试器中或外部运行对程序性能没有影响。OpenMP 加速了我的应用程序,Thread Building Blocks 或我自己的线程团队代码(为了解决这个问题而仓促编写)。

这绝对没有对应用程序进行任何更改,只需在调试器 SP1 与常规 Visual Studio 的内部或外部运行它。

我在谷歌上没有找到任何关于这件事的信息,所以我伸出脖子说些什么,希望其他人可能会意识到这正在发生在他们身上。要么,要么我看到的东西。

0 投票
1 回答
2309 浏览

c++ - AMD 多核编程

我想开始编写应用程序(C++),它将利用额外的内核来执行需要执行大量计算并且其计算相互独立的部分代码。我有以下处理器:x64 Family 15 Model 104 Stepping 2 Authentic AMD ~1900 Mhz 在 Windows Vista Home Premium 32 位和 Opensuse 11.0 64 位上运行。

在 Intel 平台上,我使用了以下 API Intel TBB、OpenMP。他们是否在 AMD 上工作,AMD 是否有类似的 API。您的经验是什么?