여기에 CUDA/C++ 멍청한.CUDA 첫 번째 예외 예외 스택 오버플로 오류
내 CUDA 프로젝트를 디버깅하려고에 나타나는 오류는 다음과 같습니다
웹에 대한 연구에서First-chance exception at 0x000000013F889467 in simple6.exe: 0xC00000FD: Stack overflow (parameters: 0x0000000000000001, 0x0000000000223000).
The program '[2668] simple6.exe' has exited with code 0 (0x0).
, 내가 "stack"
너무 크고 이동해야 일부 대형 변수를 가질 것으로 보인다 "heap"
.
누군가 적절한 코드 수정을 제공해 주시겠습니까?
내 코드는 다음과 같습니다. 이 커널의 요점은 h_S
과 h_TM
을 사용하여 많은 값을 만들고이 값을 마지막에 h_F
에 쓰는 것입니다. 이것이 h_F
이 GPU에 절대 복사되지 않는 이유입니다.
int main()
{
int blockSize= 1024;
int gridSize = 1;
const int reps = 1024;
const int iterations = 18000;
int h_F [reps * iterations] = {0};
int h_S [reps] = {0}; // not actually zeros in my code this just simplifies things
int h_TM [2592] = {0} // not actually zeros in my code this just simplifies things
// Device input vectors
float *d_F;
double *d_S;
float *d_TM;
//Select GPU
cudaSetDevice(0);
// Allocate memory for each vector on GPU
cudaMalloc((void**)&d_F, iterations * reps * sizeof(float));
cudaMalloc((void**)&d_S, reps * sizeof(double));
cudaMalloc((void**)&d_TM, 2592 * sizeof(float));
// Copy host vectors to device
cudaMemcpy(d_S, h_S, reps * sizeof(double), cudaMemcpyHostToDevice);
cudaMemcpy(d_TM, h_TM, 2592 * sizeof(float), cudaMemcpyHostToDevice);
// Execute the kernel
myKern<<<gridSize, blockSize>>>(d_TM, d_F, d_S, reps);
cudaDeviceSynchronize();
// Copy array back to host
cudaMemcpy(h_F, d_F, iterations * reps * sizeof(float), cudaMemcpyDeviceToHost);
// Release device memory
cudaFree(d_F);
cudaFree(d_TM);
cudaFree(d_S);
cudaDeviceReset();
return 0;
또한, 관련 있지만,이 거대한 입력 배열 변수는 내 문제를 해결 "이 공유"를 만드는 것?
감사합니다.
죄송합니다. 여기서는 적절한 코드 수정을하지 않습니다. C++에서 동적 메모리 할당에 대해 배우고 싶다면 Google malloc을 사용하거나 C++ new 연산자를 읽으십시오. – talonmies
나는 단지 숟가락 먹이가 아닌 약간의 지침이 필요하다. 내가 올바르게 이해한다면 동적 메모리는 하나의 변수 만 선언 할 수 있기 때문에이 맥락에서 제한적이다. – Jordan
[기본 조건에서 충돌하는 CUDA C 프로그램] (http://stackoverflow.com/questions/20127835/basic-cuda-c-program-curashing-under-certain-conditions)의 복제본이있을 수 있습니다. – JackOLantern