小编sdf*_*dsf的帖子

*&和**&在C++中的含义

我在函数声明中多次发现这些符号,但我不知道它们是什么意思.

例:

void raccogli_dati(double **& V, double **p, int N) { 
  int ultimo = 3; 
  V = new double * [N/2]; 
  for(int i=0; i < N/2; i++) { 
    V[i] = new double[N/2], std :: clog << "digita " << N/2 - i
                 << " valori per la parte superiore della matrice V: "; 
    for(int j=i; j < N/2; j++) 
      std :: cin >> V[i][j], p[ultimo++][0] = (V[i][j] /= sqrt(p[i][0]*p[j][0]));
  } 
  for(int i=1; i < N/2; i++) 
    for(int j=0; j < …
Run Code Online (Sandbox Code Playgroud)

c++ syntax pointers symbols reference

53
推荐指数
6
解决办法
8万
查看次数

OpenMP并行化矩阵乘法三重for循环(性能问题)

我正在编写一个使用OpenMP进行矩阵乘法的程序,为了方便缓存,实现乘法A x B(转置)行X行而不是经典的A x B行x列,以获得更好的缓存效率.这样做我遇到了一个有趣的事实,对我来说是不合逻辑的:如果在这段代码中我并行化extern循环,程序比我将OpenMP指令放在最内层循环中慢,在我的计算机中,时间是10.9对8.1秒.

//A and B are double* allocated with malloc, Nu is the lenght of the matrixes 
//which are square

//#pragma omp parallel for
for (i=0; i<Nu; i++){
  for (j=0; j<Nu; j++){
    *(C+(i*Nu+j)) = 0.;
#pragma omp parallel for
    for(k=0;k<Nu ;k++){
      *(C+(i*Nu+j))+=*(A+(i*Nu+k)) * *(B+(j*Nu+k));//C(i,j)=sum(over k) A(i,k)*B(k,j)
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

parallel-processing performance loops openmp matrix-multiplication

7
推荐指数
1
解决办法
1万
查看次数