主要内容

GPU编程范式

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

异构编程模型,显示应用于顺序和并行部分的应用

GPU编码器™的目标是采用连续的Matlab®程序并生成分区,优化的CUDA®代码。这个过程涉及:

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

  • 在完成内核分区后,GPU编码器分析CPU和GPU分区之间的数据依赖性。在GPU存储器上分配了CPU和GPU之间共享的数据(通过使用Cudamalloc.要么CudamallocManaged.蜜蜂)。分析还确定通过使用的数据必须在CPU和GPU之间复制数据的最小位置集Cudamemcpy.。如果在CUDA中使用统一内存,则相同的分析通行证还确定代码中的最小位置Cudadevicsync.必须插入调用以获得正确的功能行为。

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

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

相关话题