Форум программистов, компьютерный форум CyberForum.ru

Умножение матриц с использованием OpenMP - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 37, средняя оценка - 4.65
CLEO_ROCK
 Аватар для CLEO_ROCK
66 / 66 / 2
Регистрация: 22.05.2011
Сообщений: 528
02.04.2012, 22:06     Умножение матриц с использованием OpenMP #1
Здрасте. Есть следующая задача. Нужно реализировать умножение двух квадратных матриц с использованием OpenMP. Без него все пашет нормально, но вот когда использовать его, то нельзя изменять счетчик в теле цыкла. Долго копался в коде но не смог сделать. Вот мой код умножения, если можно переделать именно его для использования OpenMP буду очень признателен)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
int** Multipl(int** matr1, int** matr2,int N)
{   
    clock_t start;
    int **rezultMatr=CreateMatr(N,false);
    int d=0,i=0,f=0;
 
      for(i=0;i<N;)
     {
         for(int j=0;j<N;j++)
         {
             rezultMatr[i][d]+=matr1[i][j]*matr2[j][d];
         }
 
        d++;
        if(d==N)
            {
              d=0;
              i++;
            }
     }
    printf("Multiplication time = %f\n\n", (long double) (clock() - start) / CLOCKS_PER_SEC);
 
    return rezultMatr;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
03.04.2012, 07:56     Умножение матриц с использованием OpenMP #2
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
  int n ; // размер матрицы
  double sum;
  int i, j, k;
...
  double *MatrixA=new double [n*n];
  double *MatrixB=new double [n*n];
  double *MatrixC=new double [n*n];
...
#pragma omp parallel for private(j,k,sum)
 for(i=0;i<n;i++)
 {
      for(k=0;k<n;k++)
      {   
             sum=0;
             for(j=0;j<n;j++)
            {
               sum+=MatrixA[i*n+j]*MatrixB[j*n+k];
 
            }
             MatrixC[i*n+k]=sum;
      }
 
 }
pluprod
0 / 0 / 0
Регистрация: 19.06.2013
Сообщений: 105
19.04.2015, 01:46     Умножение матриц с использованием OpenMP #3
Deviaphan, немного не понял как вы перемножаете? обычно элемент на элемент
например:
C++
1
c[i][j]+=a[i][k]*b[k][j];
а в вашем случаи что?
nonedark2008
624 / 502 / 92
Регистрация: 28.07.2012
Сообщений: 1,340
19.04.2015, 02:12     Умножение матриц с использованием OpenMP #4
Цитата Сообщение от pluprod Посмотреть сообщение
а в вашем случаи что?
Там то же самое, только метод индексации другой.
Yandex
Объявления
19.04.2015, 02:12     Умножение матриц с использованием OpenMP
Ответ Создать тему
Опции темы

Текущее время: 08:58. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru