CANN/Ascend C的GlobalTensor重解释
ReinterpretCast【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit产品支持情况产品是否支持Ascend 950PR/Ascend 950DT√Atlas A3 训练系列产品 / Atlas A3 推理系列产品xAtlas A2 训练系列产品 / Atlas A2 推理系列产品xAtlas 200I/500 A2 推理产品xAtlas 推理系列产品 AI CorexAtlas 推理系列产品 Vector CorexAtlas 训练系列产品x功能说明将当前GlobalTensor重解释为用户指定的新类型。转换后的Tensor与原Tensor地址及内容完全相同Tensor的内存大小比特数保持不变。函数原型template typename CAST_T __aicore__ inline GlobalTensorCAST_T ReinterpretCast() const参数说明表1模板参数说明参数名描述CAST_T指定重解释后的新类型。返回值说明重解释后的GlobalTensor。约束说明当数据类型发生转换后元素个数可能无法取整例如3个int4b_t类型转换为uint32_t则转换后调用GetSize接口只能获取向下取整的整数值这种场景在CPU状态运行时会有对应的提示告警信息。调用示例uint64_t dataSize 256; //设置input_global的大小为256 AscendC::GlobalTensorint32_t inputGlobal; // 类型为int32_t inputGlobal.SetGlobalBuffer(reinterpret_cast__gm__ int32_t *(src_gm), dataSize); // 设置源操作数在Global Memory上的起始地址为src_gm所占外部存储的大小为256个int32_t AscendC::LocalTensorint32_t inputLocal inQueueX.AllocTensorint32_t(); AscendC::DataCopy(inputLocal, inputGlobal, dataSize); // 将Global Memory上的inputGlobal拷贝到Local Memory的inputLocal上 ... // 假设inputGlobal为int32_t类型包含16个元素64字节 // 调用ReinterpretCast将inputGlobal重解释为int16_t类型 AscendC::GlobalTensorint16_t interpreTensor inputGlobal.template ReinterpretCastint16_t(); // 示例结果如下二者数据完全一致在物理内存上也是同一地址仅根据不同类型进行了重解释 // inputGlobal:0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 // interpreTensor:0 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考