On Mon, Sep 20, 2010 at 2:08 PM, MinRK <mi...@berkeley.edu> wrote:

> Okay, with a tiny tweak to compiler.compile, I have UB pycuda working in
> both 64 and 32-bit.  All I did was tell compile() to add '-m64' to options
> if it detects 64-bit mode, in the same way as Bryan's trick.
>
> I pushed a branch with the patch to my GitHub:
> http://github.com/minrk/pycuda, as well as a siteconf that works for the
> build.  There are still a few failures in test_gpuarray for 64-bit, but I
> don't know what causes them.
>
> On Mon, Sep 20, 2010 at 11:30, Art <grenan...@gmail.com> wrote:
>
>>
>> On Mon, Sep 20, 2010 at 8:34 AM, Bryan Catanzaro <
>> catan...@eecs.berkeley.edu> wrote:
>>
>>> I think it should be changed to check to see if the Python interpreter is
>>> currently running in 32 bit mode, and then compile to match:
>>>
>>> if 'darwin' in sys.platform and sys.maxint == 2147483647:
>>>    # The Python interpreter is running in 32 bit mode on OS X
>>>     if "-arch" not in conf["CXXFLAGS"]:
>>>      conf["CXXFLAGS"].extend(['-arch', 'i386', '-m32'])
>>>    if "-arch" not in conf["LDFLAGS"]:
>>>      conf["LDFLAGS"].extend(['-arch', 'i386', '-m32'])
>>>
>>> Some people (myself included) have to run Python in 32-bit mode on 64-bit
>>> OS X for various compatibility reasons (currently including libcudart.dylib,
>>> which is only shipped as a 32-bit library).  Since the Python which Apple
>>> ships is compiled as a fat binary with both 32 and 64 bit versions, we can't
>>> know a priori what the right compiler flags are.
>>>
>>> - bryan
>>
>>
>> I have driver version 3.1.14 and:
>>
>> $ file /usr/local/cuda/lib/libcudart.dylib
>> /usr/local/cuda/lib/libcudart.dylib: Mach-O universal binary with 2
>> architectures
>> /usr/local/cuda/lib/libcudart.dylib (for architecture x86_64): Mach-O
>> 64-bit dynamically linked shared library x86_64
>> /usr/local/cuda/lib/libcudart.dylib (for architecture i386): Mach-O
>> dynamically linked shared library i386
>>
>> Doesn't that mean it's UB?
>>
>
> You are right, that's UB, I guess the change was made at 3.1, not 3.2.  In
> 3.0, they introduced UB for libcuda, but left all other libraries as i386.
>
>
>> I can build and test cudamat [1] (which uses ctypes to call libcudart and
>> libcublas) fine in 64-bit macports python though I haven't otherwise used
>> it. I had to make the following small change in it's Makefile:
>>
>> nvcc -O -m 64 -L/usr/local/cuda/lib --ptxas-options=-v --compiler-options
>> '-fPIC' -o libcudamat.so --shared cudamat.cu cudamat_kernels.cu -lcublas
>>
>> from:
>>
>> nvcc -O --ptxas-options=-v --compiler-options '-fPIC' -o libcudamat.so
>> --shared cudamat.cu cudamat_kernels.cu -lcublas
>>
>> I built pycuda as 64-bit and changed pycuda/compiler.py to pass --machine
>> 64 to nvcc and got examples/demo.py to run but the other examples and tests
>> had failures and would eventually hang my machine. I don't know enough to
>> fix this myself but I can try suggestions. Would using 3.2RC make a
>> difference?
>>
>
> If the rest of libraries are UB, as cudart is at 3.1, then 3.2 shouldn't
> make a difference from 3.1.x, I just knew that the switch was somewhere
> between 3.0 and 3.2, and it appears to have been at 3.1.
>
> -MinRK
>
>
>>
>> [1] http://code.google.com/p/cudamat/
>>
>> cheers,
>> art
>>
>
>>
Thanks for posting the fork. I used your modification to compiler.py (my
original one was incorrect) and I built a 64-bit only version of pycuda and
all tests under tests/ passed for the first time. I also was able to call
cublas and cufft using something similar to parret [1].

This is the siteconf.py I used hacked from someone's earlier efforts on this
list:

BOOST_INC_DIR = ['/opt/local/include']
BOOST_LIB_DIR = ['/opt/local/lib']
BOOST_COMPILER = 'gcc-mp-4.4'  # not sure
USE_SHIPPED_BOOST = False
BOOST_PYTHON_LIBNAME = ['boost_python-mt']
BOOST_THREAD_LIBNAME = ['boost_thread-mt']
CUDA_TRACE = False
CUDA_ENABLE_GL = False
CUDADRV_LIB_DIR = []
CUDADRV_LIBNAME = ['cuda']
CXXFLAGS = ['-arch', 'x86_64', '-m64', '-isysroot',
'/Developer/SDKs/MacOSX10.6.sdk']
LDFLAGS = ['-arch', 'x86_64', '-m64', '-isysroot',
'/Developer/SDKs/MacOSX10.6.sdk']

[1] http://www.mathcs.emory.edu/~yfan/PARRET/doc/index.html
_______________________________________________
PyCUDA mailing list
PyCUDA@tiker.net
http://lists.tiker.net/listinfo/pycuda

Reply via email to