Udacity ビデオ コース (コースは 2 歳です) から CUDA GPU プログラミングを学び始めています。Nvidia GeForce GT 630M GPUで、Visual Studio Express 2012 (学生版のため、CUDA デバッグのすべての機能が利用できるわけではありません) でCUDA 5.5 を使用しています。
いくつかのベクトル加算とその他の単純な操作を実装しました。
今、RGB 画像を Grayscale に変換しようとしています。OpenCVの助けを借りて画像を読んでいます。(とにかく、どんな方法を試しても失敗しました。それが私がここにいる理由です)
以下は私の .cpp ファイルです: https://gist.github.com/abidrahmank/7020863
以下は私の.cuファイルです: https://gist.github.com/abidrahmank/7020910
私の入力画像は単純な 64x64 カラー画像です (実際には最初に 512x512 画像を使用しましたが、うまくいかなかったので、問題があるかどうかを確認するために 64x64 に下げました。そうではないようです)
問題
私の CUDA 実装の出力イメージは white imageです。すべての値は 255 です。ところどころに灰色のピクセルがあり、1% 未満である可能性があります。残りはすべて白です。
私が試したこと:
3日間、私は次のことを試しました:
- 問題は画像サイズが原因である可能性があると考えたため、スレッド数が最適ではないか、そのようなものである可能性があるため、画像サイズを縮小しました。それでも同じ結果。
- 同様の例を試して、64x64 配列を作成しました。一度に 2 つのピクセルを取り、それらの合計の 2 乗を見つけると、うまくいきました。コードは次のとおりです: https://gist.github.com/abidrahmank/7021023
- 各段階でデータを 1 つずつチェックし始めました。GPUにロードする直前の入力画像は問題ありません。しかし、カーネル内をチェックしたときの入力データは常に 255 です。 (ここで 14 行目を確認してください)
- 最後に、すべての GPU データを使用してゼロに設定し
CudaMemset
、カーネル内の入力データをチェックしましたが、まだ 255 です。
したがって、StackOverflowで他の質問をする他のオプションはありません。
誰が私が犯している間違いを教えてもらえますか?