尧图精选

pyasc asc.language.basic 算子编程接口全解析:数据搬运、向量运算、矩阵计算与同步控制实战指南

🕒 发布时间:2026/9/18 11:19:05 📁 来源:尧图网络
pyasc asc.language.basic 算子编程接口全解析数据搬运、向量运算、矩阵计算与同步控制实战指南【免费下载链接】pyasc本项目为Python用户提供算子编程接口支持在昇腾AI处理器上加速计算接口与Ascend C一一对应并遵守Python原生语法。项目地址: https://gitcode.com/cann/pyasc导读asc.language.basic是 CANN pyasc 为 Python 开发者提供的算子编程基础接口模块与 Ascend C 的 Basic 级 API 一一对应覆盖数据搬运、精度转换、向量二元/一元/归约运算、矩阵乘加、核间与流水线同步、调试 Dump 等全部底层能力。本文以 docs/python-api/language/basic.md 为主线结合 python/asc/language/basic 下的 Python 包装源码与docs/python-api/language/generated/下的逐接口文档系统性梳理该模块的分类结构、核心接口签名、参数语义与约束并给出可复制的 Python 调用示例。读完本文你将能够在 pyasc 算子内核中熟练完成数据搬运与格式转换、按需求选用向量与矩阵运算指令、正确插入同步原语规避数据依赖并借助调试接口定位算子问题。模块定位pyasc 的指令级算子编程层从 python/asc/language/basic/init.py 可以看到asc.language.basic是 pyasc 语言前端中按指令域组织的核心包它向上承接asc.language.adv高阶 Matmul 等封装向下映射为昇腾 AI Core 的硬件指令。模块导出按功能域划分块同步与流水线同步data_sync_barrier、pipe_barrier、set_flag/wait_flag、cross_core_set_flag/cross_core_wait_flag、ib_set/ib_wait、sync_allCache 与预取data_cache_clean_and_invalid、data_cache_preload、icache_preload、get_icache_preload_status数据搬运与格式转换copy、data_copy、data_copy_pad、load_image_to_local、transpose、trans_data_to_5hd、load_data系列调试与 Dumpdump_tensor、dump_acc_chk_point、printf、metrics_prof_start/metrics_prof_stop、trap系统变量get_block_idx、get_block_num、get_sub_block_idx、get_task_ratio、get_system_cycle、get_data_block_size_in_bytes等标量、向量、矩阵运算scalar_*系列、vec_*系列binary/unary/reduce/scatter/gather 等、mmad与load_data_with_sparse这些接口的 Python 实现普遍遵循同一模式以require_jit装饰器约束在asc.jit内核上下文中调用通过global_builder.get_ir_builder()获取 IR 构造器最终生成对应的 MLIR 算子如 vec_binary.py 中add会调用create_asc_AddL0Op/create_asc_AddL1Op/create_asc_AddL2Op由操作数所在 TPosition 决定实际指令变体。因此调用方传入的 Tensor 所在存储位置TPosition直接决定了底层指令的选择。Common operations通用与数据搬运接口精度转换castcast根据源操作数和目的操作数 Tensor 的数据类型进行精度转换对应 Ascend C 的Cast。Python 侧提供三类重载详见 asc.language.basic.cast.mdcount 模式处理 tensor 前 n 个连续数据asc.cast(dst, src, round_mode, count)mask 连续模式asc.cast(dst, src, round_mode, mask, repeat_times, repeat_params)mask 逐 bit 模式mask传入List[int]。round_mode使用asc.RoundMode枚举控制舍入策略CAST_NONE无精度损失时不舍入有损失时等价 CAST_RINT、CAST_RINT四舍六入五成双、CAST_FLOOR向负无穷、CAST_CEIL向正无穷、CAST_ROUND四舍五入、CAST_TRUNC向零、CAST_ODD最近邻奇数舍入。# tensor 高维切分计算mask 连续模式 mask 256 // asc.int32.sizeof() params asc.UnaryRepeatParams(1, 1, 8, 4) asc.cast(dst, src, asc.RoundMode.CAST_CEIL, maskmask, repeat_times8, paramsparams) # mask 逐 bit 模式 mask [0, 0xFFFFFFFFFFFFFFFF] asc.cast(dst, src, asc.RoundMode.CAST_CEIL, maskmask, repeat_times8, paramsparams) # tensor 前 n 个数据计算 asc.cast(dst, src, asc.RoundMode.CAST_CEIL, count512)约束方面dst/src 支持 VECIN/VECCALC/VECOUT 位置且起始地址需 32 字节对齐当源与目的类型位数不同时计算输入参数以字节数较大的数据类型为准当涉及int4b_t时连续模式 mask 与 count 必须为偶数。数据搬运data_copydata_copyDataCopy 系列是算子开发中使用频率最高的搬运接口支持Global MemoryGM与 Local Memory 之间的双向搬运GM→VECIN/VECOUT、VECOUT→GMLocal Memory 内部搬运如 VECIN→VECOUT随路格式转换ND↔NZ 等与量化激活等增强能力。Python 侧重载形态见 asc.language.basic.data_copy.mdcount连续搬运、DataCopyParams连续/非连续搬运、DataCopyParams DataCopyEnhancedParams增强搬运、slice_list1/slice_list2 dim_value切片搬运以及Nd2NzParams/Nz2NdParamsFull/DataCopyCO12DstParams等格式转换搬运。pipe asc.Tpipe() in_queue_src asc.TQue(asc.TPosition.VECIN, 1) out_queue_dst asc.TQue(asc.TPosition.VECOUT, 1) src_global asc.GlobalTensor() dst_global asc.GlobalTensor() pipe.init_buffer(quein_queue_src, num1, len512 * asc.half.sizeof()) pipe.init_buffer(queout_queue_dst, num1, len512 * asc.half.sizeof()) src_local in_queue_src.alloc_tensor(asc.half) dst_local out_queue_dst.alloc_tensor(asc.half) # count 模式连续搬运 asc.data_copy(src_local, src_global, count512) asc.data_copy(dst_local, src_local, count512) asc.data_copy(dst_global, dst_local, count512) # DataCopyParams 模式支持连续与非连续搬运 intri_params asc.DataCopyParams() asc.data_copy(src_local, src_global, paramsintri_params) asc.data_copy(dst_local, src_local, paramsintri_params) asc.data_copy(dst_global, dst_local, paramsintri_params)使用注意多个data_copy的目的地址若存在重叠需通过pipe_barrier插入同步指令保证串行化跨卡通信场景仅支持 HCCS 物理链路可通过npu-smi info -t topo查询。非对齐搬运data_copy_pad与填充值set_pad_valuedata_copy_pad提供数据非对齐搬运功能GM→Local Memory 时可自行填充数据set_pad_value设置需要填充的数值支持 GM→VECIN 与 GM→VECOUT 通路。两者常配合使用先asc.set_pad_value(...)指定填充值再执行asc.data_copy_pad(...)。其他搬运与预处理copy在 Vector Core 的不同内部存储单元VECIN/VECCALC/VECOUT之间搬运load_image_to_local将图像数据从 GM 搬运到 A1/B1搬运过程中可完成图像翻转、尺寸变化、色域转换与类型转换等预处理预处理参数由set_aipp_functions配置load_data面向 Cube 的 2D/3D 分形矩阵加载GM→A1/B1、A1→A2 等分形矩阵大小与数据类型相关——uint8_t/int8_t在 A1/A2 为 16×32、在 B1/B2 为 32×16half/bfloat16_t为 16×16float在 A1/A2 为 16×8、在 B1/B2 为 8×16支持 GM→A1、GM→B1、GM→A2、GM→B2、A1→A2、B1→B2 数据通路。从 mm.py 的OverloadDispatcher实现可见load_data会根据LoadData2DParams/LoadData2DParamsV2/LoadData3DParamsV1/V2/V2Pro等参数类型与源目的 Tensor 类型自动分派到LoadDataL0/G2L/L0V2/G2LV2/3DL0V1/3DL0V2等不同 IR Opload_data_with_transpose带转置的 2D 数据从 A1/B1 到 A2/B2 的加载transpose16×16 二维矩阵块转置或 [N,C,H,W]↔[N,H,W,C] 格式转换trans_data_to_5hd一般用于 NCHW→NC1HWC0 转换单次 repeat 可处理 512 Byte16 个 datablock支持不同 shape 的矩阵转置与多次 repeat。矩阵结果后处理fixpipefixpipe在矩阵计算完成后对结果进行处理如量化并把数据从 CO1 搬迁到 Global Memory随路量化时的标量量化参数通过set_fix_pipe_pre_quant_flag设置。相关实现位于 fixpipe.py。掩码Mask体系Normal 与 Counter 模式掩码是 pyasc 矢量计算的核心控制机制相关接口包括set_mask_count、set_mask_norm、set_vector_mask、reset_mask。使用前必须先设置掩码模式set_mask_norm()Normal 模式默认又分连续模式与逐 bit 模式见 asc.language.basic.set_vector_mask.md连续模式len单次迭代前多少个连续元素参与计算。16 位操作数 mask∈[1,128]32 位 mask∈[1,64]64 位 mask∈[1,32]逐 bit 模式mask_high/mask_lowbit 位为 1 参与计算。16 位时 high/low ∈ [0, 2⁶⁴-1] 且不同时为 032 位时 high0、low∈(0, 2⁶⁴-1]64 位时 high0、low∈(0, 2³²-1]。set_mask_count()Counter 模式mask表示整个矢量计算参与的元素总数无需显式指定迭代次数与处理非对齐尾块。# Counter 模式整个计算共 128 个元素 len 128 asc.set_mask_count() asc.set_vector_mask(len, dtypeasc.float16, modeasc.MaskMode.COUNTER) asc.reset_mask() # Normal 模式逐 bit mask_high 2**64 - 1 mask_low 2**64 - 1 asc.set_mask_norm() asc.set_vector_mask(mask_high, mask_low, dtypeasc.float16, modeasc.MaskMode.NORMAL) asc.reset_mask() # Normal 模式连续每次迭代前 64 个元素参与计算 len 64 asc.set_mask_norm() asc.set_vector_mask(len, dtypeasc.float32, modeasc.MaskMode.NORMAL) asc.reset_mask()注意set_vector_mask仅在矢量计算 API 的is_set_maskFalse时生效使用完成后必须调用reset_mask()恢复默认值全 1。dtype参数由 Python 前端显式指定用于推导 C 模板参数 T。同步原语从核内流水线到多核协作核内同步set_flag/wait_flag、pipe_barrier、data_sync_barrierset_flag/wait_flag同一核内不同流水线之间的同步指令具有数据依赖的不同流水指令之间需插入此同步参数为HardEvent事件与可选event_idpipe_barrier阻塞相同流水具有数据依赖的相同流水之间需插入此同步参数为PipeIDdata_sync_barrier阻塞后续指令直到所有之前的内存访问指令执行结束等待范围由MemDsbT参数控制。这些接口在 block_sync.py 中一一映射到create_asc_DataSyncBarrierOp、create_asc_PipeBarrierOp、create_asc_SetFlagOp/create_asc_WaitFlagOp等 IR Op。多核同步sync_all、ib_set/ib_wait、notify_next_block/wait_pre_block当不同核操作同一块全局内存且存在读后写、写后写、写后读等数据依赖时需插入多核同步sync_all 提供硬同步与软同步两种方式硬同步asc.sync_all()利用硬件自带的全核同步指令由硬件保证多核同步软同步asc.sync_all(gm, ub, used_cores0)使用软件算法模拟实现gm_workspace为所有核共用的全局状态缓存int32_t空间 ≥ 核数×32B 且需初始化为 0ub_workspace为每核独立的局部状态空间 ≥ 核数×32Bused_cores指定参与同步的核数不超过逻辑 blockNum不传表示全核软同步is_aiv_onlyTrue默认仅同步 Vector 核False用于融合算子软同步不支持。从 block_sync.py 可见sync_all在未传 workspace 时生成asc_SyncAllHardOp传入时生成asc_SyncAllSoftOp。约束使用多核同步时算子调用指定的逻辑 blockNum 必须不大于实际运行核数否则多轮调度时会插入异常同步导致 Kernel卡死。ib_set/ib_wait成对出现通过 GM 工作区与 UB 工作区实现核间等待参数含block_idx、event_id、is_aiv_only对应 IR 为asc_IBSetOp/asc_IBWaitOp见 block_sync.pynotify_next_block/wait_pre_block通过读写 Global Memory 中的标志位通知/等待相邻 AI Core 完成操作见 determine_compute_sync.py。分离架构核间同步cross_core_set_flag/cross_core_wait_flag面向 AIC/AIV 分离架构的核间同步控制每个flag_id取值范围 0-10对应一个初始值为 0 的计数器执行cross_core_set_flag后计数器加 1执行cross_core_wait_flag时若计数为 0 则阻塞大于 0 则减一并继续执行详见 asc.language.basic.cross_core_set_flag.md。支持三种模式模式 0AI Core 核间同步——AIC 场景同步所有 AIC 核、AIV 场景同步所有 AIV 核模式 1AI Core 内部 AIV 核之间同步模式 2AI Core 内部 AIC 与 AIV 之间同步。asc.cross_core_set_flag(flag_id0, mode_id0, pipeasc.PipeID.PIPE_V) asc.cross_core_wait_flag(flag_id0, mode_id0, pipeasc.PipeID.PIPE_V)约束同一 flagId 的计数器最多设置 15 次由于 Matmul 高阶 API 内部已使用本接口不建议与其同时使用以免 flagID 冲突使用时需按纯 Vector/Cube 场景设置 Kernel 类型为KERNEL_TYPE_MIX_AIV_1_0或KERNEL_TYPE_MIX_AIC_1_0。另有get_task_ratio可获取分离模式下 AIC 或 AIV 数量与 AI Core 数量的比例耦合模式固定返回 1。TensorDesc 与 ListTensorDesc动态 Shape 描述对于 shape 动态变化的算子basic 模块提供两类描述对象见 list_tensor.pyasc.language.basic.TensorDesc(dtypeKT.float32)与TensorDesc(handle, dtype)提供set_shape_addr配置用于储存 shape 信息的地址get_dim获取 Tensor 的维度get_index获取 TensorDesc 在 ListTensorDesc 中的索引值get_shape获取对应维度的 shape 信息get_data_ptr获取 Tensor 数据存储地址get_data_obj将数据指针置于 GlobalTensor 中并返回该 GlobalTensor。asc.language.basic.ListTensorDesc构造形式包括ListTensorDesc()、ListTensorDesc(data: GlobalAddress, length4294967295, shape_size4294967295)与ListTensorDesc(handle)提供init初始化函数用于解析对应的内存排布get_desc(index)根据 index 获取对应的 TensorDesc 信息get_data_ptr(index)根据 index 获取对应数据存储地址get_size获取 ListTensor 中包含的数据指针个数。标量Scalar运算接口功能scalar_cast对标量数据类型进行转换count_bits_cnt_same_as_sign_bit计算 int64_t 数字从最高数值位起与符号位相同的连续比特位数输入 -1 或 0 时返回 -1scalar_count_leading_zero计算 uint64_t 数字二进制前导 0 的个数scalar_get_count_of_value获取 uint64_t 数字二进制中 0 或 1 的个数scalar_get_sff_value获取从 LSB 开始第一个 0 或 1 出现的位置未找到返回 -1这些位操作类标量函数见 scalar.py常用于掩码计算、索引偏移计算等标量侧逻辑为矢量/矩阵指令提供运行时参数。向量运算族二元、一元、标量混合与归约向量二元运算Vector binary operations二元运算均接受(dst, src0, src1, ...)Python 侧提供三种重载形态count 模式、mask 连续模式int、mask 逐 bit 模式List[int]并统一带is_set_maskTrue参数。以add为例vec_binary.pyoverload def add(dst: LocalTensor, src0: LocalTensor, src1: LocalTensor, count: int, is_set_mask: bool True) - None: ... overload def add(dst: LocalTensor, src0: LocalTensor, src1: LocalTensor, mask: int, repeat_times: int, repeat_params: BinaryRepeatParams, is_set_mask: bool True) - None: ... overload def add(dst: LocalTensor, src0: LocalTensor, src1: LocalTensor, mask: List[int], repeat_times: int, repeat_params: BinaryRepeatParams, is_set_mask: bool True) - None: ...基础接口包括add求和、sub求差、mul求积、div求商、max/min最大/最小、compare逐元素比较真为 1 假为 0结果可存入寄存器。融合接口提供算数激活/量化/转换的组合add_relu、sub_relu、add_relu_cast、sub_relu_cast、add_deq_relu、mul_cast、mul_add_dst、fused_mul_adddst src0 × dst src1、fused_mul_add_relu。位运算bitwise_and/bitwise_or为避免与 Python 关键字重名而采用该命名。bilinear_interpolation为图像双线性插值专用接口分为水平/垂直迭代支持repeat_mode控制 src1 取值数量。向量一元运算Vector unary operationsabs、exp、ln、sqrt、rsqrt、reciprocal、relu、bitwise_not、gather_mask按 mask 二进制从源操作数选取元素。命名同样注意了与 Python 关键字的冲突处理bitwise_not而非not。向量-标量混合运算Vector-scalar operationsadds、muls、maxs、mins矢量每个元素与标量比较/运算、leaky_relu、compare_scalar、shift_left/shift_right左移/右移位数由标量参数决定。向量归约运算Vector reduce operations归约接口在 vec_reduce.py 中实现统一经由reduce_op_impl根据 mask 是 int 还是 List[int] 分发到 L0/L1 两个 IR Oppair_reduce_sum相邻奇偶元素两两求和序列 (a1,a2,a3,a4,...) → (a1a2, a3a4, ...)repeat_reduce_sum每个 repeat 内所有数据求和不支持 mask 逐 bit 模式建议用whole_reduce_sumwhole_reduce_sum每个迭代内所有数据求和whole_reduce_max/whole_reduce_min每个 repeat 内求最大值/最小值及其索引返回的索引值为 repeat 内部索引。此外还有block_reduce_sum/max/min、reduce_sum/max/min等 Block/Repeat 粒度变体。矩阵运算mmad、稀疏加载与常量初始化mmad矩阵乘加mmad完成 C A × B 操作见 asc.language.basic.mmad.md三个矩阵分别位于 A2/B2/CO1数据排布格式分别为 ZZ、ZN、NZ。Python 签名支持带 bias 与不带 bias 两种asc.jit def kernel_mmad_basic(): dst asc.LocalTensor(dtypeasc.float16, posasc.TPosition.CO1, addr0, tile_size1024) fm asc.LocalTensor(dtypeasc.float16, posasc.TPosition.A2, addr0, tile_size1024) filter asc.LocalTensor(dtypeasc.float16, posasc.TPosition.B2, addr0, tile_size1024) params asc.MmadParams(4, 4, 4) asc.mmad(dst, fm, filter, params)MmadParams关键字段m左矩阵 Height、n右矩阵 Width、k左矩阵 Width/右矩阵 Height取值范围均为 [0,4095]cmatrixInitValC 矩阵初始值是否为 0默认 true、cmatrixSourceC 初始值是否来源于 C2 硬件缓存区默认 falseisBias已废弃。约束M/K/N 任一为 0 时指令不执行M1 时默认开启 GEMV左矩阵需按 ND 格式直接排布。稀疏矩阵计算load_data_with_sparse搬运 B1 中 512B 稠密权重矩阵到 B2同时读取 128B 索引矩阵用于稠密矩阵稀疏化。索引矩阵数据类型为 int2需拼成 int8 传入且在一个 int8 地址内逆序排布例如索引矩阵1 2 0 1 0 2 1 0在地址中排布为1 0 2 1 0 1 2 0mmad_with_sparse左矩阵 A 为稀疏矩阵计算时完成稠密化右矩阵 B 为稠密矩阵需预先通过load_data_with_sparse载入并生成索引矩阵索引矩阵再用于 A 矩阵的稠密化。其他矩阵相关接口init_const_value将特定 TPosition 的 LocalTensor 初始化为某一具体数值set_load_data_boundary设置 load_3d 时 A1/B1 边界值源操作数地址超出边界则从起始地址重新读取set_load_data_padding_value设置 load_3d_v1/v2 的 Pad 填充数值需模板参数isSetPaddingtrue才生效set_load_data_repeat设置 load_3d_v2 的 repeat 参数一次调用完成多个迭代的数据搬运。矩阵乘计算模式配置set_hf32_mode开启后 L0A/L0B 中的 FP32 数据在参与矩阵乘法前被舍入为 HF32 精度set_hf32_trans_mode设置 HF32 取整模式仅在 HF32 开启时有效set_mm_layout_transform设置 Mmad 的 M/N 方向优先顺序先按 N 再按 M或先按 M 再按 Nset_deq_scale设置 DEQSCALE 寄存器的值配合反量化链路使用。原子操作与 Cache 管理原子操作set_atomic_*系列控制从 VECOUT/L0C/L1 到 GM 的数据传输是否执行原子运算相关实现见 set_atomic.pyset_atomic_add(dtype)开启原子累加通过dtype设定数据类型set_atomic_max/set_atomic_min将待拷贝内容与 GM 已有内容比较把最大/最小值写入 GMset_atomic_type设置原子操作的数据类型模板参数set_atomic_none清空原子操作状态。Cache 管理data_cache_clean_and_invalid刷新 Cache保证 Cache 与 Global Memory 之间的数据一致性data_cache_preload从源地址所在 GM 地址预加载数据到 data cacheicache_preload从指令所在 DDR 地址预加载指令到 ICacheget_icache_preload_status获取 ICACHE 的 PreLoad 状态。相关实现位于 cache.py。调试、Dump 与性能采集dump_tensor基于算子工程开发时 Dump 指定 Tensor 的内容dump_acc_chk_point支持指定 Tensor 偏移位置进行 Dump同时支持打印自定义附加信息仅 uint32_t 类型可用于打印执行位置、行号等调试信息比dump_tensor更适合精细化调试与问题定位printf提供 CPU 域/NPU 域调试场景下的格式化输出功能在 kernel 侧需要输出日志的位置调用trapKernel 侧调用NPU 模式下中断 AI Core 运行CPU 模式下等同于 assert用于异常场景调试metrics_prof_start/metrics_prof_stop配合 msProf 工具进行算子上板调优在 kernel 代码段前后分别调用以指定需要调优的代码段范围get_system_cycle获取当前系统 cycle 数按 50MHz 频率换算时间time (cycle 数/50) us。以上接口统一实现在 dump_tensor.py。系统变量多核索引与核数查询get_block_idx获取当前核的 index用于多核逻辑控制及多核偏移量计算get_block_num获取当前任务配置的核数get_sub_block_idx获取 AI Core 上 Vector 核的 IDget_task_ratio分离模式下 AIC/AIV 数量与 AI Core 数量的比例get_data_block_size_in_bytes获取当前芯片版本一个 datablock 的大小byte可用于计算 repeatTime、DataBlock Stride、Repeat Stride 等指令参数get_program_counter获取程序计数器指针记录当前程序执行位置get_sys_workspace/get_hccl_context/set_hccl_context获取系统 workspace 指针、获取/设置通信域 context消息区地址。这些接口在 sys_var.py 中实现。在典型的 vector 算子中多核并行通常这样组织模式参见 test_vadd.pyasc.jit def vadd_kernel(x: asc.GlobalAddress, y: asc.GlobalAddress, z: asc.GlobalAddress, block_length: asc.ConstExpr[int], ...): offset asc.get_block_idx() * block_length # 按核计算数据偏移 x_gm asc.GlobalTensor() x_gm.set_global_buffer(x offset) ...Region Proposal 与排序族接口basic 模块还包含面向目标检测场景Region Proposal的专用指令见 proposal.pymrg_sort将已排好序的多个队列合并成一条队列并按指定顺序排序mrg_sort4将最多 4 条已排序 Region Proposals 队列合并为 1 条按 score 域由大到小排序rp_sort16根据 score 域排序score 大的排前面每次排 16 个 Region Proposalsproposal_concat每次迭代将 16 个连续元素合入 16 个 Region Proposals 的对应位置proposal_extract与 concat 相反从 16 个 Region Proposals 抽取元素后连续排列sort/sort32按数值大小降序排序sort32 一次迭代完成 32 个数排序。另有select按 sel_mask 比特位从两个源操作数中选择元素、scatter按偏移地址将输入张量分散到结果张量、duplicate将变量或立即数复制多次填充到向量、get_cmp_mask/set_cmp_mask比较寄存器获取/设置、axpy向量-标量三元运算等接口。快速上手完整 vector 算子中的 basic 接口组合将上述能力串联起来一个典型的分片 vector 算子会按搬运→计算→搬出的流水线组织。以加法为例完整内核见 test_vadd.pyasc.jit def compute(z_gm: asc.GlobalTensor, in_queue_x: asc.TQue, in_queue_y: asc.TQue, out_queue_z: asc.TQue, tile_length: asc.ConstExpr[int]): x_local in_queue_x.deque(z_gm.dtype) y_local in_queue_y.deque(z_gm.dtype) z_local out_queue_z.alloc_tensor(z_gm.dtype) asc.add(z_local, x_local, y_local, counttile_length) # 向量二元运算 out_queue_z.enque(z_local)其中data_copyGM↔Local、add向量运算、get_block_idx多核分片、TPipe/TQueasc.language.fwk 流水框架共同构成了 basic 层接口的典型使用范式。参考资料与延伸阅读本模块总览docs/python-api/language/basic.md逐接口生成文档docs/python-api/language/generated如asc.language.basic.cast.md、asc.language.basic.data_copy.md、asc.language.basic.set_vector_mask.md、asc.language.basic.sync_all.md、asc.language.basic.cross_core_set_flag.md、asc.language.basic.mmad.mdPython 实现源码python/asc/language/basic按功能域拆分block_sync.py、data_copy.py、vec_binary.py、vec_reduce.py、mm.py、dump_tensor.py、sys_var.py等泛化测试样例python/test/generalization/basic 与内核级测试 python/test/kernels高阶封装与框架层asc.language.advdocs/python-api/language/adv.md、asc.language.fwkdocs/python-api/language/fwk.md【免费下载链接】pyasc本项目为Python用户提供算子编程接口支持在昇腾AI处理器上加速计算接口与Ascend C一一对应并遵守Python原生语法。项目地址: https://gitcode.com/cann/pyasc创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
上一篇/下一篇内容由系统自动关联 返回资讯列表 →