线程亲和力

问题描述 投票:5回答:1

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

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

谢谢。

c# c++ multithreading
1个回答
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性能,为此您不需要高数学性能。所以从这个意义上来说,依赖英特尔为你做一切让一般程序员获得良好的数学表现非常重要。没有足够的数学来保证改变设计理念。

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

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

因此,如果那些数据中心人员决定实际上,他们宁愿节省电力并用ARM填充他们的数据中心,那么英特尔会离开哪里? ARM是出于预期目的的优良设备,但它们并不是我的超级计算机芯片列表的首选。那么我们离开了哪里呢?

趋势

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.