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