본문으로 바로가기

출처: http://rajorshi.net/blog/2009/05/programming-for-multicore-introduction-openmp-gcc/

보통의 코드

for(i=0; i<n; ++i) {
  for(j=0; j<n; ++j) {
    temp = 0;
    for(k=0; k<n; ++k) {
      temp += arr1[i][k] * arr2[k][j];
    }
    arr3[i][j] = temp;
  }
}

멀티 코어를 적용한 코드  

#pragma omp parallel for private(i, j, k, temp)
for(i=0; i<n; ++i) {
  for(j=0; j<n; ++j) {
    temp = 0;
    for(k=0; k<n; ++k) {
      temp += arr1[i][k] * arr2[k][j];
    }
    arr3[i][j] = temp;
  }
}

실행

% gcc -fopenmp matmul.c
Enter dimension ('N' for 'NxN' matrix) (100-2000): 1000
Populating array with random values...
Completed array init.
Crunching without OMP... took 23.032000 seconds.
Crunching with OMP... took 13.000000 seconds.
 
Enter dimension ('N' for 'NxN' matrix) (100-2000): 2000
Populating array with random values...
Completed array init.
Crunching without OMP... took 216.140000 seconds.
Crunching with OMP... took 118.641000 seconds.

 

대략 두배의 속도차이가 남...

'블로그 (Blog) > 개발로그 (Devlogs)' 카테고리의 다른 글

디바이스 드라이버에서 atof 함수 구현  (0) 2025.02.18
AES Encryption/Decryption  (0) 2025.02.18
struct의 좋은 예(?)  (0) 2025.02.18
READ_REGISTER, WRITE_REGISTER…  (0) 2025.02.18
유용한 define문  (0) 2025.02.18