2010-07-16 52 views
0

我有一个使用GPU执行某些计算的程序。我可以让程序使用命令行正确运行。但是当我尝试通过PHP执行相同的声明时,我遇到了麻烦。通过WAMP执行GPGPU程序

我正在使用wamp 2.0,并且我尝试了exec和proc_open函数来试图让程序运行,但即使进程正确启动,当涉及到GPU部分时,程序本身也会引发错误“Shader不支持你的硬件”。该程序最初还会检测正在使用的图形卡的种类,但这种情况也不会发生。

要说清楚,我还没有编写GPU程序。我可以直接从命令行运行相同的语句,但不能通过php。从php执行命令而不是直接执行命令有什么不同?

我正在使用NVIDIA GT8600图形卡。任何帮助都很好。

在使用glGetString(GL_VENDOR)检查显卡供应商的程序中,它获得了微软公司而不是NVIDIA。这是造成所有问题,但我仍然不知道为什么只有当我从PHP运行它时才这样做。

我也试过从命令行单独运行php脚本,在这种情况下,我的图形卡被正确检测到,一切正常,只有当我通过浏览器浏览器不工作。

+0

这更可能是GPU程序的错误。您是否尝试在PHP中设置工作目录(执行时),与您在命令行中使用的目录相同? – mauris 2010-07-16 03:28:52

+0

是的,我做过,我也给了绝对的路径,就像我说的,程序确实开始,但它只是无法运行GPU部件。它在GPU上执行检查,并返回错误信息,说我无法支持着色器。 – Slartibartfast 2010-07-16 03:56:49

+0

执行PHP代码的用户是否缺少正确的权限?我几乎不了解Windows,但在Linux上,当用户无法打开/ dev/nvidiactl时会发生这种情况。这里有一些关于这种问题的信息: http://www.nvnews.net/vbulletin/showthread.php?t=89965 MIght是一个起点。 – 2010-07-17 18:27:22

回答

0

经过一番周围挖我发现这个问题的出现是由于在Windows 7中的会话0隔离

它是的要点(我谦恭地没有提及的问题,Windows 7的道歉),由发起的任何进程驻留在会话0中的wampapache服务无法访问显示设备(这需要我的服务成为会话1的一部分)。所以我的代码在调用GPU进程时无法检测到我的图形卡。

解决此问题的一种方法是在会话1中产生一个服务,然后让它执行该过程。 NVIDIA论坛中有一个很好的主题,以及一些示例代码,展示了如何实现这一点。

http://forums.nvidia.com/index.php?showtopic=93450&pid=1047458&mode=threaded&start=#entry1047458