更新: 我不能发布代码,因为它涉及到很多dll文件。我设置了环境变量:
OMP_NUM_THREADS=1 MKL_NUM_THREADS=1 IPP_NUM_THREADS=1
。当它在单个线程中运行时,它能正常工作,但是当我使用多个C#线程并为每个线程设置亲和力(在四核机器上),初始化在单独的核心上进行得很好,但在处理期间,所有线程都开始使用同一个核心。希望我表达清楚了。谢谢。
OMP_NUM_THREADS=1 MKL_NUM_THREADS=1 IPP_NUM_THREADS=1
。当它在单个线程中运行时,它能正常工作,但是当我使用多个C#线程并为每个线程设置亲和力(在四核机器上),初始化在单独的核心上进行得很好,但在处理期间,所有线程都开始使用同一个核心。希望我表达清楚了。通过提供这些简单的功能,技能不足和未经培训的程序员的数量就会越来越多,这种情况将变得更加根深蒂固。如果所有程序员都可以获得良好的性能而无需学习自动并行性的实际操作,那么我们永远不会进步。真正知道这些东西的优秀程序员的人数将继续非常少。
问题
我认为这是一个问题(虽然只是一个小问题,稍后我会解释)。出于经济和环境原因,计算需要变得更加高效。英特尔的方法可以提高性能,更好的硅制造技术可以降低功耗,但我总觉得它并不像它本应该那样高效。
示例
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.