출처: 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 |