Вы ищете что-то подобное?
//Calculating the product of the matrix
#pragma omp parallel for
for(int i=0; i<n; i++){
for(int j=0;j<n;j++){
mat_ans[i][j] = 0;
#pragma omp simd
for (int k = 0; k < n; k++) {
mat_ans[i][j] += (mat_1[i][k] * mat_2[k][j]);
}
}
}
Если вы не знаете, как использовать openMP, посмотрите это Введение в плейлист openMp , хотя это плейлист 2013 года, большинство он по-прежнему актуален, он учит вас, как использовать большинство основных функций в openMP.
Для меня ваш код не выглядит эффективным. В коде, к которому вы обращаетесь и используете элементы массивов / векторов, вы должны стараться знать, сколько раз вы обращаетесь к определенным элементам и как это может повлиять на производительность, многие алгоритмы ограничены пропускной способностью памяти. Существует статья в Википедии, посвященная l oop оптимизации гнезд , в которой объясняются различные оптимизации, которые можно выполнить при умножении матриц на основе вложенных циклов.
После того, как вы начнете работать, попробуйте посмотрите на не обращающий внимания на кеш алгоритм для умножения матриц , этот алгоритм не требует подробностей о кеше без потери пропускной способности памяти.
Наконец, следите за целочисленным переполнением, если n> = 65537 код может сломаться.