----------------a.c---------------------
variable *XX;
func1(){
for(...){
for(i = 0; i < 4; i++)
cutStartThread(func2,args)
}
}
---------------b.cu-------------------
func2(args){
cudaSetDevice(i);
xx = cudaMalloc();
mykernel<<<...>>>(xx);
}
--------------------------------------
최근에 내 프로그램에 여러 GPU 장치를 사용하고 싶습니다. 내 노드에는 4 개의 Tesla C2075 카드가 있습니다. 4 개의 스레드를 사용하여 4 개의 GPU를 관리합니다. 또한 각 스레드의 커널이 여러 번 실행됩니다. 위와 같이 단순한 의사 코드.여러 커널과 여러 GPU에서 전역 메모리를 공유하는 방법은 무엇입니까?
변수
XX
매우 긴 문자열, 단지 커널에서 읽기 : 저는 두 가지 질문이 있습니다.mykernel
의 여러 번 실행 중에이를 보존하려고합니다.cudaMalloc
에 전화를 걸고mykernel
을 처음 실행했을 때만mykernel
에 포인터를 전달 하시겠습니까? 또는 한정자__device__
을 사용해야합니까?XX
은 4 개의 스레드에서 사용되므로 파일의 전역 변수로 선언합니다.cudaMalloc
의XX
이 정확합니까? 예 :variable *xx[4]
과 같은 배열을 사용해야합니까?
자신의 코드에서'cuStartThread()'를 사용하지 마십시오. – talonmies