1、如何求LocalTensor<half> zLocal这一片段中元素的最大值?
我需要计算LocalTensor矢量中元素的最大值。现在我有Local memory上面的三个变量,xLocal、yLocal、zLocal。其中xLocal和yLocal都从队列中获取数据。Ascend c文档中有3级接口可以直接使用zLocal=xLocal+yLocal,但是没有求LocalTensor片段的最大值,只有矢量双目运行指令Max(Local1, Local2)可以对两个Local Tensor片段按照对应位置的元素求最大值,和标量双目运算Maxs(Local0, scalar0):源操作数矢量Local0内每个element与标量scalar相比,如果比标量大则取源操作数值,比标量的值小则取标量值。
我的需求代码如下:
// 假设前面做好了初始化与数据搬运工作,从这一步开始做z=x+y的运算步骤,如下
LocalTensor<half> xLocal = inQueueX.DeQue<half>();
LocalTensor<half> yLocal = inQueueY.DeQue<half>();
LocalTensor<half> zLocal = outQueueZ.AllocTensor<half>();
zLocal=xLocal+yLocal;
// 这里我需要对zLocal进行处理,计算zLocal这个片段中元素的最大值
// 然后对zLocal中每一个元素减去这个最大值
// 最后输出zLocal,如下
outQueueZ.EnQue<half>(zLocal);
inQueueX.FreeTensor(xLocal);
inQueueY.FreeTensor(yLocal);
1、如何求LocalTensor<half> zLocal这一片段中元素的最大值?
我需要计算LocalTensor矢量中元素的最大值。现在我有Local memory上面的三个变量,xLocal、yLocal、zLocal。其中xLocal和yLocal都从队列中获取数据。Ascend c文档中有3级接口可以直接使用zLocal=xLocal+yLocal,但是没有求LocalTensor片段的最大值,只有矢量双目运行指令Max(Local1, Local2)可以对两个Local Tensor片段按照对应位置的元素求最大值,和标量双目运算Maxs(Local0, scalar0):源操作数矢量Local0内每个element与标量scalar相比,如果比标量大则取源操作数值,比标量的值小则取标量值。
我的需求代码如下:
// 假设前面做好了初始化与数据搬运工作,从这一步开始做z=x+y的运算步骤,如下
LocalTensor<half> xLocal = inQueueX.DeQue<half>();
LocalTensor<half> yLocal = inQueueY.DeQue<half>();
LocalTensor<half> zLocal = outQueueZ.AllocTensor<half>();
zLocal=xLocal+yLocal;
// 这里我需要对zLocal进行处理,计算zLocal这个片段中元素的最大值
// 然后对zLocal中每一个元素减去这个最大值
// 最后输出zLocal,如下
outQueueZ.EnQue<half>(zLocal);
inQueueX.FreeTensor(xLocal);
inQueueY.FreeTensor(yLocal);