J'essaie de définir mes paramètres de simulation en mémoire constante mais sans chance (CUDA.NET). La fonction cudaMemcpyToSymbol renvoie cudaErrorInvalidSymbol. Le premier paramètre dans cudaMemcpyToSymbol est une chaîne ... Est-ce un nom de symbole? En fait, je ne comprends pas comment cela pourrait être résolu. Toute aide appréciée.Allouer la mémoire constante
//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);
mon fichier .cu contient
__constant__ float param;
solution de travail
cuda.LoadModule(Path.Combine(Environment.CurrentDirectory, "name.cubin"));
simParams = cuda.GetModuleGlobal("params");
float[] parameters = new float[N]{...}
cuda.CopyHostToDevice<float>(simParams, parameters);
L'idée de remerciement est claire et fonctionne pour cpp (--compile). Mais pas en cas de nvcc myfile.cu --cubin dans l'événement post-construction de l'application .net. "(-cubin) Compile tous les fichiers d'entrée .cu/.ptx/.gpu en fichiers .cubin uniquement pour les périphériques Cette étape supprime le code d'hôte pour chaque fichier d'entrée .cu." Donc, quand je charge ce module, il n'inclut pas les fonctions de l'hôte. – Vladimir