Ich benutze: GeForce GTX 1080 TI, die eine Rechenleistung hat 6.1. OpenCV 3.2-Version (wurde für VS2013, x64 Release und Debug-Konfigurationen separat erstellt). CUDA 8.0 Version. Visual Studio 2013, Relase und Debug-Konfigurationen der x64-Plattform.Ungültiges Konfigurationsargument für Release-Konfiguration Standalone-Ausführung auf x64-Plattform
Mein Zweck ist es, einen Teil des gesamten Eingangsbildes zu verarbeiten. Der Bildteil, der von der oberen linken Koordinate und der Breite und Höhe deklariert wird.
Problembeschreibung: Eine ungültige Konfiguration Argument CUDA Fehler rasied ist nur, wenn ich in der Release-Ausgabe im Stand-Alone-Betrieb (ohne Debuggen) über Visual Studio DEBUG-Menü (Strg + F5) ausgeführt wird.
Wenn ich die gleiche Release ausführbare über VS Debug-Menü (F5) ausführen, wird der Fehler nicht ausgelöst.
Auch wenn ich die Ausgabe der Debug-Konfiguration ausführen, die von demselben Anwendungscode generiert wurde, funktionieren beide Optionen F5 und Ctrl + F5 ordnungsgemäß und der Fehler wird nicht ausgelöst.
Hier ist mein Code:
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);
}
Der Fehler wird ausgelöst, auch wenn:
- Der Kern völlig leer ist (alle Linien wurden kommentiert)
- Der Kernel-Eingänge Liste ist leer. anstelle von spezifischen Strom wird
- Standardstrom verwendet
Für welche Architektur kompilieren Sie? Ihre GPU ist ein Compute-fähiges 6.1-Gerät, nicht 3.0. Das CUDA 8-Toolkit berechnet standardmäßig 2.0. Das könnte den Startfehler erklären. – talonmies
Vielen Dank für Ihre schnelle Antwort. Sie haben Recht mit dem CC, es war ein Tippfehler. In Bezug auf Ihre Frage zur Architektur: Wenn ich Sie richtig verstehe, verwende ich Release-Konfiguration und x64-Plattform. Wenn nicht, bitte klarstellen. Können Sie mir bitte helfen, wie kann ich das CC für das CUDA 8.0 Toolkit ändern? – OronG
Wenn es ein Tippfehler ist, dann redigiere die Frage und behebe sie. –