线程亲和力

时间:2013-10-11 01:23:05

标签: c# c++ multithreading

我有一个多线程程序,它包含一个C#interop层而不是C ++代码。 我正在设置线程亲缘关系(如在this post中),它适用于我的部分代码,但在第二部分它不起作用。英特尔编译器/ IPP / MKL库/内联汇编是否会干扰外部关联设置?

更新: 我无法发布代码,因为整个环境都有很多dll。我设置了环境值:OMP_NUM_THREADS=1 MKL_NUM_THREADS=1 IPP_NUM_THREADS=1。当它在单线程中运行时,它运行正常,但是当我使用多个C#线程并为每个线程设置相关性时(在四核机器上),初始化在单独的内核上正常运行,但在处理期间所有线程都开始使用相同的线程核心。希望我足够清楚。

感谢。

1 个答案:

答案 0 :(得分:10)

我们遇到了这个问题;我们将线程亲和力设置为我们想要的,IPP / MKL功能会将其吹走!您的问题的答案是“是”'。

自动并行

问题在于,默认情况下,英特尔库喜欢自动执行例程的多线程版本。因此,单个FFT由库专门为此目的设置的许多线程计算。

英特尔的意图是程序员可以继续编写单个线程应用程序,并且该库允许该单个线程通过创建一个多核处理器而受益数学工作的线程数。一个崇高的意图(你的源代码然后需要对运行时硬件一无所知以提取最佳的可实现性能 - 有时候很方便),但是当一个人根据自己的原因进行自己的线程时会产生正确的血腥滋扰。

控制图书馆的行为

查看这些Intel docs,支持函数/线程支持函数部分。您可以以编程方式控制库的线程趋势,也可以在程序运行之前设置一些可以设置的环境变量(如MKL_NUM_THREADS)。设置线程数(据我记忆)足以阻止库做自己的事情。

通过回答你的问题启发的哲学论文(最好忽略)

英特尔在CPU设计和软件(例如IPP / MKL)中所做的一切或多或少都是为了让程序员不必担心线程问题。你想要好的数学表现?使用MKL。你想让for循环更快吗?在ICC中打开自动并行化。您想充分利用缓存吗?这就是超线程的用途。

这不是一个糟糕的方法,而且我个人认为他们做得非常好。 AMD也是。他们的架构非常擅长为“平均编程人员”提供良好的实际性能改进。对学习,重写和代码开发的最小投资。

刺激

然而,令我恼火的事情(尽管我不想表现出忘恩负义!)是因为这种方法适用于大多数程序员(这是有利可图的市场),它只会给那些想要实现自己的并行性的程序员带来更多障碍。当然,我不能责怪英特尔,他们已经完成了正确的事情;他们是一家以市场为导向的公司,他们需要制作出售的产品。

通过提供这些简单的功能,有太多熟练和训练不足的程序员的情况变得更加根深蒂固。如果所有程序员都能获得良好的性能而无需了解自动并行实际在做什么,那么我们将永远不会继续前进。真正了解这些东西的真正优秀程序员的人才会非常小。

问题

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

实施例

将Cell处理器置于PS3的核心位置。这是我喜欢无休止地干扰的事情!然而,IBM以与英特尔完全不同的理念开发了它。他们没有给你任何缓存(只是一些快速的静态RAM而不是你认为合适的使用),架构是非常纯粹的NUMA,你必须做你自己的并行化等等。结果是,如果你真的知道什么你在做什么你可以得到大约250GFLOPS(我认为无PS3变体去了320GLOPS),80WW,直到2005年。

英特尔芯片大约需要6到7年才能使单个设备达到该级别的性能。摩尔定律的增长很多。如果Cell是在英特尔最新的硅晶圆厂制造的,并且获得了与英特尔放入其大型Xeon一样多的晶体管,那么它仍会将其他所有东西都吹走。

没有市场

然而,除了PS3之外,Cell还是一个非首发市场主张。 IBM决定,它永远不会是一个足够大的卖家,值得一试。那里没有足够的程序员可以真正使用它,并沉溺于那些没有商业意义的我们中的少数人,这对股东们来说并不开心。

小问题,更大的问题

我之前说过,这只是一个小问题。嗯,世界上大多数的计算机都不是高数学表现,而是变成了Facebook,Twitter等等。这就是I / O的表现,为此你不能做到这一点。 ; t需要高数学表现。所以从这个意义上来说,依赖英特尔为你做一切让一般程序员获得良好的数学表现非常重要。没有足够的数学来保证改变设计理念。

事实上,我强烈怀疑世界将最终决定你根本不需要大芯片,ARM应该做得很好。如果确实如此,那么具有非常好的通用数学计算性能的英特尔非常大的芯片市场将会消失。对于那些希望利用基于英特尔的硬件填充大量数据中心并将英特尔PC放在每个桌面上的人来说,那些希望获得良好数学表现的人正在大力补贴。

我们很幸运,英特尔显然希望确保他们构建的每个大型CPU都能擅长数学,无论他们的大多数用户是否真正使用该数学表现。我确信这种愿望在营销实力和想要吹牛的权利方面有其基础,但这些并不是带来股东价值的硬商业有形工件。

因此,如果这些数据中心人员决定实际上,他们宁愿节省电力并用ARM填充他们的数据中心,那么英特尔会离开哪里? ARM是他们想要达到的目的的精美设备,但它们并不是我的超级计算机芯片列表的首选。那么离开我们的地方呢?

趋势

我对当前市场趋势的看法是'工作站' (正如我们现在所称的PC)将开始花费大量的金钱,就像他们在20世纪80年代/ 90年代初那样。

我认为更好的超级计算机将变得难以承受,因为没有人可以节省下一个大芯片需要的10亿美元。如果人们停止使用PC,那么它就不会成为大型全能GPU的大众市场,因此我们甚至无法使用这些GPU。它们是一种独家的东西,但超级计算机确实在我们的世界中起着至关重要的作用,我们确实需要它们变得更好。那么谁来支付呢?不是我,这是肯定的。

哎呀,这已经持续了一段时间......