卷積操作的GPU粗粒度並行實現及測試(優化)

卷積操作的GPU粗粒度並行實現及測試(優化)

       A.邊界擴展;

       B.字塊對齊。

Matrix Size

Number

Kernel

CPU(s)

CPU2GPU

GPU-Kernel

GPU2CPU

5x4

1

5x4

<1ms

<1ms

<1ms

<1ms

12x9

1

5x4

<1ms

<1ms

<1ms

<1ms

18x19

1

5x4

<1ms

<1ms

<1ms

<1ms

118x29

1

5x4

<1ms

<1ms

<1ms

<1ms

138x59

1

5x4

<1ms

<1ms

<1ms

<1ms

158x159

1

5x4

0.005

<1ms

<1ms

<1ms

558x559

1

5x4

0.041

<1ms

0.001

<1ms

1128x1159

1

5x4

0.156

0.002

0.003

0.002

2128x2159

1

5x4

0.514

0.007

0.011

0.007

5128x5159

1

5x4

2.341

0.038

0.062

0.037

18128x4159

1

5x4

6.574

0.111

0.177

0.114

10128x11159

1

5x4

10.007

0.170

0.266

0.156

 

 

 

 

 

17.04Gflps

1.44GBps

5x4

1

14x15

~

~

~

~

12x9

1

14x15

~

~

~

~

18x19

1

14x15

<1ms

<1ms

<1ms

<1ms

118x29

1

14x15

0.003

<1ms

<1ms

<1ms

138x59

1

14x15

0.011

0.001

<1ms

<1ms

158x159

1

14x15

0.028

<1ms

<1ms

<1ms

558x559

1

14x15

0.343

<1ms

0.006

<1ms

1128x1159

1

14x15

1.289

0.002

0.023

0.003

2128x2159

1

14x15

3.929

0.007

0.081

0.007

5128x5159

1

14x15

21.869

0.041

0.467

0.041

11128x4159

1

14x15

39.2

0.072

0.819

0.066

10128x11159

1

14x15

93.912

0.161

1.999

0.195

 

 

 

 

 

23.71Gflps

372.86MBps

5x4

15

14x15

~

~

~

~

12x9

15

14x15

~

~

~

~

18x19

15

14x15

0.001

<1ms

<1ms

<1ms

118x29

15

14x15

0.003

<1ms

0.001

<1ms

138x59

15

14x15

0.099

0.001

0.002

<1ms

158x159

15

14x15

0.367

0.001

0.006

0.001

558x559

15

14x15

3.856

0.006

0.084

0.008

1128x1159

15

14x15

15.98

0.030

0.348

0.031

2128x2159

15

14x15

57.527

0.096

1.231

0.107

3058x2659

15

14x15

100.355

0.171

2.169

0.202

5128x5159

15

14x15

指針溢出

11128x4159

15

14x15

10128x11159

15

14x15

 

 

 

 

 

23.39Gflops

366.07MBps

分析:

       從上表可知,最高吞吐率爲1.44GBps,PCIE總線的帶寬爲5GBps,還有一定的空間。單精度浮點數乘法的最高有效計算性能爲23.71Gflops,比之前的23.23Gflops有一點點提高,距設備的單精度浮點最高性能仍然差別較大,分析原因如下:

A.    CPU傳輸給GPU的數據是一維數組,而在GPU內部是按二維進行運算的,在存取數據是需要做很多的地址計算操作。

B.     線程內部計算單個卷積結果時,使用了一個二維循環,當卷積核較大時,運算時間呈二階指數型增長(最主要原因)。

C.     CPU和GPU中數據都是連續存放的,當用malloc()函數申請的內存較大時,使用指針訪問數據時出現內存溢出現象,導致無法測試更大規模的數據量,所以也就無法發揮GPU的運算性能。

D.    進行批處理卷積時,爲了簡化操作,做法是將多幅圖像合成爲一幅較大的圖像,作爲二維圖像,然後一塊兒卷積,在卷積進行中,做了很做的多餘的卷積,在進行結果會寫時,需要排除掉,因此增加了一些分支操作。

總結:

1.      這是卷積的粗粒度並行實現,本週也實現了一個細粒度並行的版本,每個Block有16x16個線程,每個Block對應一個卷積操作,一個線程對應一個乘法運算,每個Block歸約出一個卷積結果。然而,在進行測試時發現,該版本速度較慢。原因可能是,每個Block一個卷積,矩陣和卷積核必須放在全局內存中,訪問全局內存比訪問共享內存慢很多,而且數據的複用性較低,導致效率不高。

2.      批處理卷積,使用三維Block處理時,可以避免多餘的卷積運算和回寫時的條件分支,但是在CPU和GPU中,數據是連續存放的,同時擴充多幅圖像的邊界比較困難,目前尚未找到理想的解決方案。

3.      粗粒度和細粒度都是操作級的並行,算法級的並行尚未實現。所謂算法級的並行,是指優化卷積算法本身,將二維卷積轉化爲其他空間的點乘操作,效率應該更高。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章