assembly 如何将内核调度到AMD集成GPU?

lqfhib0f  于 2022-11-13  发布在  其他
关注(0)|答案(1)|浏览(138)

AMD提供了大量资源,以确定哪些指令可以在其集成GPU上运行:http://developer.amd.com/wordpress/media/2013/12/AMD_GCN3_Instruction_Set_Architecture_rev1.1.pdf
然而,他们并没有解释如何在第一时间将内核调度到GPU。这是如何工作的?是由汇编指令完成的,还是由一些通过库控制的驱动程序完成的?
简而言之:AMD GPU的组装版Hello World会是什么样子?

ryhaxcpt

ryhaxcpt1#

从广义上讲,您可以在GPU的RAM上分配一些内存,将程序二进制加载到其中,然后向GPU发出执行命令。这些操作的细节是GPU驱动程序的主题,并通过OpenCL或Vulkan Compute等API向用户空间公开。其中代替原始GPU特定指令,机器独立表示(就像Java二进制文件一样)由Just In Time编译器就地编译为GPU指令。
最优雅的方法当然是异构的胖二进制文件,其中操作系统负责处理细节,您可以通过调用一个trampoline函数来发出内核执行-这实际上是CUDA的做法。
但是,AMD GPU * 的驱动程序 * 是开源的,因此,如果您想深入了解最低级别的实际工作原理,最好的办法可能是阅读梅萨中GCN驱动程序的源代码,特别是它们对Vulkan计算和OpenCL的实现。
最短的“Hello GPU”程序可以是:

  • 如果你想使用“常规”驱动程序,一个简单的OpenCL或Vulkan计算程序。
  • 如果你想自己做所有事情:实现了梅萨为GCN 3的基本基础设施支持所做的全部工作,加上一个最小的前端,使用它来加载二进制文件和调度执行。

相关问题