전적으로 CUDA를 처음 사용합니다. 장치에 하나의 개체를 만들고 다른 스레드에서 해당 개체에 액세스하려고합니다. nvcc -arch = sm_20 (Tesla M2090에서)을 사용하고 코드를 실행하면 '지정되지 않은 실행 실패'가 발생합니다. 여기 내 코드입니다 :스레드간에 CUDA 공유 객체
#include <stdio.h>
#include <string>
using namespace std;
#ifdef __CUDACC__
#define CUDA_CALLABLE __host__ __device__
#else
#define CUDA_CALLABLE
#endif
class SimpleClass {
public:
int i;
CUDA_CALLABLE SimpleClass(){i=1;};
CUDA_CALLABLE ~SimpleClass(){};
};
__global__ void initkernel(SimpleClass *a){
a = new SimpleClass();
}
__global__ void delkernel(SimpleClass *a){
delete a;
}
__global__ void kernel(SimpleClass *a){
printf("%d\n", a->i);
}
int main() {
SimpleClass *a;
initkernel<<<1,1>>>(a);
cudaThreadSynchronize();
kernel<<<1,10>>>(a);
cudaThreadSynchronize();
delkernel<<<1,1>>>(a);
cudaThreadSynchronize();
cudaError_t error = cudaGetLastError();
string lastError = cudaGetErrorString(error);
printf("%s\n",lastError.c_str());
return 0;
}
커널 호출이 끝날 때마다 'each'커널 호출 후에 오류를 확인해야한다. 이것은 모든 CUDA API 호출에도 적용됩니다. – pQB
cuda-memcheck를 사용하여 응용 프로그램을 실행하고 결과를 게시 할 수 있습니까? – Vyas