Dual chip 9400m 9600m

Is it possible on the late 2008 macbook pros to run your video from the 9400m graphics card and process CUDA on the 9600m card? This would be strictly for testing while I organize the funding for a CUDA workstation. Thanks!

Hi!

sorry to (partially) HJ the thread… I have a late 2008 MBP with 9400m+9600GT too (first series unibody) and I’m having troubles when I try to work in high performance mode (i.e. with the 9600GT). what about you? any other MacBook pro users out there?

I have installed the latest CUDA dev drivers (3.0.14) and the ToolKit: when I run my CUDA apps in energy saving mode (i.e. on-board 9400m ONLY) everything’s fine but if I try in High Performance mode i get a “no CUDA capable hardware…” error. the problem is probably due to the fact that the on-board graphic card is still visible (I saw other mac users reporting the same error with Mac Pros and more than one nVidia card… solved removing the additional cards)

I really hope the developers may find a solution for this annoying Mac issue… (I’m forced to use the 9400m only ATM)

thank you!

A

Sadly it seems to be Mac OS X version related. As time of this writing, you have to be in “High performance mode” to use both, albeit they were both available (and FASTER!) in “Energy saving mode” on earlier 10.6.x versions!

Paradox was in Energy saving mode, 9400M was handling the video, at 1.1Ghz (instead 0.4Ghz in “High performance mode”) and 9600M GT available too for CUDA @ 1.25Ghz (after warm-up, and not having to handle video!!!). So both were faster, and even memory IO were faster due to IGP running at full pace.

So now you’d better go for the “High performance mode”, having video handled by the GeForce 9600M GT too (and taking some video memory!)

Hi!

Interestingly, when I run the n-body galaxy example from Apple (Link) it can still grab my 9600M GT although being in battery saving mode and using OS X 10.6.4.
When you look at the code, a simple clGetDeviceIDs yields two gpu devices whereas when I run it in my makefile based example, I only get the 9400M (same as when executing nVidia’s oclBandwidthTest example, etc.).
So there must be some way to enable this access from the application level - even if it is a side effect of the example.
In my case I cannot use the 9600GT for OpenCL in performance mode, because my software runs as a plugin in a host-system which already uses up the memory for heavy OpenGL work.

Do you guys already found a solution for this?

Thanks,
Kai

Hi!

Interestingly, when I run the n-body galaxy example from Apple (Link) it can still grab my 9600M GT although being in battery saving mode and using OS X 10.6.4.
When you look at the code, a simple clGetDeviceIDs yields two gpu devices whereas when I run it in my makefile based example, I only get the 9400M (same as when executing nVidia’s oclBandwidthTest example, etc.).
So there must be some way to enable this access from the application level - even if it is a side effect of the example.
In my case I cannot use the 9600GT for OpenCL in performance mode, because my software runs as a plugin in a host-system which already uses up the memory for heavy OpenGL work.

Do you guys already found a solution for this?

Thanks,
Kai

I also tried out CUDA on windows on my MB, however there seems to be just the 9600M GT available. So I could not use parallel nsight for debugging :( Is there any chance to have both GPUs available on Win?

I also tried out CUDA on windows on my MB, however there seems to be just the 9600M GT available. So I could not use parallel nsight for debugging :( Is there any chance to have both GPUs available on Win?

I only tested this with OpenCL, but I reckon it works with CUDA too:
It is possible to utilise the 9600 in battery saving mode for calculation purposes.
All you need to do is to create an OpenGL context and iterate over the virtual screens like so:

GLint i = 0;
CGLContextObj ctx = CGLGetCurrentContext();
while(CGLSetVirtualScreen(ctx, i) == kCGLNoError) {
i++;
}

After doing that, a call to clGetDeviceIDs yields two gpu devices:

unsigned int count = 0;
cl_device_id m_device_id[32];
clGetDeviceIDs(NULL, CL_DEVICE_TYPE_GPU, 32, m_device_id, &count);
printf(“Found %d GPU devices…\n”, count);

Test environment:
Macbook Pro (first unibody, w. 9400M + 9600M GT).
OS X 10.6.4

Explicitly settings the pixel format attribute to allow for offline renderers wasn’t necessary in my case.

Unfortunately this solution sounds rather like a bug than feature, so Apple might ‘fix’ it in the future.
What is more, being required to carry around an OpenGL context might not be a solution for you either.

Would be nice if we could just decide which card is used for display purposes in high performance mode, then there would be no reason to fallback to these kind of workarounds…

Kai

I only tested this with OpenCL, but I reckon it works with CUDA too:
It is possible to utilise the 9600 in battery saving mode for calculation purposes.
All you need to do is to create an OpenGL context and iterate over the virtual screens like so:

GLint i = 0;
CGLContextObj ctx = CGLGetCurrentContext();
while(CGLSetVirtualScreen(ctx, i) == kCGLNoError) {
i++;
}

After doing that, a call to clGetDeviceIDs yields two gpu devices:

unsigned int count = 0;
cl_device_id m_device_id[32];
clGetDeviceIDs(NULL, CL_DEVICE_TYPE_GPU, 32, m_device_id, &count);
printf(“Found %d GPU devices…\n”, count);

Test environment:
Macbook Pro (first unibody, w. 9400M + 9600M GT).
OS X 10.6.4

Explicitly settings the pixel format attribute to allow for offline renderers wasn’t necessary in my case.

Unfortunately this solution sounds rather like a bug than feature, so Apple might ‘fix’ it in the future.
What is more, being required to carry around an OpenGL context might not be a solution for you either.

Would be nice if we could just decide which card is used for display purposes in high performance mode, then there would be no reason to fallback to these kind of workarounds…

Kai

Hi,

I have a Jun/2009 MacBook Pro with the 9400M and 9600GT. Using CUDA 2.2, under “power saving mode”, I can only see the 9400M card (I figured the 9600GT doesn’t even get power when off). When under high-performance mode, I can access both, but in neither using the 9600GT nor the 9400M (not attached to the display) I could reach the throughput of the 9400M connected to the display.

The SDK release notes recommend always running CUDA on a GPU attached to a display on Mac:

“If a GPU is used without a display attached it may not exit a reduced power state, causing CUDA programs to perfom poorly when run on that GPU. Cycling the system’s power saving state or rebooting should reset the GPU. In general it is best to use a GPU with a display attached.”

Hope this helps.

Alejandro.-

Hi,

I have a Jun/2009 MacBook Pro with the 9400M and 9600GT. Using CUDA 2.2, under “power saving mode”, I can only see the 9400M card (I figured the 9600GT doesn’t even get power when off). When under high-performance mode, I can access both, but in neither using the 9600GT nor the 9400M (not attached to the display) I could reach the throughput of the 9400M connected to the display.

The SDK release notes recommend always running CUDA on a GPU attached to a display on Mac:

“If a GPU is used without a display attached it may not exit a reduced power state, causing CUDA programs to perfom poorly when run on that GPU. Cycling the system’s power saving state or rebooting should reset the GPU. In general it is best to use a GPU with a display attached.”

Hope this helps.

Alejandro.-