or
or
By clicking below, you agree to our terms of service.
New to HackMD? Sign up
Syntax | Example | Reference | |
---|---|---|---|
# Header | Header | 基本排版 | |
- Unordered List |
|
||
1. Ordered List |
|
||
- [ ] Todo List |
|
||
> Blockquote | Blockquote |
||
**Bold font** | Bold font | ||
*Italics font* | Italics font | ||
~~Strikethrough~~ | |||
19^th^ | 19th | ||
H~2~O | H2O | ||
++Inserted text++ | Inserted text | ||
==Marked text== | Marked text | ||
[link text](https:// "title") | Link | ||
![image alt](https:// "title") | Image | ||
`Code` | Code |
在筆記中貼入程式碼 | |
```javascript var i = 0; ``` |
|
||
:smile: | Emoji list | ||
{%youtube youtube_id %} | Externals | ||
$L^aT_eX$ | LaTeX | ||
:::info This is a alert area. ::: |
This is a alert area. |
On a scale of 0-10, how likely is it that you would recommend HackMD to your friends, family or business associates?
Please give us some advice and help us improve HackMD.
Syncing
xxxxxxxxxx
raytracing
contributed by <
snoopy831002
>Reviewed by <
hugikun999
>gprof
什麼是gprof?
gprof是一個在Linux系統上效能分析的工具。他可以量化顯示顯示每個函式的呼叫次數,每個與其消耗的CPU cycle等數據。
使用方法
make PROFILE=1
當我們在執行 make 時,需傳入
PROFILE=1
的參數。傳入參數後會在編譯選項後加上-pg
,使 mcount 函數嵌入程式碼中。此函數在執行期間會記錄呼叫次數等相關資訊。而這些資訊會儲存於 gmon.out ,方便那發者做分析。開始分析
make PROFILE=1
./ratracing
得到結果:Excution time of raytracing:6.036864sec
我們發現消耗效能的前1、2名都在math-toolkit.h內->也就是我們要拿來開刀的地方啦!
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →優化方法一:使用gcc預設加速:Ofast
使用方法為修改makefile編譯器最佳化選項 -O0 -> -Ofast
得到結果:Excution time of raytracing:5.315068sec
快了近0.7秒,然而本次作業著重手動效能分析,依然要嘗試其他方法
優化方法二:loop unrolling
使用方法為將原來的loop拆開
例如將:
改為
得到結果:
Excution time of raytracing:5.245374sec
比原直行結果快接近0.8秒,亦超越系統優化。
將 math-toolkit.h 中有用到 for-loop 的地方拆開後,可以減少因為loop所造成的branch instruction,進而提升效能。
優化方法二:loop unrolling+強制inline
使用方法:將math-toolkit.h的static inline改為static inline attribute ((always_inline))
得到結果:
Excution time of raytracing:2.349816sec
比loop unrolling又快約2秒。
優化方法三:使用Openmp平行化
參考 吳勃興的共筆
使用openmp平行化for迴圈
Excution time of raytracing : 1.284673sec
Openmp的使用可使我們的執行時間再提升1秒!!
參考資料
吳勃興的共筆
詹欣達的共筆
Openmp中使用private的時機