乙個使用share memory進行效能優化的例項

2021-05-17 20:59:38 字數 1072 閱讀 4530

下面是這段**是我的乙個演算法中用來求和以及求平方和的kernel函式:

__global__ static void compsumandsquare(int rate,int i_n,int size,int width,int wsize,int *image,float *sum,float *sumofsquare) }

} }這個函式的執行時間約為12ms,其中視窗大小為15,測試平台為ngeforce 9800gt,由於這個函式佔據了我整個演算法時間的一半以上。所以本人在無聊之餘將累加和平方和運算遮蔽乙個,看單獨運算的時間,結果這個函式執行的時間為3ms多一點。於是我覺得這個函式的效能瓶頸應該是global memory訪問的方式而非計算指令的吞吐量,然後做了下面一點改動。

改動部分:

for(j=-k;j<=k;j++)

for(j=-k;j<=k;j++)

這個版本函式執行的時間結果約為

7ms,相比較第一版本有些提高,但

還是很慢。隨後想到了

share memory作為中間運算的載體

,使用後的**如下,改動之後的函式時間約為

1.65ms

,還不錯哈!改動的**如下:

__global__

static

void

compsumandsquare(int

rate,int

i_n,int

size,int

width,int

wsize,int *image,float *sum,float *sumofsquare)

s_q[n]=pow(s_m[n],2);

for(j=1;j

sum[ix]=s_m[n];

sumofsquare[ix]=s_q[n]; }

} }我在做這個簡單的效能優化過程時,覺得最讓自己滿意的是這種思考方式,首先找到演算法的瓶頸,然後猜測效能不好的原因,起初我以為計算速度是瓶頸,想用快速函式,當通過乙個小的測試發現儲存器的訪問方式才是問題所在(因為計算規模減少一半,但時間卻減少四分之三),最後想到使用高速儲存器share memory作為中間計算載體,得到比較好的程式效能。 

乙個bat使用例項

echo off echo.echo echo open svn log.set svntool c program files tortoisesvn bin tortoiseproc.exe command repobrowser path start rem echo 選擇分支 echo 10...

記錄乙個使用ProcessBuilder踩到的坑

最近使用processbuilder執行命令,命令內容正確,但始終報錯命令實行失敗,是因為不熟悉processbuilder用法踩到了坑,記錄一下。先看一下我模擬出來的錯誤 要執行的命令 cp rf tmp monkey a.log home monkey 簡單的cp命令拷貝乙個檔案,卻報錯說檔案不...

使用兩個佇列實現乙個棧,使用兩個棧實現乙個佇列

一 棧與佇列的特點 一 棧 棧 一種特殊的線性表,其只允許在固定的一端進行插入和刪除元素操作。進行資料插入和刪除操作的一端稱為棧頂,另一端稱為棧底。不含任何元素的棧稱為空 棧,棧又稱為後進先出的線性表。棧的特點 後進先出 lifo 二 佇列 佇列 只允許在一端進行插入資料操作,在另一端進行刪除資料操...