在c中使用dgemv和多线程乘以矩阵

时间:2018-05-27 15:43:11

标签: multithreading parallel-processing

我的代码中存在问题。我想使用cblas中的dgemv乘以2个矩阵,但我想将操作分享给我拥有的线程。我还使用了dgemv在之前的练习中乘以矩阵,其中不需要并行性。我有什么想法吗?

代码:

for (it = 0; it < itime; it++) {
    cblas_dgemv(CblasColMajor,CblasNoTrans,n,n, 1 , sigma, n, u , 1, 0.0 , d, 1);
    #pragma omp parallel for private(i,j,sum) schedule(static)
    for (i = 0; i < n; i++) {       
        sum = 0.0;
        uplus[i] = u[i] + dtmu - dt * u[i];
        #pragma omp simd reduction(+:sum)
        for (j = 0; j < n; j++) {
            sum += sigma[i*n+j]*u[j];
        }
        sum = sum - u[i]*m[i];
        uplus[i] += dtdiv * sum;

        if (uplus[i] > uth) {
            uplus[i] = 0.0;
            if (it >= ttransient) {
                omega1[i] += 1.0;
            }
        }   
    }
    t = u;
    u = uplus;
    uplus = t;
} 

我希望将dgemv函数放入并行区域,并以某种方式共享对我所拥有的线程的乘法。

0 个答案:

没有答案