Re: [問題] openMP不適合跑大量的資料?
開發平台: gcc/g++, Linux, AMD 5600+ 雙核
使用 openMP 平行 c[i] = a[i] + b[i]
問題:
陣列大小 10^8,資料完全沒有相依性,感覺是很簡單的程式。
平行前執行時間 500 msec
平行後卻變成 670 msec
不曉得大家認為是什麼原因?能否提供一些建議給我
謝謝~
程式附於後,短短的(約30行)
編譯參數
gcc -std=c99 -O3 -fopenmp test.c -o test
程式:
#include <omp.h>
#include <stdlib.h>
#include <time.h>
#include <stdio.h>
float *a, *b, *c;
clock_t start, end;
#define NUM 100000000
#define CHUNK 50000000
void main(){
a = malloc(sizeof(float)* NUM);
b = malloc(sizeof(float)* NUM);
c = malloc(sizeof(float)* NUM);
for( int i = 0; i < NUM; i++ ){ //給 a, b 亂數
a[i]=rand();
b[i]=rand();
}
start = clock(); //由此開始計時
#pragma omp parallel for schedule(static, CHUNK)
for(int i=0; i<NUM; i++){
c[i] = a[i] + b[i]; // c = a + b,資料完全獨立
}
end = clock();
printf("time = %.2f ms\n", (end-start)*1000.0/CLOCKS_PER_SEC);
return;
}
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.59.238.133
※ 編輯: mself 來自: 61.59.238.133 (05/23 17:37)
推
05/23 17:57, , 1F
05/23 17:57, 1F
→
05/23 18:09, , 2F
05/23 18:09, 2F
→
05/23 18:09, , 3F
05/23 18:09, 3F
→
05/23 18:10, , 4F
05/23 18:10, 4F
→
05/23 18:12, , 5F
05/23 18:12, 5F
→
05/23 18:15, , 6F
05/23 18:15, 6F
先謝謝各位~
freesamael 所說的 gettimeofday() 確實有差異
新的測試結果:
平行前 500 msec 平行後 342 msec
此外,也許 memory access 真的有瓶頸,因此沒有達到 2x speedup
有什麼方法可以驗證這個想法嗎
※ 編輯: mself 來自: 203.73.7.177 (05/23 18:33)
→
05/23 18:36, , 7F
05/23 18:36, 7F
討論串 (同標題文章)
完整討論串 (本文為第 2 之 2 篇):
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章