当我在控制台登录时,我的OpenCL程序可以找到GPU设备,但是当我使用ssh远程登录时却找不到。此外,如果我在ssh会话中以root身份运行程序,程序可以找到GPU。
计算机是带有GeForce 9400 GPU的Snow Leopard Mac。
如果我从控制台或以root身份运行程序(见下文),输出如下(注意“GeForce 9400”行):
2 devices found
Device #0 name = GeForce 9400
Device #1 name = Intel(R) Core(TM)2 Duo CPU P8700 @ 2.53GHz
但如果只是我,通过ssh,没有GeForce 9400条目:
1 devices found
Device #0 name = Intel(R) Core(TM)2 Duo CPU P8700 @ 2.53GHz
我想在GPU上测试我的代码,而不必是root。那可能吗?简化的GPU查找程序如下:
#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;
}
编辑:我发现在nvidia's forums上提出的问题基本相同。不幸的是,唯一的答案是“这是错误的论坛”。
答案 0 :(得分:3)
我希望GPU资源由桌面会话拥有(即使显示登录屏幕也始终存在),这就是远程会话无法使用的原因。通过更改权限来强制解决问题会破坏系统,并且必然会导致问题。
您是否尝试过运行屏幕共享以远程访问Mac而不是ssh
?这样您就可以正常在桌面上运行应用程序,并查看结果(可能会有一些延迟,具体取决于您的网络连接)。
答案 1 :(得分:2)
在Windows上,根据this forum thread,似乎无法远程访问GPU。
这篇文章是关于Windows而不是Mac,因此没有直接解决这个问题。由于还没有人提供任何答案,所以这是我迄今为止发现的最相关的信息。
答案 2 :(得分:2)
我在Ubuntu下遇到了同样的问题,直到找到这篇文章: http://dhruba.name/2012/11/09/opencl-cookbook-running-remote-multi-gpu-opencl-computations-over-ssh-on-ubuntu-or-debian-using-amd-catalyst-drivers/
对我来说有用的是这条线:
export COMPUTE=:0
在远程ssh登录中输入后, clinfo 正确显示了我的设备(CPU和GPU)
答案 3 :(得分:1)
当您尝试ssh时,机器的状态是什么?使用我的mac,如果只显示登录屏幕,我就不能ssh到它,如果我的用户帐户登录桌面,那么ssh调用的程序可以访问gpu。我还没有尝试在我的机器上创建新的用户帐户。您可能需要为您的帐户设置自动登录,然后只需要一个密码即可从屏幕保护程序中唤醒。这应该为您提供可接受的安全性,并且仍然确保您的用户帐户可以访问GPU。
答案 4 :(得分:1)
你试过VNC吗?我知道我需要使用VNC在过去的Windows机器上使用GPU。 Windows上的远程桌面无法使用本地图形卡。
答案 5 :(得分:0)
您是否曾尝试同时在本地和远程登录?如果问题是GPU所有权与本地GUI控制台用户绑定,并且您必须通过ssh远程访问,这应该可行;如果其他用户不会使用该计算机,则取代您的本地登录。
答案 6 :(得分:0)
尝试使用sudo。 GPU只是操作系统的另一种设备。
答案 7 :(得分:0)
就在昨天,我已经通过SSH登录到我的工作计算机(OS X 10.8.2),opencl programm与GPU配合得很好。我认为,问题只有一个原因 - 访问GPU硬件的权利不足。尝试以具有管理员权限的用户身份登录或通过sudo运行您的程序。
答案 8 :(得分:-2)
好的,我不知道Jack关于Snow Leopard还是OpenCL,但是......
我听说Mac桌面基于XWindows的版本。 在这种情况下,这篇文章: http://developer.amd.com/support/KnowledgeBase/Lists/KnowledgeBase/DispForm.aspx?ID=19 其中讨论了“如何修改安全设置以允许远程会话访问系统上运行的X服务器”。 可能有帮助。
由于那篇文章是关于ATI Stream应用程序(而不是OpenCL)和Linux(而不是MacOS),它可能没什么帮助,但请自己看看并判断。