나는 도움이 필요한 Cuda의 Monte Carlo 단계가있다. 나는 이미 시리얼 코드를 썼고, 예상대로 작동한다. 256 개의 입자가 저장되어 있다고 가정 해 봅시다.Cuda의 몬테 카를로 스윕
vector< vector<double> > *r;
각 i의 r은 (x, y) 성분이 모두 double입니다. 여기서 r은 입자의 위치입니다.
이제 CUDA에서이 벡터를 Host에 할당하고 Device로 보냅니다. 일단 장치 안에 있으면,이 입자들은 서로 상호 작용할 필요가 있습니다. 각 스레드는 Monte Carlo Sweep을 실행해야합니다. cudaMalloc을 사용하여 메모리, 참조/참조 해제 포인터를 할당하려면 어떻게해야합니까? global/shared, ...--- 나는 그것으로 머리를 감쌀 수 없습니다.
여기에 내 메모리 할당이 순간에 모습이다 ::
cudaMalloc((void**)&r, (blocks*threads)*sizeof(double));
CUDAErrorCheck();
kernel <<<blocks, threads>>> (&r, randomnums);
cudaDeviceSynchronize();
CUDAErrorCheck();
cudaMemcpy(r, blocks*threads*sizeof(double), cudaMemcpyDeviceToHost);
위의 코드는 감자 수준이다. 나는 무엇을해야할지 잘 모르겠다. 심지어 개념적으로. 내 주요 문제는 메모리를 할당하고 장치 & 호스트에서 정보를 전달하는 것입니다. 벡터 r을 할당하고, 호스트에서 장치로 복사하고, 장치에서이를 수행하고, 호스트로 다시 복사해야합니다. 어떤 도움이나 "포인터"라도 크게 감사 할 것입니다.
당신이하고자하는 것을 우리에게 말하지 않을 때 무엇을해야 할지를 말하는 것은 매우 어렵습니다. 명시된 바와 같이, 나는 귀하의 게시물이 답할 수 있다고 생각하지 않습니다. 순차적 코드를 CUDA로 번역하고 시험판에 질문을 올리려고 노력하십시오. – JackOLantern
내 주요 문제는 메모리를 할당하고 장치 및 호스트간에 정보를 전달하는 데 있습니다. 벡터 r을 할당하고, 호스트에서 장치로 복사하고, 장치에서이를 수행하고, 호스트로 다시 복사해야합니다. 나는 그것이 단지 몇 줄에 불과하다는 것을 알고 있지만, 그것을 시도하는 데 수십 번 실패했고 나는 단지 길을 잃었습니다. – Krishna