Surface reference limited to 4GB in size?

I have a Quadro 6000 with 6GB of memory and CUDA 5 on Ubuntu 12.04. I can create a 3D CudaArray of size 1856x1856x392 (ca. 5.1 GB of floats) without any problems. But when I try to read and write from/to the CudaArray from inside a Kernel using surf3Dread or surf3Dwrite, data is written to complelty wrong areas in the volume. The result is very similar to a result computed on host with only 32-Bit signed integers as x/y/z indices, why I think my problem is related to 32-Bit addressing issues.
Using a volume smaller 4GB, everything is just fine. Is there a way to address a 3D-surface larger than 4GB? For example using in code PTX?

Please note that Ubuntu 12.04 is not a platform currently supported by CUDA. The CUDA Programming Guide lists the “Maximum width, height, and depth for a 3D surface reference bound to a CUDA array” as 65536 x 32768 x 2048, and I haven’t been able to find anything in the documentation that says there is a 4GB size limit (you are on a 64-bit platform, correct?), so based on that it seem what you are trying to do should work.

If you can reproduce this behavior on one of the 64-bit platforms supported by CUDA 5.0 (a list of supported platforms can be found in the release notes), I would suggest filing a bug report through the registered developer website. There may be a driver or compiler bug, or information about a 4GB limit may be inadvertendly missing from the documentation.

Thanks for the reply. Yes I’m on a 64-Bit platform. As the problem is inside a kernel and not related to the API, I doubt that Ubuntu 12.04 is the reason for this. But to be sure I will try on an elder version before filing a bug.

Using Ubuntu 11.10 everything is running just fine. The problem seems to exist only on Ubutnu 12.04.

Thanks for closing the loop. Good to hear everything works as expected on supported platforms.