AMD提供了大量资源,以确定哪些指令可以在其集成GPU上运行:http://developer.amd.com/wordpress/media/2013/12/AMD_GCN3_Instruction_Set_Architecture_rev1.1.pdf
然而,他们并没有解释如何在第一时间将内核调度到GPU。这是如何工作的?是由汇编指令完成的,还是由一些通过库控制的驱动程序完成的?
简而言之:AMD GPU的组装版Hello World会是什么样子?
AMD提供了大量资源,以确定哪些指令可以在其集成GPU上运行:http://developer.amd.com/wordpress/media/2013/12/AMD_GCN3_Instruction_Set_Architecture_rev1.1.pdf
然而,他们并没有解释如何在第一时间将内核调度到GPU。这是如何工作的?是由汇编指令完成的,还是由一些通过库控制的驱动程序完成的?
简而言之:AMD GPU的组装版Hello World会是什么样子?
1条答案
按热度按时间ryhaxcpt1#
从广义上讲,您可以在GPU的RAM上分配一些内存,将程序二进制加载到其中,然后向GPU发出执行命令。这些操作的细节是GPU驱动程序的主题,并通过OpenCL或Vulkan Compute等API向用户空间公开。其中代替原始GPU特定指令,机器独立表示(就像Java二进制文件一样)由Just In Time编译器就地编译为GPU指令。
最优雅的方法当然是异构的胖二进制文件,其中操作系统负责处理细节,您可以通过调用一个trampoline函数来发出内核执行-这实际上是CUDA的做法。
但是,AMD GPU * 的驱动程序 * 是开源的,因此,如果您想深入了解最低级别的实际工作原理,最好的办法可能是阅读梅萨中GCN驱动程序的源代码,特别是它们对Vulkan计算和OpenCL的实现。
最短的“Hello GPU”程序可以是: