cuda는 커널이 시작될 때 할당 된 모든 관리 대상 메모리를 차단하고 GPU로 전송합니까? 나는 방금 uma와 놀았고 이상한 결과를 얻었다. 적어도 내 관점에서.Cuda, 통합 메모리, 데이터 전송
2 개의 어레이를 만들고 커널에 A를 보내면 B는 커널 호출에 영향을받지 않지만 액세스 할 수는 없습니다.
0 0 0 here1 0 here2 after1 :이 프로그램은 그냥 내가
b[0] = 1;
줄을 주석으로 경우 코드가 잘 실행 B.0 0 0 here1
을 터치하면 충돌 1 after2
왜 이런 일이 발생합니까?
__global__ void kernel(int* t)
{
t[0]++;
}
int main()
{
int* a;
int* b;
std::cout << cudaMallocManaged(&a,sizeof(int)*100) << std::endl;
std::cout << cudaMallocManaged(&b,sizeof(int)*100) << std::endl;
std::cout << b[0] << std::endl;
kernel<<<1,1,0,0>>>(a);
std::cout << "here1" << std::endl;
b[0] = 1;
std::cout << "after1" << std::endl;
cudaDeviceSynchronize();
std::cout << b[0] << std::endl;
std::cout << "here2" << std::endl;
std::cout << a[0] << std::endl;
std::cout << "after2" << std::endl;
return 0;
}