私は以下を使用しています: GeForce GTX 1080計算能力を持つTI 6.1。 OpenCV 3.2バージョン(VS2013、x64リリース用にビルドされ、デバッグ構成は別途) CUDA 8.0バージョン。 ビジュアルスタジオ2013、x64プラットフォームの設定を解除してデバッグします。x64プラットフォームでスタンドアロンでリリース設定をリリースするための設定引数が無効です
私の目的は、入力画像全体の一部を処理することです。 画像部分は、左上の座標と幅と高さで宣言されています。
問題の説明: 無効な設定引数 CUDAエラーがrasiedさのみ私は、Visual Studioの[デバッグ]メニュー(はCtrl + F5)を経由して(デバッグなし)スタンドアローンモードでのリリース出力を実行しているとき。
VSデバッグメニュー(F5)で同じリリースの実行ファイルを実行している場合、エラーは発生しません。
同じアプリケーションコードによって生成されたデバッグ構成の出力を実行しているときは、オプションF5とCtrl + F5の両方が正常に動作し、エラーは発生しません。ここで
私のコードです:エラーが発生し
struct sRect
{
unsigned int m_StartRow;
unsigned int m_StartCol;
unsigned int m_SizeRows;
unsigned int m_SizeCols;
};
__global__ void CleanNoisePreparation(unsigned char * SrcImage, size_t iStep, const sRect ImageSlice)
{
int iXPos = threadIdx.x + blockIdx.x*blockDim.x;
int iYPos = threadIdx.y + blockIdx.y*blockDim.y;
if (!(iXPos < ImageSlice.m_SizeCols && iYPos < ImageSlice.m_SizeRows))
return;
/*In case pixel value is less or equal to 127 set it to black color (0) otherwisw set it to white color (255)*/
SrcImage[iYPos * iStep + iXPos] = (SrcImage[iYPos * iStep + iXPos] <= (unsigned char)127) ? ((unsigned char)0) : ((unsigned char)255);
}
void PerformCleanNoisePreparationOnGPU(cv::cuda::GpuMat& Image,
const sRect &ImageSlice,
const dim3 &dimGrid,
const dim3 &dimBlock,
const cudaStream_t &Stream)
{
/*Calculate the rquired start address based on the required image slice characteristics*/
unsigned char * pImageData = (unsigned char*)(Image.data ImageSlice.m_StartRow * Image.step + ImageSlice.m_StartCol);
CleanNoisePreparation << <dimGrid, dimBlock, 0, Stream >> >(pImageData, Image.step, ImageSlice);
CUDA(cudaGetLastError());
}
void main
{
sRect ResSliceParams;
ResSliceParams.m_StartRow = 0;
ResSliceParams.m_StartCol = 4854;
ResSliceParams.m_SizeRows = 7096;
ResSliceParams.m_SizeCols = 5146;
cv::cuda::GpuMat MyFrame = cv::cuda::GpuMat::GpuMat(cv::Size(10000, 7096), CV_8U);
//Image step size is 10240
dim3 dimBlock (32, 32, 1)
dim3 dimGrid (161, 222, 1)
cudaStream_t cudaStream;
cudaStreamCreateWithFlags(&cudaStream, cudaStreamNonBlocking);
PerformCleanNoisePreparationOnGPU(MyFrame,
ResSliceParams,
dimGrid,
dimBlock,
cudaStream);
}
もとき:
- カーネルは完全に空である(すべての行がコメントした)
- カーネルの入力リストは空です。
- デフォルトストリームではなく、問題の源が発見された
あなたはどのようなアーキテクチャをコンパイルしていますか?お使いのGPUは3.0ではなく、コンピューティング機能6.1のデバイスです。 CUDA 8ツールキットはデフォルトで計算2.0になります。それは打ち上げ失敗を説明するかもしれない。 – talonmies
あなたの迅速な対応に感謝します。 あなたはCCについて正しいです、それはタイプミスでした。 アーキテクチャに関するご質問について: 私が正しく理解している場合は、リリース構成とx64プラットフォームを使用しています。そうでない場合は、明確にしてください。 CUDA 8.0ツールキットのCCをどのように変更することができますか教えてください。 – OronG
もしそれがタイプミスならば、質問を編集して修正してください。 –