Matrix 使用openmp或pthread的矩阵向量多重加速

Matrix 使用openmp或pthread的矩阵向量多重加速,matrix,vector,pthreads,openmp,Matrix,Vector,Pthreads,Openmp,给定如下三个数组,我想通过内核X输入(输入'->输出)得到一个点生成,我想用OpenMP或pthread加速这个函数,但是没有加速,或者更糟,有谁有更好的方法吗 output[outN]; input[inN]; kernel[outN*inN]; for(int i=0;i<outN;i++) { float sum = bias[i]; for(int j=0;j<inN;j++)

给定如下三个数组,我想通过内核X输入(输入'->输出)得到一个点生成,我想用OpenMP或pthread加速这个函数,但是没有加速,或者更糟,有谁有更好的方法吗

  output[outN];
  input[inN];
  kernel[outN*inN];

  for(int i=0;i<outN;i++)
  {
          float sum = bias[i];
          for(int j=0;j<inN;j++)
                   sum += input[j]*kernel[i*inN+j];

          output[i] = sum;
 }
输出[outN];
输入[客栈];
内核[outN*inN];

对于(inti=0;iBetter方法):使用为该操作优化的库,例如(现在免费的)MKL,或许多免费的BLAS库中的任何一个。(谷歌是你的朋友)Matrix*vector是内存带宽限制,不适用于多线程和SIMD通道。使用带有标量操作的两个线程可能会提高一些速度,因为很难获得峰值内存带宽,但除此之外,对于使用单个内存控制器的系统,您不能期望更多。在多线程系统上,它将ale与内存控制器的数量有关。但在任何情况下,最好的答案都是不要做长点积。在适合缓存的块中做它们以及其他操作。