使用不涉及OpenCL的编程方式来操作Intel IGP(例如Iris Pro 5200)硬件

5
桌面i7-4770k @ 4GHz的核心GFLOPS峰值为4GHz * 8(AVX)*(4 FMA)* 4个核心= 512 GFLOPS。但最新的Intel IGP(Iris Pro 5100/5200)峰值超过800 GFLOPS。因此,一些算法在IGP上运行得更快。将核心与IGP组合在一起会更好。此外,IGP不断吞噬更多硅。 Iris Pro 5100现在占据了超过30%的硅。显然,英特尔台式机处理器的方向是清晰的。
就我所见,除了OpenCL / OpenGL之外,程序员大多忽略了英特尔IGP。我很好奇如何在没有OpenCL的情况下编写适用于计算(例如SGEMM)的Intel HD Graphics硬件的程序? 添加评论:在Linux上,Intel不支持HD图形和OpenCL。我发现了beignet,这是一种开源尝试,至少为Ivy Bridge HD图形添加Linux支持。我没有尝试过它。可能正在开发Beignet的人知道如何编程HD图形硬件而不需要OpenCL。

注意:它是GFLOPS,而不是GFLOPs/s。另外,您为什么要乘以“8(AVX)*(4 FMA)”? - Paul R
我改用了GLOPS。FMA可以同时进行乘法和加法,这会产生一个2的因子,Haswell可以同时执行两个FMA指令,这又会产生另一个2的因子。每个FMA可以执行一个AVX指令,这又会产生另一个8的因子(单精度浮点数)。 - Z boson
GLSL编程?DirectCompute?PTX? - huseyin tugrul buyukisik
3个回答

4
请注意,将数据复制到显卡和从显卡复制回来会影响性能,因此必须考虑这一点。 AMD即将发布具有CPU和GPU上的统一内存的APU芯片,这将在很大程度上缓解此问题。
在CUDA和OpenCL出现之前,GPU以前是通过DirectX或OpenGL利用纹理表示要操作的内存。感谢上帝我们不再需要那样做了!
AMD正在大力推广APU / OpenCL模型,因此更多的程序应该通过OpenCL利用GPU - 如果性能权衡存在。目前,GPU计算是一个有点小众市场的领域,主要用于高性能计算或数字处理,对于网络浏览和文字处理等并不需要。

很久以前,我用680x0汇编语言(在我从计算机科学转到物理学之前)编程Amiga硬件、blitter等,并通过内存映射寄存器编程CPU以外的硬件。难道英特尔IGP没有类似的东西吗?OpenCL通过视频驱动程序运行。我觉得我应该能够直接写入硬件并跳过中间人。 - Z boson
2
为什么要重复造轮子?OpenCL 为什么不能满足您的需求?如果您正在寻找具有高性能的嵌入式解决方案,也许可以选择带有 Radeon GPU 的 AMD 主板? - Austin
OpenCL 依赖于供应商的设备驱动程序。 想象一下,如果您必须等待英特尔为您编写每个操作系统的设备驱动程序来编程 x86,那将会怎样。 没有人会容忍这种情况!上次我检查时,HD 4000 的 OpenCL 驱动程序不支持 Linux。也许现在已经支持了。供应商也可能停止支持设备驱动程序(Nvidia 已经很长时间没有投入太多精力支持 OpenCL)。由于 IGP 看起来是台式机处理器的未来,因此应该可以像使用内部函数一样使用 C++ 对它们进行编程,以在 x86 上执行 SIMD。 - Z boson
我想现在来看,OpenCL 是唯一现实可行的选择。 - Z boson
是的,当你弄清楚所有寄存器并进行优化时,英特尔要么会发布OpenCL支持,要么会推出新硬件。如果你真的想优化你的OpenCL代码,可以考虑使用向量,如float2、float3、float4等。这些向量应该使用SIMD。然而,向量支持因设备而异(NVIDIA现在很糟糕),如果不小心,你可能会过度优化针对特定设备的内核。 - Austin
显示剩余2条评论

4
厂商不再让您使用底层ISA进行编程,这已经没有意义了。
原因如下:
1. 这很困难,大多数程序员不会使用它。 2. 它会阻止他们在未来的版本中调整ISA。
因此,程序员使用一种语言(例如OpenCL中的C99),而运行时会在用户计算机上进行特定于ISA的优化。
这使得以下操作成为可能:
AMD从VLIW向标量机器转换,现有的内核仍然可以运行(大多数情况下运行更快)。如果您直接编写ISA,则无法执行此操作。

是的,我考虑过这个问题。但是在x86核心上不是这种情况。这意味着大多数人浪费了他们的硅(和计算潜力),特别是如果他们使用离散GPU。但是英特尔已经强制桌面用户使用它。我宁愿有更多的x86核心。唯一的选择是OpenCL及其驱动程序。我不认为英特尔的OpenCL HD驱动程序在Linux上工作。我还没有尝试过beignet。此外,英特尔最新的OpenCL SDK只能在Windows上运行。 - Z boson
如果你正在寻找一个小型的基于Linux的解决方案,我建议使用一些廉价的AMD硬件,配备一个不错的集成GPU。目前来看,AMD似乎是最好支持Linux的。 - Austin
你说 AMD 切换到标量机器的说法正确吗?我想你的意思是 AMD 从 VLIW 切换到超标量机器。 - Z boson
来自遥远未来的消息:英特尔的OpenCL SDK已经在Linux上发布了:https://software.intel.com/en-us/opencl-sdk/choose-download - Tomislav Nakic-Alfirevic

1
编程一个像 iris 这样的协处理器没有使用 OpenCL 就相当于驾驶没有方向盘的汽车。
OpenCL 旨在暴露 iris 需要实现其理论性能所需的并行性。你不能仅靠生成几百个线程或进程来获得性能。一些线程块同时在类似的内存地址上执行相同的任务,这是整个问题的关键所在。
也许你可以想出比 OpenCL 更好的范例来实现这个目标;但在你找到时,我建议你尝试学习一些 OpenCL。如果你喜欢 Python 的话,pyopencl 是一个很好的入门地点。

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