contributed by <ElfayR
>
Quexint
make PROFILE=1
來產生gmon.out
參考說明網頁使用gprof -b raytracing gmon.out
來分析效能瓶頸主要是在dot_product
和 subtract_vector
兩個函數上面。Execution time of raytracing() : 8.946531 sec
#pragma omp parallel for
來針對dot_product
但跑出來結果竟然變差很多。static inline
double dot_product(const double *v1, const double *v2)
{
double dp = 0.0;
#pragma omp parallel for
for (int i = 0; i < 3; i++)
dp += v1[i] * v2[i];
return dp;
}
Execution time of raytracing() : 125.185435 sec
dot_product
效能有降低但是主程式花費時間大幅上升。應該是主機只有雙核心再做多執行序處理反而造成過多負擔。避免用圖片來表示程式的文字輸出 jserv
不太懂? 是指 gprof 的指令部分不要用圖片顯示而是直接用程式碼來說明? Ping Chun Wang (ElfayR)
math-toolkit.h
內部使用到for
迴圈的程式都使用loop unrolling拆開。效能有顯著提升。Execution time of raytracing() : 5.589559 sec
等你呀! jserv
main (void){
}
ElfayR