Умножьте матрицы, используя dgemv и многопоточность в c - PullRequest
0 голосов
/ 27 мая 2018

У меня проблема с моим кодом.Я хочу умножить 2 матрицы, используя dgemv из cblas, но я хочу поделиться операциями с имеющимися у меня потоками.Я также использовал 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 в параллельную область и каким-то образом разделить умножения на потоки, которые яесть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...