• 沒有找到結果。

第五章 實驗與數據分析

5.2 各項實驗與討論

以下的實驗每次都只有一個實驗的變因,其他的設定則維持相同,選定的模 型用 Sponza,這個模型有 26 萬多的三角片,數量足夠來測試效能,且可以模擬 在室內看場景的狀況,相當適合做實驗模型,繪製出的外觀可看下圖,另外,預 計要做的實驗可以看下表。

圖 5.2.1 Sponza 模型繪製範例

實驗名稱 實驗目的

程式 Local Size 大小實驗 確立適當的 Local Size 參數 BVH-tree 層數實驗 確立適當的 BVH-tree 層數參數 使用 OpenCL 加速程式實驗 確定使用 OpenCL 能夠有效加速程式 使用 BVH-tree 加速程式實驗 確定使用 BVH-tree 能夠有效加速程式 使用不同 OpenCL 記憶體當作 stack 實驗使用各個記憶體效能的表現

使用不同 stack 空間實驗 實驗 stack 大小對效能的影響 表 5.2.1 實驗名稱與實驗目的列表

(1)程式 Local Size 大小影響 GPU:HD graphics 6100

圖 5.2.2 HD graphics 6100 環境下執行時間與 Local size 關係圖

4.936587 4.584087 4.594995 4.581832

0

GPU:GTX960

1.13617 1.1407 1.158693

0

(2)BVH-tree 層數加速比較 GPU:HD graphics 6100

圖 5.2.4 HD graphics 6100 環境下執行時間與 BVH tree 層數關係圖

5.1668 4.594224.1901233.9192664.0342944.759248 6.846259

GPU:GTX960

(3)使用 OpenCL 加速程式

表 5.2.2 硬體設備與執行時間列表

圖 5.2.6 硬體設備與執行時間長條圖

本實驗主要測試使用 OpenCL 是否能有效加速程式,實驗設為使用 BVH-tree 的加速結構,且是在使用 Local Memory 當作 stack 來測試,當在使用 CPU device 時,代表者程式沒有被平行化執行,從圖 5.2.6 顯示:雖然在 HD Graphics 6100 環

i5-5257U(1) HD Graphics 6100(1)

HD Graphics 6100(16)

GTX 960(1) GTX 960(32)

硬體設備與執行時間長條圖

硬體設備(Local Size) 執行時間(sec) CPU:i5-5257U(1) 21.560709 GPU:HD Graphics 6100(1) 25.944831 GPU:HD Graphics 6100(16) 4.921530 GPU:GTX 960(1) 10.743182 GPU:GTX 960(32) 1.123224

(4)使用 BVH-tree 加速程式

teapot light house

15704 68179

bunny dragon

69630 871306

表 5.2.3 測試 BVH-tree 加速效能模型列表

上表列出本實驗用到的模型,然後再加上 Sponza 模型,以上模型都是在以 Local Memory 當作 stack 環境下執行程式,來測試 BVH-tree 對不同模型的效能加 速程度,來證明該程式的 BVH-tree 為有效的加速結構。

GPU: Intel® Iris™ Graphics 6100

model teapot light house bunny sponza dragon object size 15704 68179 69630 262267 871306

tree depth 9 10 10 17 17

with BVH 0.109666 0.03838 0.711575 4.393354 32.166493 without BVH 3.628269 22.599282 20.143162 83.667708 NULL

加速比例 33.08472 588.82965 28.307855 19.044153 NULL 表 5.2.4 HD Graphics 6100 環境下各模型執行時間列表

表 5.2.5 GTX 960 環境下各模型執行時間列表

在列表中,with BVH 代表在執行時有使用到加速結構,每個像素點的光線都 會經過 tree traversal 後,再去對有碰撞到的 leaf node 中三角片做交點測試; without

BVH 則代表沒有使用到加速結構,每個像素點的光線一律都要對所有的三角片做 檢查,相對的話一定較沒效率,因此從上面兩個列表來看,不管是在 GTX 960 或

HD Graphics 6100 的環境下,使用 BVH tree 加速結構時,雖然各個模型的加速幅 度不同,但執行時間都較短,加速結構的功能有確實發揮出來。

GPU: NVIDIA GeForce GTX 960

model teapot light house bunny sponza dragon object size 15704 68179 69630 262267 871306

tree depth 9 13 3 13 18

with BVH 0.01686 0.015248 0.157747 1.086536 10.322725 without BVH 0.238801 1.134804 1.197199 4.904912 16.707732 加速比例 14.16376 74.423137 7.589361 4.514265 1.618539

(5)使用不同記憶體當作 stack

表 5.2.6 HD Graphics 6100 環境下使用各種記憶體資訊列表

按照原本 Intel 官方的記憶體速度資料來預測實驗結果的話,使用不同記憶體 當作 stack 執行時間應該為: Private Menory < Local Memory < Global Memory,不 過實際測試後,從上表來看執行時間卻是: Local Memory < Private Menory <

Global Memory,可見執行時間不只會受到記憶體速度的影響,也和 OpenCL 實作 有關係,在 Local Memory 與 Private Memory 方面,雖然 Private Memory 速度較 快,但實際上在 Kernel 中,沒有特別標明的變數、函式的區域變數等等…,都會 存在 Private Memory,因此光是 register 的空間就會不夠用,就必須 map 到其他 的速度較低記憶體空間,使得整體速度下降,使得在該實驗中表現不如使用 Local

Memory 來的好; 在 Local Memory 與 Global Memory 方面,雖然兩者都會使用到 位階 L3 cache,Local Memory 提供較多的 access pattern 可以達到 full bandwidth,

使得 access 的時間通常較短,所以 Local Memory 表現較好。

GPU: Intel® Iris™ Graphics 6100

Type Time(sec) EU active(%) EU stall(%) EU Idle(%) Latency(cycle) Private 4.384201 54.97 44.84 0.19 188.3

Local 4.209583 53.99 45.8 0.21 85.3 Global 4.543793 50.85 48.81 0.34 190

表 5.2.7 GTX960 環境下使用各種記憶體執行時間列表

在使用 GTX960 的硬體時,執行時間也是: Local Memory < Private Menory <

Global Memory,可見在不同硬體下,執行時間除了受到記憶體速度影響外,一樣 會受到 OpenCL 實作的影響,不過在 GTX960 執行時間的差距又變得更小,主要 是因為在 Nvadia 硬體在實作 OpenCL 記憶體時,主要是和記憶體的功能性來分 類,並不是以速度區分,使得各類型的記憶體到 cache 中 access 資料時,花的時 間都差不多,使的效能的表現很接近。

(6)stack 大小對程式效能的影響

接下來我們會探討實作 tree traversal 的 stack,在程式中宣告的大小對效能的 影響,由於在使用 Private Memory 實作時,改變大小對效能的影響並不是很顯著,

因此就改用有明顯變化的 Local Memory 來實驗,列表中會加上同時可以運行的

Work-Group 數量來作為效能的參考,在 HD Graphics 6100 方面是以 Shared local memory 的 384KB,而在 GTX960 方面則是以 Shared Memory 的 768KB,各自來 推估 Work-Group 可擺放的數量。

GPU: NVIDIA GeForce GTX 960

Type Time(sec)

Private 1.113756 Local 1.096453 Global 1.153695

表 5.2.8 HD Graphics 6100 環境下記憶體大小對效能影響資訊列表

在使用 HD Graphics 6100 硬體時,Stack Size 為 20×16 與 20×32 時還沒有明 顯的變化,到了 20×64 後,效能漸漸地開始被影響,再到了 20×128 後,出現了

Stack Size 變為兩倍時,執行時間也變為兩倍,可見這時候 Local Memory 已經被 資料給塞滿,EU active 狀態下降,EU Idle 狀態上升,最後到了 20×512 時,因為 同時可以運算的 Work-Group 變的很少,大量的 EU 處於 EU Idle 狀態,使得效能 大為下降,可見使用 Local Memory 時,要謹慎的確定宣告容量大小,因為宣告過 多會直接的影響到效能,要以適當大小來使用為最好的選擇。

圖 5.2.7 HD Graphics 6100 環境下 stack size 與執行時間關係圖

4.526708 4.49111 5.416608

10.532339 GPU: Intel® Iris™ Graphics 6100

Size(int) Time(sec) EU active(%) EU stall(%) EU Idle(%) No. workgroup

表 5.2.9 GTX960 環境下記憶體大小對效能影響資訊列表

在 GTX960 環境下,得到的結論與 HD Graphics 6100 相同,Stack Size 的大 小還是以適當為主,不要宣告過多,否則會影響效能,不過因為 Code Builder 無 法顯示實際執行 OpenCL 的 CUDA core 的狀態,所以不確定是否是陷入 Idle 的狀 態,但按照一般 OpenCL 的實作方法,應該也是因為同樣的道理,因為過大的 Stack 占用了太多的 Local Memory 空間,使得同時間能運算的 Work-Group 變少,而拖 慢了運算的效率,導致效能低下。

20×32 20×64 20×128 20×256 20×512

執行時間(SEC)

stack size

stack size與執行時間關係圖

GPU: NVIDIA GeForce GTX 960

Size(int) Time(sec) No. workgroup 20×32 1.112786 38.4 20×64 1.494743 19.2 20×128 2.672796 9.6 20×256 5.456085 4.8 20×512 9.678509 2.4

相關文件