Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用Cudafy时避免nvcc编译_C#_Cudafy.net - Fatal编程技术网

C# 使用Cudafy时避免nvcc编译

C# 使用Cudafy时避免nvcc编译,c#,cudafy.net,C#,Cudafy.net,我正在使用Cudafy,希望我的用户能够在不安装CUDA SDK的情况下使用CUDA,但他们可以使用Cudafy DLL。为了避免nvcc编译在CudafyTranslator.Cudafytypes中自动完成,我使用以下方法: string directory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); string modulePath = Path.Combine(directory, myType.

我正在使用Cudafy,希望我的用户能够在不安装CUDA SDK的情况下使用CUDA,但他们可以使用Cudafy DLL。为了避免nvcc编译在CudafyTranslator.Cudafytypes中自动完成,我使用以下方法:

string directory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
string modulePath = Path.Combine(directory, myType.Name + ".cdfy");
CudafyModule km = CudafyModule.TryDeserialize(modulePath);
if (ReferenceEquals(km, null) || !km.TryVerifyChecksums())
{
    km = CudafyTranslator.Cudafy(types);
    km.Serialize(modulePath);
}
GPU.LoadModule(km);
其中types是System.types的数组

问题出现在第三行,TryDeserialize始终返回null。我已检查文件是否存在,模块路径是否正确,文件是否存在。有人能解释一下这件事吗


如果不意味着重新编写Cudafy模块,我准备改变我的方法。

这是我的函数,部分基于您的代码,顺便说一句:

public static void LoadTypeModule(GPGPU gpu, Type typeToCudafy)
{
    Console.WriteLine("Loading module "+typeToCudafy.Name);

    string appFolder = AppDomain.CurrentDomain.BaseDirectory;
    string typeModulePath = Path.Combine(appFolder, typeToCudafy.Name + ".cdfy");

    CudafyModule cudaModule = CudafyModule.TryDeserialize(typeModulePath);
    if (cudaModule == null || !cudaModule.TryVerifyChecksums())
    {
        // if failed to open module:
        // translate the type's code to cuda code
        cudaModule = CudafyTranslator.Cudafy(typeToCudafy);
        cudaModule.Serialize(); // save to file
    }
    // load module to cuda memory, don't unload previous modules
    gpu.LoadModule(cudaModule, false);
}
现在调用函数:

MyClassWithCudaKernels classModule = new MyClassWithCudaKernels();
LoadTypeModule(gpu, classModule.GetType());

我刚刚遇到同样的问题,但你的代码似乎对我有用!