1
要從命令行編譯Cuda內核,有兩件事是必需的。首先是運行vsvars
批處理文件,像這樣:如何將本地環境添加到.NET中的進程?
"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\x86_amd64\vcvarsx86_amd64.bat"
二是實際調用編譯器:
"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\bin\nvcc.exe" -gencode=arch=compute_30,code=\"sm_30,compute_30\" --use-local-env --cl-version 2015 -ccbin "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\x86_amd64" -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\include" -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\include" --keep-dir "C:\Users\Marko\Documents\Visual Studio 2015\Projects\Multi-armed Bandit Experiments\NVCC Experiments\x64\Release" -maxrregcount=0 --machine 64 -ptx -cudart static -o "C:\Users\Marko\Documents\Visual Studio 2015\Projects\Multi-armed Bandit Experiments\NVCC Experiments\x64\Release\kernel.cu.obj" "C:\Users\Marko\Documents\Visual Studio 2015\Projects\Multi-armed Bandit Experiments\NVCC Experiments\kernel.cu"
我想在命令行中做了以上不大,但是從F#腳本或可執行文件,但不知道如何執行第一步。其次是documented on MSDN雖然;它可以使用Process類來完成。順便說一下,Cuda庫確實具有NVCC編譯器的運行時等價物,我稱之爲NVRTC,但它缺少一些關鍵功能,例如lambda表達式,元組和對其他Cuda庫的訪問。我非常想要lambda和元組,以至於我甚至向Cuda編譯器提出了自己的F#語句,但這樣做比在自我約束下運行要好。
任何想法如何在調用NVCC之前添加該本地環境?另外,如果這個過程可以被重用,這將是有趣的。
這是一個選項,你會去vcvarsx86_amd64.bat,看看它設置的變量是什麼,然後在腳本中你會聲明他們使用'processStartInfo.EnvironmentVariables.Add()'? –
這可能值得一試... –
呃,沒有。它可以完成,但批處理文件很長,並且有很多錯誤處理。特定於此配置,因此運行批處理文件的解決方案會更好。是否可以使用'Process'打開命令行,然後運行批處理文件和編譯器?我看到那裏有執行shell的東西...... –