|
|
1
10
基本上,英特尔OpenCL编译器对某些类型的内核执行水平自动矢量化。这意味着,使用SSE4,您可以在单个内核中并行运行8个线程,其方式与Nvidia GPU在单个32宽simd单元中运行32个线程的方式类似。 这种方法有两个主要好处:如果在2年内将SSE矢量宽度增加到16,会发生什么?然后,当您在该CPU上运行时,您将立即获得16个线程的自动矢量化。无需重新编译代码。第二个好处是,与用ASM或C编写OpenCL内核并让编译器生成高效代码相比,编写易于自动矢量化的OpenCL内核要容易得多。 |
|
|
2
4
随着OpenCL实现的成熟,可以在各种设备上为内核实现良好的性能可移植性。我的研究小组最近的一些工作表明,在某些情况下,OpenCL代码在CPU和GPU上实现了硬件峰值性能的一小部分。在CPU上,OpenCL内核被Intel的OpenCL CPU实现非常有效地自动矢量化。在GPU上,Nvidia(其OpenCL仍然工作得出奇出色)和AMD为HPC和桌面设备生成了高效代码。 如果您无论如何都想开发OpenCL代码以利用GPU,那么通过在CPU上运行相同的代码,您通常可以“免费”获得快速的多核+SIMD版本。 我的小组最近发表了两篇论文,详细介绍了我们使用OpenCL在四个不同的实际应用程序中取得的性能可移植性结果,请参阅: “关于许多核心计算机架构上结构化网格代码的性能可移植性”,S.N.McIntosh-Smith、M.Boulton、D.Curran和J.R.Price。ISC,莱比锡,2014年6月。DOI:10.1007/978-3-319-07518-14 “多核处理器上的高性能电子虚拟药物筛选”,S.McIntosh Smith,J.Price,R.B.Sessions,A.A.Ibarra,IJHPCA 2014。DOI:10.1177/1094342014528252 |
|
3
4
我已经考虑了一段时间。您可以在不使用OpenCL和C++中没有太多困难的情况下获得OpenCL对CPU的大部分优势。为此,您需要:
使用CPU调度器可以确定可用的硬件,并根据硬件选择最佳代码路径。这提供了OpenCL的优点之一。 这为您提供了OpenCL在CPU上的大部分优点,而没有其所有缺点。您永远不用担心供应商停止支持驱动程序。英伟达对OpenCL的支持很少,包括它可能永远无法修复的几年前的bug(我浪费了太多时间)。英特尔只有适用于Windows的Iris Pro OpenCL驱动程序。使用我建议的方法的内核可以使用所有C++特性,包括模板,而不是OpenCL的受限和扩展版本的C(尽管我确实喜欢这些扩展)。您可以确保您的代码以这种方式实现您想要的功能,而不会受到某些设备驱动程序的影响。 我建议的方法的一个缺点是,你不能只安装一个新的驱动程序,并让它针对新的硬件进行优化。然而,VCL已经支持AVX512,因此它已经为尚未推出的硬件构建,并且在几年内不会被取代。在任何情况下,为了最大限度地利用硬件,您几乎肯定必须在OpenCL中为该硬件重写内核——新的驱动程序只能帮助这么多。 有关SIMD数学库的更多信息。为此,您可以使用Intel昂贵的封闭源代码SVML(如果您在安装Intel OpenCL驱动程序后搜索SVML,请不要将SDK与驱动程序混淆)。或者你可以使用AMD的免费但开源的LIBM。然而,这两种处理器都不能在竞争对手的处理器上正常工作。Agner Fog的VCL在两个处理器上都运行良好,开源且免费。 |
|
|
Coder117 · 管道中的MIPS lw延迟 8 年前 |
|
|
Omar Aflak · 在处理器中找不到Javapoet 8 年前 |
|
|
gshepherd7 · Camel动态构建处理器bean调用 8 年前 |
|
|
Trace · NodeJS:理解非阻塞/事件队列/单线程 11 年前 |
|
|
0x90 · 在aCPU上运行OpenCL代码有什么好处?[已关闭] 11 年前 |
|
|
vkulkarni · Q(饱和标志)在ARM中的重要性 12 年前 |