主要内容

GPU编程范式

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

异构编程模型,将应用程序分离为顺序的和可并行的部分

GPU Coder™的目标是取一个序列的MATLAB®编程并生成分区优化的CUDA®从中编写代码。这个过程包括:

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

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

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

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

相关的话题