상수 메모리에 시뮬레이션 매개 변수를 설정하려고했지만 행운을 빌지 않았습니다 (CUDA.NET). cudaMemcpyToSymbol 함수는 cudaErrorInvalidSymbol을 반환합니다. cudaMemcpyToSymbol의 첫 번째 매개 변수는 string입니다 ... 심볼 이름입니까? 나는 그것이 어떻게 풀릴 수 있는지 이해하지 못한다. 어떤 도움을 주셔서 감사합니다.상수 메모리 할당
//init, load .cubin
float[] arr = new float[1];
arr[0] = 0.0f;
int size = Marshal.SizeOf(arr[0]) * arr.Length;
IntPtr ptr = Marshal.AllocHGlobal(size);
Marshal.Copy(arr, 0, ptr, arr.Length);
var error = CUDARuntime.cudaMemcpyToSymbol("param", ptr, 4, 0, cudaMemcpyKind.cudaMemcpyHostToDevice);
내 .CU 파일이 포함
__constant__ float param;
전문 솔루션
cuda.LoadModule(Path.Combine(Environment.CurrentDirectory, "name.cubin"));
simParams = cuda.GetModuleGlobal("params");
float[] parameters = new float[N]{...}
cuda.CopyHostToDevice<float>(simParams, parameters);
감사의 뜻은 분명하며 cpp (--compile)에서 작동합니다. 하지만 .net app의 post 빌드 이벤트에서 nvcc myfile.cu --cubin의 경우는 아닙니다. "(-cubin) 모든 .cu/.ptx/.gpu 입력 파일을 장치 전용 .cubin 파일로 컴파일합니다.이 단계는 각 .cu 입력 파일의 호스트 코드를 삭제합니다." 그래서이 모듈을로드 할 때 호스트 기능을 포함하지 않습니다. – Vladimir