我正在尝试使用ManagedCuda来编译使用currand library的内核。但是,我找不到一种方法来告诉CudaRuntimeCompiler如何找到curand.h。
如果我删除'#include <curand.h>
'行,则一切正常。但是有了它我得到:
Exception: ErrorCompilation: Compilation error.
Test(1): catastrophic error: cannot open source file "curand.h"
1 catastrophic error detected in the compilation of "Test".
Compilation terminated.
使用完全合格的包含(#include <C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\include\curand.h>
)使我更进一步,因此,很显然,这只是告诉编译器在哪里看的一种情况。
Exception: ErrorCompilation: Compilation error.
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\include\curand.h(59): catastrophic error: cannot open source file "cuda_runtime.h"
我尝试将文件夹添加到路径,无济于事。
谁知道可以在哪里设置? (还是知道ManagedCuda的替代软件包?)
下面的所有代码。
C#代码:
static void Main(string[] args)
{
var rtc = new CudaRuntimeCompiler(GetKernel(), "Test");
string[] compileArgs = new string[0];
try
{
rtc.Compile(compileArgs);
}
catch (Exception e)
{
string log = rtc.GetLogAsString();
Console.WriteLine($"Exception: {e.Message}");
Console.WriteLine(log);
Console.ReadKey();
}
rtc.Dispose();
}
static string GetKernel()
{
return File.ReadAllText("Kernel.c");
}
Kernel.c
#include <curand.h>
extern "C"
{
__global__ void DoNothing()
{
}
}
从NuGet安装了MangedCuda-100(10.0.31)和ManagedCuda-NVRTC(10.0.31)。
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="ManagedCuda-100" version="10.0.31" targetFramework="net472" />
<package id="ManagedCuda-NVRTC" version="10.0.31" targetFramework="net472" />
</packages>