2017-03-27 7 views
-4

私は積分画像に接頭辞スキャンアルゴリズムを使用していますが、変換する必要はありません。私はカーネル機能と呼ぶと間違っていると思う。私は私のdimblockは16私のdimgridがCuda Prefix Scan

dim3 dimGrid((int)ceil(height/dimBlock.x), (int)ceil(width/dimBlock.y)) 
+2

を私たちに与えてください最小の例:https://stackoverflow.com/help/mcve 接頭辞スキャン(スラストや立方体など)に外部ライブラリを使用しないのはなぜですか? – X3liF

+0

イメージをopencv imreadでグレーイメージとして読み込み、イメージをfunction.dim3 dimBlock(BLOCK_DIM、BLOCK_DIM)に送信します。 \t dim3 dimGrid(int)ceil(width/dimBlock.y)scan_image << dimGrid、dimBlock >>(d_in、d_out、512) –

+0

@ X3liF:私はそれがもっとシンプルだと思う... – einpoklum

答えて

-2

ですカーネル関数を呼び出すときに、あなたのグリッドとブロックサイズの計算にintegeral /浮動小数点型の重複が整理を持っているように見えます。

あなたは切り上げ部門をしようとしているが、整数のあなたの最初の分割ペア以来、あなたは整数結果を取得し、ダウンを四捨五入してceil()呼び出しは何もしません:

height = 1023; 
dimBlock.x = 16; 

auto x = height/dimBlock.x; // x is of type int and x == 63 
auto y = ceil(x);    // y is of type double, but y == 63.0 
auto z = (int) y;    // z is of type int and x == 63 

...そして、同じことは、それらのすべてを単一の式で実行すると起こります。dimGridの最初の要素は、あなたが望むように64ではなく63になります。代わりに

、次のようなものを使用します。

template <typename T> 
unsigned int div_rounding_up(const T& dividend, const T& divisor) 
{ 
    return (dividend + divisor - 1)/divisor; 
} 

(ない完璧な実装、と私はテンプレートを避ける)

さて、次のように記述します。

dim3 dimGrid(div_rounding_up(height, dimBlock.x), div_rounding_up(width, dimBlock.y));