线程亲和性

6
我有一个多线程程序,由C++代码上的C#互操作层组成。我正在设置线程亲和力(就像这篇文章中所述),它可以在我的部分代码中工作,但是在另一部分中它不起作用。Intel编译器/IPP/MKL库/内联汇编是否会干扰外部亲和性设置?
更新: 我不能发布代码,因为它涉及到很多dll文件。我设置了环境变量:OMP_NUM_THREADS=1 MKL_NUM_THREADS=1 IPP_NUM_THREADS=1。当它在单个线程中运行时,它能正常工作,但是当我使用多个C#线程并为每个线程设置亲和力(在四核机器上),初始化在单独的核心上进行得很好,但在处理期间,所有线程都开始使用同一个核心。希望我表达清楚了。
谢谢。

1
我猜你需要发布不起作用的代码。 - igelineau
1个回答

11
我们曾经遇到过这个确切的问题:我们将线程亲和性设置为所需值,但IPP/MKL函数会将其清除!对于你的问题,答案是“是”。
自动并行化
问题在于,默认情况下,英特尔库喜欢自动执行例程的多线程版本。因此,一个单一的FFT由库专门为此目的设置的多个线程计算。
英特尔的意图是程序员可以继续编写单线程应用程序,并且库将允许该单个线程通过创建数个线程进行数学工作而从多核处理器中获益。这是一个崇高的意图(有时很方便,源代码不需要了解运行时硬件以提取最佳性能),但当我们出于自己的原因进行自己的线程时,这是一个非常烦人的问题。
控制库的行为
请看这些Intel文档,部分支持函数/线程支持函数。您可以通过编程控制库的线程趋势,或在程序运行前设置一些环境变量(如MKL_NUM_THREADS)。设置线程数就足以阻止库执行自己的操作。
哲学性文章是因回答您的问题而启发的(最好忽略)。
更多或更少地说,英特尔在CPU设计和软件方面(例如IPP/MKL)所做的一切都旨在使程序员不必担心线程。想要良好的数学性能?使用MKL。你想让那个循环快速执行吗?在ICC中打开自动并行处理。你想充分利用缓存吗?这就是超线程的作用。
这并不是一个坏方法,个人认为他们做得相当不错。AMD也是如此。他们的架构非常擅长为“普通程序员”提供良好的实际性能改进,并以最少的学习、重写和代码开发投资为代价。
然而,让我有点不爽的事情是(虽然我不想显得不感激!),这种方法虽然适用于大多数程序员(这也是盈利市场所在之处),但它只会给那些想要实现自己的并行性的程序员带来更多障碍。当然,我不能责怪英特尔,他们已经做了正确的事情;它们是一个由市场引导的公司,需要制造能够销售的产品。

通过提供这些简单的功能,技能不足和未经培训的程序员的数量就会越来越多,这种情况将变得更加根深蒂固。如果所有程序员都可以获得良好的性能而无需学习自动并行性的实际操作,那么我们永远不会进步。真正知道这些东西的优秀程序员的人数将继续非常少。

问题

我认为这是一个问题(虽然只是一个小问题,稍后我会解释)。出于经济和环境原因,计算需要变得更加高效。英特尔的方法可以提高性能,更好的硅制造技术可以降低功耗,但我总觉得它并不像它本应该那样高效。

示例

PS3的核心处理器是Cell处理器。这是我喜欢不停地唠叨的东西!然而,IBM开发它时采用了与Intel完全不同的哲学。他们没有给你缓存(只有一些快速静态RAM可供随意使用),架构几乎是纯NUMA的,你必须自己完成所有的并行化等等。结果是,如果你真的知道在做什么,你可以在2005年就从它那里获得大约250GFLOPS的性能(我认为非PS3版本可达到320GLOPS),功耗只有80瓦。

到目前为止,英特尔芯片需要大约6或7年时间才能达到这个级别的性能。这是很多摩尔定律增长。如果Cell处理器在英特尔最新的硅晶厂制造并且拥有像英特尔的大型Xeon处理器中放置的晶体管数量一样多,它仍将遥遥领先其他处理器。

没有市场

然而,除了PS3之外,Cell并不是一个有市场前景的方案。IBM决定它永远不会成为一个足够大的销售产品,无法满足商业利益,也不会取悦股东。因为没有足够的程序员真正使用它,只满足少数人的需求没有商业意义。

小问题,大问题

我之前说过这只是一个小问题。但是,全球大部分计算机工作不涉及高数学性能,已经变成了Facebook、Twitter等社交媒体。这些工作都是关于I/O性能的,而这并不需要高数学性能。因此,在这个意义上,依赖英特尔做所有事情以使平均程序员获得良好的数学性能并不重要。并没有足够的数学运算需要改变设计哲学。

事实上,我强烈怀疑世界最终会认为你根本不需要一个大芯片,ARM就可以胜任。如果真的如此,那么英特尔非常大的芯片市场和非常好的通用数学计算性能市场将消失。实际上,那些想要良好数学性能的人正在被那些想要在巨大的数据中心中填充基于英特尔的硬件并在每个桌面上放置英特尔PC的人大力资助。

"We're simply fortunate that Intel seems to prioritize ensuring that every major CPU they produce has strong mathematical capabilities, regardless of whether most of their users actually require such performance. I believe this desire is rooted in marketing prowess and the desire for bragging rights, but these are not tangible assets that bring commercial value to shareholders.
So if data center operators decide that they would prefer to save on electricity costs and fill their centers with ARM processors, where does that leave Intel? While ARM processors are suitable for their intended purposes, they are not at the top of my list for supercomputer chips. So what does this mean for us?
As for current market trends, I predict that workstations (now known as PCs) will become increasingly expensive, much like they were in the 1980s and early 90s."
我认为更好的超级计算机会变得无法负担,因为没有人能够拨出100亿美元来做下一个大芯片。如果人们停止使用个人电脑,就不会有大规模的市场需求,以便使用大型全面GPU。虽然它们是一种独特的东西,但超级计算机在我们的世界中扮演着至关重要的角色,并且我们需要它们变得更好。那么谁会为此付款呢?肯定不是我。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接