Re: nVidia Optumus prevents using CUDA?
- To: mathgroup at smc.vnet.net
- Subject: [mg122735] Re: nVidia Optumus prevents using CUDA?
- From: Alexander Vorobiev <alexander.vorobiev at removethis.gmail.com>
- Date: Wed, 9 Nov 2011 06:23:28 -0500 (EST)
- Delivered-to: l-mathgroup@mail-archive0.wolfram.com
- References: <j8nuj1$ee5$1@smc.vnet.net> <j8r9hu$3jk$1@smc.vnet.net>
"Oleksandr Rasputinov" <oleksandr_rasputinov at hmamail.com> writes:
> Minimal installation of Microsoft Visual C++ 10.0 (2010) SP1
There are two additional steps that I had to take in order to make the
64bit VC compiler work with CUDA:
1. Create the file
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64\vcvars64.bat
containing one line:
CALL "C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.cmd" /x64
2. Modify the file (substitute your home directory instead of C:\Users\alex of course)
C:\Users\alex\AppData\Roaming\Mathematica\Paclets\Repository\CUDAResources-Win64-8.0.4.1\CUDAToolkit\bin\nvcc.profile
so that the INCLUDES line looks like this:
INCLUDES += "-I$(TOP)/include" "-I$(TOP)/include/cudart" "-IC:/Program Files (x86)/Microsoft Visual Studio 10.0/VC/include" $(_SPACE_)
Apparently there is a problem with configuration of NVIDIA CUDA tools
shipped with Mathematica.
I am not sure it is relevant in this case but if the directory with
nvcc.profile is not there, in Mathematica try
CUDAResourcesInstall[Update -> True]
With the two additions a lot of examples in Mathematica Help involving
compilation of CUDA functions (e.g. those in documentation for
CUDAFunctionLoad) work.
> Personally, I use MinGW-w64 GCC
> 4.6.1 rather than Visual C++; this works perfectly well also but does
> require modifications to Mathematica which I will not discuss here other
> than to say that it would be nice if this compiler could be supported
> without need of modifications in a future release.
The way to deal with MinGW-w64 is described in the documentaion. Specifically,
either define $CCompiler:
Needs["CCompilerDriver`"]
Needs["CCompilerDriver`GenericCCompiler`"]
$CCompiler = {"Name" -> "MinGW64", "Compiler" -> GenericCCompiler,
"CompilerInstallation" -> "C:/MinGW64",
"CompilerName" -> "x86_64-w64-mingw32-gcc.exe"};
or use the options, e.g.
greeter = CreateExecutable[StringJoin[
"#include <stdio.h>\n",
"int main(){\n",
" printf(\"Hello MinGW-w64 world.\\n\");\n",
"}\n"],
"hiworld", "Compiler" -> GenericCCompiler,
"CompilerInstallation" -> "C:/MinGW64",
"CompilerName" -> "x86_64-w64-mingw32-gcc.exe"]
Unfortunately that makes the compiler work everywhere in Mathematica (I
tested both 8.0.1 and 8.0.4) but not in CUDALink. I suspect the reason
is that the NVCCCompiler should be pointed to MinGW-w64 somehow and the
documentation is unclear on how to do that. There is an option
"XCompilerInstallation" to CUDAFunctionLoad documented as "the directory
where NVCC will find the C compiler is installed" but there is neither
corresponding "XCompilerName" option nor an example on how to use it.
Regards,
Alex