编程模型设计原理

Ascend C编程模型中,并行编程范式核心要素是:一组并行计算任务、通过队列实现任务之间的同步、开发者自主表达对并行计算任务和资源的调度。本节介绍编程模型的设计原理,作为扩展阅读,便于开发者更好的理解编程模型的设计思路和优势,对于后续的深度开发也会有所帮助。

每个并行任务Stage的编程范式如下:

  1. 获取Local Memory的内存:调用AllocTensor申请内存,或者从上游队列DeQue一块内存数据。
  2. 完成计算或者数据搬运。
  3. 把上一步处理好的数据调用EnQue入队。
  4. 调用FreeTensor释放不再需要的内存。

以最简单的矢量编程范式为例,在调用上述接口时,实际上会给各执行单元下发一些指令,如下图所示:

图1 Vector编程范式指令队列示例

通过上文的详细说明,可以看出异步并行程序需要考虑复杂的同步控制,而Ascend C编程模型将这些流程进行了封装,通过EnQue/DeQue/AllocTensor/FreeTensor这种开发者熟悉的资源控制方式来体现,达到简化编程和易于理解的目的。