-4
私は積分画像に接頭辞スキャンアルゴリズムを使用していますが、変換する必要はありません。私はカーネル機能と呼ぶと間違っていると思う。私は私のdimblockは16私のdimgridがCuda Prefix Scan
dim3 dimGrid((int)ceil(height/dimBlock.x), (int)ceil(width/dimBlock.y))
私は積分画像に接頭辞スキャンアルゴリズムを使用していますが、変換する必要はありません。私はカーネル機能と呼ぶと間違っていると思う。私は私のdimblockは16私のdimgridがCuda Prefix Scan
dim3 dimGrid((int)ceil(height/dimBlock.x), (int)ceil(width/dimBlock.y))
ですカーネル関数を呼び出すときに、あなたのグリッドとブロックサイズの計算に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));
を私たちに与えてください最小の例:https://stackoverflow.com/help/mcve 接頭辞スキャン(スラストや立方体など)に外部ライブラリを使用しないのはなぜですか? – X3liF
イメージを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) –
@ X3liF:私はそれがもっとシンプルだと思う... – einpoklum