[Date Index] [Thread Index] [Author Index]
Re: nVidia Optumus prevents using CUDA?
On Thu, 03 Nov 2011 08:44:37 -0000, Oliver Ruebenkoenig <ruebenko at wolfram.com> wrote: >> As you see, this does not involve Visual Studio Express, which I >> deliberately avoided since it does not include the 64-bit compilers >> necessary for operation with Mathematica. 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. >> >> > > I filed this as a suggestion for a future version. > > Oliver > Many thanks. For reference, this support is not very difficult to implement: apart from some (trivial) changes to CCompilerDriver/MinGWCompiler.m and CCompilerDriver/CCompilerDriverRegistry.m, the only other prerequisite is to have the necessary libraries (ml32i3m.lib/ml64i3m.lib etc.) provided in GNU COFF format in addition to the ones in MS COFF format. Import libraries can be generated automatically from the associated DLLs (using MinGW gendef followed by dlltool), and static link libraries can be converted automatically as well (using MinGW ranlib). One thing to note is that MinGW-w64 is a multilib build--i.e. it can produce both 32- and 64-bit binaries--so you need to provide GNU COFF versions of both sets of libraries. The only problem I ran into in implementing the support myself was that ml32i3s.lib and ml64i3s.lib are linked against the static version of the MS C runtime (libcmt.lib), which means they cannot successfully be converted automatically due to certain dependencies. Fixing this is possible but would be a lot easier if they were instead linked against the dynamic C runtime (msvcrt.dll/msvcr80.dll etc.) instead--however, I didn't actually try as I couldn't think of any reason why one would want to build a statically-linked MathLink program in the first place, so for me these libraries are superfluous anyway.