如何在向量处理器SIMD上添加opencl中向量(int16)的所有元素?

如何在向量处理器SIMD上添加opencl中向量(int16)的所有元素?,opencl,signal-processing,matrix-multiplication,simd,vdsp,Opencl,Signal Processing,Matrix Multiplication,Simd,Vdsp,在SIMD上执行矩阵乘法时,我面临着将向量的所有元素相加的问题 float16 sum = row * column; 现在as sum是16个值的向量变量。我想把矩阵乘法的所有值相加。 opencl中是否有内置函数或使用mac单元 PS:dot函数仅适用于float4假设您希望对不同数据上的每个GPU线程执行矩阵向量乘法,您可以手动执行float16点积: float sum=row.s0*column.s0+row.s1*column.s1+…+row.sf*column.sf; 然而,

在SIMD上执行矩阵乘法时,我面临着将向量的所有元素相加的问题

float16 sum = row * column;
现在as sum是16个值的向量变量。我想把矩阵乘法的所有值相加。 opencl中是否有内置函数或使用mac单元


PS:dot函数仅适用于float4

假设您希望对不同数据上的每个GPU线程执行矩阵向量乘法,您可以手动执行float16点积:

float sum=row.s0*column.s0+row.s1*column.s1+…+row.sf*column.sf;
然而,这里更好的解决方案是完全抛弃OpenCL向量数据类型,改为使用
float
。然后,y=M*x实现如下:

#定义定义尺寸16//矩阵尺寸
浮动M[def_dim*def_dim];//矩阵
浮动x[def_dim];//输入向量
//用数据填充M和x
浮动y[def_dim];//结果向量
#pragma unroll//通过循环展开提高性能

对于(uint i=0;i要添加向量的元素,请分别添加所有元素。 到目前为止,opencl还没有标准函数可用于此

        // Adding all the elements of the vector
        desiredSum += sum.s0;
        desiredSum += sum.s1;
        desiredSum += sum.s2;
        desiredSum += sum.s3;
        desiredSum += sum.s4;
        desiredSum += sum.s5;
        desiredSum += sum.s6;
        desiredSum += sum.s7;
        desiredSum += sum.s8;
        desiredSum += sum.s9;
        desiredSum += sum.sa;
        desiredSum += sum.sb;
        desiredSum += sum.sc;
        desiredSum += sum.sd;
        desiredSum += sum.se;
        desiredSum += sum.sf;

您想用4分量向量对4x4矩阵进行矩阵乘法吗?还是用16分量向量对16x16矩阵进行乘法?是每个GPU线程都必须对不同的数据执行矩阵乘法,还是要将矩阵乘法本身并行化?我想用16 comp vecIf row x column执行16x16 mat mul变大需要一个更大的浮点来保存和吗?@Holmz不,32位浮点在这里很好。只有在CPU上的矩阵求逆这样的应用程序中,我建议使用64位双精度求和,但GPU很难使用双精度求和。