My OpenCL program can find the GPU device when I am logged in at the console, but not when I am logged in remotely with ssh. Further, if I run the program as root in the ssh session, the program can find the GPU.
The computer is a Snow Leopard Mac with a GeForce 9400 GPU.
If I run the program (see below) from the console or as root, the output is as follows (notice the "GeForce 9400" line):
2 devices found
Device #0 name = GeForce 9400
Device #1 name = Intel(R) Core(TM)2 Duo CPU P8700 @ 2.53GHz
but if it is just me, over ssh, there is no GeForce 9400 entry:
1 devices found
Device #0 name = Intel(R) Core(TM)2 Duo CPU P8700 @ 2.53GHz
I would like to test my code on the GPU without having to be root. Is that possible? Simplified GPU finding program below:
#include <stdio.h>
#include <OpenCL/opencl.h>
int main(int argc, char** argv) {
char dname[500];
size_t namesize;
cl_device_id devices[10];
cl_uint num_devices;
int d;
clGetDeviceIDs(0, CL_DEVICE_TYPE_ALL, 10, devices, &num_devices);
printf("%d devices found\n", num_devices);
for (d = 0; d < num_devices; ++d) {
clGetDeviceInfo(devices[d], CL_DEVICE_NAME, 500, dname, &namesize);
printf("Device #%d name = %s\n", d, dname);
}
return 0;
}
EDIT: I found essentially the same question being asked on nvidia's forums. Unfortunately, the only answer was of the form "this is the wrong forum".
Just yesterday I have logged in to my work computer (OS X 10.8.2) via SSH and opencl programm has worked well with GPU. I think, there is only one reason of your problem -- insufficient rights to access GPU hardware. Try to login as user with Administrator rights or run your programm via sudo.
What's the status of the machine when you're trying to ssh to it? With my macs, if only the login screen is showing, I can't ssh to it, and if my user account is logged in at the desktop, then a program invoked by ssh can access the gpu. I haven't tried to create a new user account on my machine yet. You may want to set up auto-login for your account and then just require a password to wake from screensaver. That should give you acceptable security and still ensure that your user account has access to the GPU.
I expect the GPU resource is owned by the desktop session (which is always present, even if to show the login screen), which is why it is not available to remote sessions. Forcing the issue by changing permissions is subverting the system and is bound to lead to problems.
Have you tried running Screen Sharing to remotely access the Mac rather than
ssh
? That way you can run the app on the desktop as normal, and see your results (potentially with some latency, depending on your network connection).I had the same issue under Ubuntu until I found this post: http://dhruba.name/2012/11/09/opencl-cookbook-running-remote-multi-gpu-opencl-computations-over-ssh-on-ubuntu-or-debian-using-amd-catalyst-drivers/
What worked for me was this line:
After I typed that on the remote ssh login, clinfo correctly displayed both my devices (CPU and GPU)
Have you tried being logged in locally AND remotely, at the same time? If the issue is that GPU ownership is tied to the local GUI console user, and you must access remotely via ssh, this should work; provided the computer will not be used by another user, displacing your local login.
Have you tried VNC? I know I need to use VNC to use the GPU on windows machines in the past. Remote desktop on Windows just won't work as it uses your local graphics card.