I've been trying to enable all the four GPU cores for GPGPU programs in my dual 4870 X2 system.
So far I've found it close to impossible to enable all the cores in Vista. calDeviceGetCount function maxes at 2 whatever I do.
With Windows Server 2003 I've been able to get all the GPU cores recognized with calDeviceGetCount, but performance has been less than stellar.
I've tested with Sisoft Sandra 2009 GPGPU benchmark and with GPU2 Folding@Home client. Both of which show performance less than a single 4870 X2 card should give, and they shouldn't be CPU bottlenecked. The programs appear to run flawlessly with all four R770 ASICs recognized though.
So I'm beginning to wonder if the GPU enumeration fails somehow and in fact only two R770 ASICs are being used.
Interestingly, I found that in Vista the calDeviceGetInfo function recognizes only the first two ASICs as reported by calDeviceGetCount, whereas in W2K3 even non-existent GPU cores (e.g. #10) get recognized as a "real" R770. CAL bug or driver issue?
What's really happening here? After system restart calDeviceGetCount reports only 3 devices although nothing has changed.
Thia is code modified from a SDK sample:
fprintf(stdout, "Finding out number of devices :- \n");
CALuint numDevices = 0;
if(calDeviceGetCount(&numDevices) != CAL_RESULT_OK)
fprintf(stdout, "\tError : Unable to find number of devices.\n\n");
fprintf(stdout, "\tDevice Count = %d\n\n", numDevices);
for (int gpu = 0; gpu <=8; gpu++)
fprintf(stdout, "GPU %d Device type = GPU R600\n", gpu);
fprintf(stdout, "GPU %d Device type = GPU R670\n", gpu);
fprintf(stdout, "GPU %d Device type = GPU R770\n", gpu);
fprintf(stdout, "GPU %d Device type = %d\n", gpu, info.target);
This now outputs:
Finding out number of devices :-
Device Count = 3
GPU 0 Device type = GPU R770
GPU 1 Device type = GPU R770
GPU 2 Device type = GPU R770
GPU 3 Device type = GPU R770
GPU 4 Device type = GPU R770
GPU 5 Device type = GPU R770
GPU 6 Device type = GPU R770
GPU 7 Device type = GPU R770
GPU 8 Device type = GPU R770
CAL shutdown successful.
Press enter to exit...
I am not sure if X2 will show two GPUs in Vista. See this link:
Neither WinServer 2003 nor X2 is currently tested with the SDK.
When will the calDeviceGetCount bug will be fixed ? After 3 months the bug is always here with the 4870x2. The only way is to use AtiMultiGPUAdapters function to detect correctly the number of gpu.