主要内容

GPU编程范式

gpu加速计算遵循异构编程模型。软件应用程序的高度并行部分被映射到内核中,在物理上独立的GPU设备上执行,而其余的顺序代码仍然在CPU上运行。每个内核被分配了几个工作人员或线程,这些工作人员或线程被组织在块和网格中。内核中的每个线程相对于其他线程并发执行。

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

GPU编码器™的目标是采取一个顺序的MATLAB®程序和生成分区,优化CUDA®代码。这个过程包括:

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

  • 内核分区完成后,GPU Coder会分析CPU与GPU分区之间的数据依赖关系。CPU和GPU共享的数据会分配到GPU内存中(通过库达马洛克cudaMallocManagedapi)。该分析还确定了数据必须在CPU和GPU之间复制的最小位置集cudaMemcpy.如果在CUDA中使用统一内存,那么同样的分析过程也确定了代码中的最小位置cudaDeviceSync必须插入调用以获得正确的函数行为。

  • 接下来,在每个内核中,GPU编码器可以选择将数据映射到共享内存或常量内存。如果使用得当,这些内存将成为GPU内存层次结构的一部分,并可能产生更大的内存带宽。有关GPU编码器如何选择映射到共享内存的信息,请参阅模板处理.有关GPU编码器如何选择映射到恒定内存的信息,请参阅coder.gpu.constantMemory

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

相关话题