主要内容

GPU编程范式

GPU加速计算遵循异质编程模型。软件应用程序的高度可行的部分被映射到在物理分开的GPU设备上执行的内核,而剩余的顺序代码仍在CPU上运行。每个内核分配了几个工人或线程,这些工人或线程是在块和网格中组织的。内核中的每个线程彼此同时执行。

异构编程模型显示了将应用分隔为顺序和可行的部分

GPU CODER™的目的是采用顺序MATLAB®程序并生成分区,优化的CUDA®代码。此过程涉及:

  • CPU/GPU分区 - 识别在GPU上运行的CPU和段中运行的代码段。对于GPU编码器识别CUDA内核的不同方式,请参阅内核创建。CPU和GPU之间的记忆转移成本是内核创建算法的重要考虑因素。

  • 内核分区完成后,GPU编码器分析了CPU和GPU分区之间的数据依赖性。CPU和GPU之间共享的数据分配在GPU内存上(通过使用cudamalloc或者cudamallocmaned蜜蜂)。该分析还确定了必须使用CPU和GPU之间数据复制数据的最小位置集cudamcpy。如果在CUDA中使用统一的内存,则相同的分析通过还确定代码中的最小位置cudadevicesync必须插入呼叫以获取正确的功能行为。

  • 接下来,在每个内核中,GPU编码器可以选择将数据映射到共享内存或常数内存。如果明智地使用,这些记忆是GPU存储器层次结构的一部分,并可能导致更大的内存带宽。有关GPU编码器如何选择映射到共享内存的信息,请参见模板处理。有关GPU编码器如何选择映射到常数内存的信息,请参见coder.gpu.constantmemory

  • 一旦到达分区和内存分配和传输语句,GPU编码器就会生成遵循分区和内存分配决策的CUDA代码。可以将生成的源代码编译到MEX目标中,以从MATLAB内部调用或与外部项目集成在一起的共享库。有关信息,请参阅使用命令行接口代码生成

相关话题