Ascend C学习 (对比cuda实现)
收藏回复举报
Ascend C学习 (对比cuda实现)
新人帖
发表于2023-11-13 14:42:53
0 查看

昇腾Ascend C是一种面向算子开发场景的编程语言,它原生支持C/C++编程规范,通过多层接口抽象、并行编程范式和孪生调试等技术,极大提高了算子的开发效率。

昇腾Ascend C算子开发的一些要求和特性:

1、确定算子需求:在开始算子开发之前,你需要明确算子的需求和功能。这包括输入输出的数据类型、形状和计算逻辑等。

2、编写算子代码:使用Ascend C语言编写算子的代码。 Ascend C提供了多层接口抽象,屏蔽了底层硬件差异,使得算子开发更加简单。可以聚焦于实现算子的核心逻辑,而不必过多关注底层细节。

3、并行编程范式:Ascend C基于流水线并行的编程范式,将算子核心逻辑划分为"搬入、计算、搬出"三个阶段。只需关注实现这三个阶段的内容,而不必担心并行调度和同步问题。

4、孪生调试:Ascend C提供了孪生调试功能,可以帮助快速定位和解决算子开发中的问题。可以在仿真环境中进行调试,提高开发效率。

需要注意的是,算子开发是一个复杂的过程,需要考虑多个因素,包括语言学习成本、功能逻辑的实现、硬件指令的适配以及算子运行精度和性能的达标等。因此,建议在算子开发过程中参考昇腾官方提供的文档和教程,以便更好地理解和应用昇腾Ascend C编程语言。

使用昇腾Ascend C进行算子开发的一般步骤如下:

  • 安装昇腾NPU驱动和固件,确保系统环境准备就绪。
  • 使用Ascend C编程语言编写算子代码,可以使用昇腾提供的开发工具和API进行开发。
  • 使用CANN的图编译器将算子代码编译成NPU可以运行的模型。
  • 在昇腾AI处理器上加载和执行编译后的模型,进行算子开发和测试。

Ascend C和TBE(Tensor Boost Engine)算子开发是昇腾NPU中两种不同的算子开发方式。

Ascend C算子开发

Ascend C是一种面向算子开发场景的编程语言,原生支持C/C++编程规范。 使用Ascend C可以通过多层接口抽象、并行编程范式、孪生调试等技术,提高算子的开发效率。 Ascend C开发的算子可以通过昇腾NPU的异构计算架构CANN(Compute Architecture for Neural Networks)运行在昇腾AI处理器上。

TBE算子开发

TBE(Tensor Boost Engine)是昇腾NPU的自定义算子开发工具,基于TVM(Tensor Virtual Machine)框架。 TBE提供了两种算子开发方式:DSL(Domain-Specific Language)和TIK(Tensor Iterator Kernel)。

DSL方式只需要定义算子的计算表达,不需要考虑调度,适合初学者和快速验证等场景。 TIK方式需要同时定义计算和调度,需要了解昇腾AI处理器的SOC结构与特性,可以开发出更高性能的算子。

Tips:

Ascend C和TBE哪个更适合初学者?

初学者更适合使用Ascend C进行算子开发。Ascend C是昇腾AI处理器针对算子开发场景推出的编程语言,原生支持C和C++标准规范,最大化匹配用户开发习惯。

使用Ascend C进行算子开发时,开发者可以通过多层接口抽象、并行编程范式、孪生调试等技术,极大提高算子的开发效率。此外,Ascend C开发的算子可以通过昇腾AI处理器的异构计算架构CANN运行在昇腾AI处理器上。

相比之下,TBE算子开发需要使用TBE工具,提供了DSL和TIK两种算子开发方式。DSL方式只需要定义算子的计算表达,不需要考虑调度,适合初学者和快速验证等场景。而TIK方式需要同时定义计算和调度,需要了解昇腾AI处理器的SOC结构与特性,可以开发出更高性能的算子。

因此,初学者更适合使用Ascend C进行算子开发,因为它原生支持C和C++标准规范,提供了多层接口抽象和并行编程范式等功能,可以帮助初学者快速入门并提高开发效率。而TBE算子开发则需要更深入的了解昇腾AI处理器的特性和调度机制,适合对性能有一定要求的场景。

我要发帖子