實驗與結果分析
5.3 實驗 B - GPU 參數對執行效率的結果與分析
表 5.1: 實驗 B - CGP 參數表
(a) CGP
共同參數Parameters Value
Image size 256 × 256
CGP grid size 8 × 4
Level back 2
Number of function 16
Stopping criteria 5000 generations Population size 100
(b)
交配與突變機率Crossover Mutation
CGP1 40% 40%
CGP2 60% 60%
CPG3 80% 80%
當遮罩大小為3 × 3 ,代表遮罩數量為 (256 − 3 + 1)2共64516個 。 將一個遮罩的過 濾交給一個 thread 計算,共動用 64516個thread。
為了提高運算效率, 以硬體的執行角度分析,分析過程的數據參考表5.2 。
1. 一個 STMP 內的共享記憶體空間為16384 bytes : 影像為 8-bits 灰階圖,所需要 的共享記憶體空間為 32+ 8 × 4共 41 bytes 。 代表一個 STMP 內可用的 thread 將被限制最多為399個 。
2. 分組: thread需要64516個但被限制為最多399個,因此須分組成數個block 。 若 以質因數分解, 64516可分解為: 254 、127 、4、2 、1 ,相對應的 block 數量將為 254、508 、
16129、32258、64516 。
3. Warp : STMP 以 warp 為單位執行,一個 warp 由 32個 thread 組成 。 若宣告 的數量不足32也會成為一個warp ,代表有數個thread的浪費 。因此254、 127、
30、 3 1。
4. Occupancy :為了減少延遲,需讓 STMP 有足夠的 warp 做文本切換 。 但有以下 考量:
• 一個 STMP 最多只能放入 32個warp :因此能使用的 block 數量為 4、8、 32、
32、32。
• 一個 STMP 內共享記憶體空間 :因此能使用的 block 數量為 1、2、99、 199 、399 。(*共享記憶體會保留空間放執行的程式碼 ,因此無法全部使用 。 )
• 一個STMP 最多只能放入8個 block。
在上三點的限制下得到的 block 數量為1、 2、8、 8、8。
5. 綜合考量:考量thread因包裝成warp而造成的浪費與佔有率後,選擇thread浪 費最少的或者佔有率高的 。
實驗結果如圖5.4 ,左邊縱軸為各種thread設定下所花費的時間, 以長條圖表示 ,單 位為秒 。 右邊縱軸為各種 thread 設定下的 speedup , speedup 為 CPU 與 GPU 版 本程式的時間比值, CPU 版本程式所花費的時間呈現於圖上方的表格,以折線圖表示 。 從thread 數量來分析,可以發現在 thread 數量為 254與 127的運算時間相差不多 ,但 thread 數量為 127的時間較短, 表示在相同的占有率下,浪費的 thread 越少,運算效 能越好 。 而在 thread 數量為 4、2和1時, 運算時間也為倍數差 。 從交配率來分析,比 較交配率 40%與 60%的計算時間, 兩者的時間倍數幾乎為 1.5倍,而 40%與 80%的計 算時間幾乎為 2倍,表示本研究提出的方法很適合平行化計算 。
表 5.2: GPU 參數分析 (遮罩大小為3 × 3)
表 5.3: GPU 參數分析 (遮罩大小為5 × 5)
Thread 數量 252 189 144 63 48
換算成 warp 8 6 5 2 2
Thread 浪費的數量 4 3 0 (16) 1 0 (16)
換算成 block
STMP 內最多共 32個warp 4 5 6 16 16
受限於共享記憶體的 block 數量 1 1 1 4 5 多核心處理器內的 warp 數 8 × 1 6 × 1 5 × 1 2 × 4 2 × 5
佔有率 25% 18.75% 15.63% 25% 31.50%
而遮罩大小為 5 × 5時, 遮罩數量變成 (256 − 5 + 1)2共63504 ,所需要的共享記 憶體空間為 52 + 8 × 4共 57 bytes。 遮罩數量比 3 × 3少,但一個 thread 所需的記憶 體空間便多了,因此一個 STMP 能容納的最大 thread 將變少為 287個 。 而 63504可 以拆解的質因數共有 38種,因此 thread 有較多的選擇 。 但許多組合下 thread 的浪費 數量較多,在運算效能上的表現較差 ,因此只列出幾組數據討論 。 分析的方法同上敘述, 分析結果請參考表5.3 ,實驗結果請參考圖5.5 。
此實驗結果分為三部分–warp 、occupancy 和綜合討論:
• warp :雖然第三組和第五組的 thread浪費量為16 ,但恰好為 half-warp 的組合, 因此此兩組的時間花費較為其他組少 。
• occupancy :由於本研究使用的GPU 卡以 block 為主要文本切換單位 ,因此只探 討前三組 block 數量皆為 1的情況 。但由於第三組的 thead 浪費量為 0 ,與前兩 組有差別,因此只比較第一和第二組實驗結果 。 可以發現在相差不多的 thread 浪
DEF GH
dIdx(144,1)和 BlockIdx(441,100)。