Re: nVidia Optumus prevents using CUDA?
- To: mathgroup at smc.vnet.net
- Subject: [mg122768] Re: nVidia Optumus prevents using CUDA?
- From: "Oleksandr Rasputinov" <oleksandr_rasputinov at hmamail.com>
- Date: Thu, 10 Nov 2011 06:51:38 -0500 (EST)
- Delivered-to: l-mathgroup@mail-archive0.wolfram.com
- References: <j8nuj1$ee5$1@smc.vnet.net> <j8r9hu$3jk$1@smc.vnet.net>
On Wed, 09 Nov 2011 11:34:14 -0000, Alexander Vorobiev
<alexander.vorobiev at removethis.gmail.com> wrote:
> "Oleksandr Rasputinov" <oleksandr_rasputinov at hmamail.com> writes:
>
>> 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"]
>
Treating MinGW-w64 as a generic compiler as described in the documentation
gives one the ability to call it from Mathematica, but does not enable the
same level of functionality available with compilers for which proper
support has been provided. For example, apart from the CUDA issue you
noticed, nothing using MathLink or the Wolfram Library runtime will work
either because libraries have not been provided for this.
CCompilerDriver`GenericCCompiler.m avoids link errors only because it does
not attempt to link with any libraries. In other words, the approach
suggested in the documentation achieves only barely minimal support and is
not enough for proper operation. For example:
In[1]:=
Needs["CCompilerDriver`"];
In[2]:=
(* With proper support *)
$CCompiler=CCompilerDriver`MinGWCompiler`MinGWCompiler;
CreateLibrary[
{"C:\\Program Files\\Wolfram
Research\\Mathematica\\8.0\\SystemFiles\\Links\\LibraryLink\\LibraryResources\\Source\\demo_mathlink.c"},"demo_mathlink"
]
Out[3]=
"C:\\Users\\Oleksandr\\Application
Data\\Mathematica\\SystemFiles\\LibraryResources\\Windows-x86-64\\demo_mathlink.dll"
In[4]:=
(* Using GenericCCompiler` as suggested in the documentation *)
$CCompiler={"Name"->"MinGW64","Compiler"->CCompilerDriver`GenericCCompiler`GenericCCompiler,"CompilerInstallation"->"C:\\MinGW-w64","CompilerName"->"x86_64-w64-mingw32-gcc.exe"};
CreateLibrary[
{"C:\\Program Files\\Wolfram
Research\\Mathematica\\8.0\\SystemFiles\\Links\\LibraryLink\\LibraryResources\\Source\\demo_mathlink.c"},"demo_mathlink",
"ShellOutputFunction"->Print
]
During evaluation of In[5]:=
C:\MinGW-w64\bin\x86_64-w64-mingw32-gcc.exe -shared -o
"C:\Users\Oleksandr\Application
Data\Mathematica\SystemFiles\LibraryResources\Windows-x86-64\Working\demo_mathlink.dll"
-I"C:\Program Files\Wolfram
Research\Mathematica\8.0\SystemFiles\IncludeFiles\C" -I"C:\Program
Files\Wolfram
Research\Mathematica\8.0\SystemFiles\Links\MathLink\DeveloperKit\Windows-x86-64\CompilerAdditions\mldev64\include"
"C:\Program Files\Wolfram
Research\Mathematica\8.0\SystemFiles\Links\LibraryLink\LibraryResources\Source\demo_mathlink.c"
-L"C:\Program Files\Wolfram
Research\Mathematica\8.0\SystemFiles\Links\MathLink\DeveloperKit\Windows-x86-64\CompilerAdditions\mldev64\lib"
-L"C:\Program Files\Wolfram
Research\Mathematica\8.0\SystemFiles\Libraries\Windows-x86-64" 2>&1
C:\Users\Oleksandr\Temp\ccCKP9sc.o:demo_mathlink.c:(.text+0x54): undefined
reference to `MLCheckFunction'
C:\Users\Oleksandr\Temp\ccCKP9sc.o:demo_mathlink.c:(.text+0x70): undefined
reference to `MLGetInteger'
C:\Users\Oleksandr\Temp\ccCKP9sc.o:demo_mathlink.c:(.text+0x84): undefined
reference to `MLGetInteger'
C:\Users\Oleksandr\Temp\ccCKP9sc.o:demo_mathlink.c:(.text+0x94): undefined
reference to `MLNewPacket'
C:\Users\Oleksandr\Temp\ccCKP9sc.o:demo_mathlink.c:(.text+0xb7): undefined
reference to `MLPutInteger'
C:\Users\Oleksandr\Temp\ccCKP9sc.o:demo_mathlink.c:(.text+0x1bc):
undefined reference to `MLCheckFunction'
C:\Users\Oleksandr\Temp\ccCKP9sc.o:demo_mathlink.c:(.text+0x1d8):
undefined reference to `MLGetString'
C:\Users\Oleksandr\Temp\ccCKP9sc.o:demo_mathlink.c:(.text+0x1e8):
undefined reference to `MLNewPacket'
C:\Users\Oleksandr\Temp\ccCKP9sc.o:demo_mathlink.c:(.text+0x20c):
undefined reference to `MLPutString'
C:\Users\Oleksandr\Temp\ccCKP9sc.o:demo_mathlink.c:(.text+0x23f):
undefined reference to `MLReleaseString'
collect2: ld returned 1 exit status
Out[5]= $Failed