我有一个程序,它使用GPU来执行某些计算。我可以使用命令行让程序正确运行。但是,当我试图通过PHP执行相同的语句时,我遇到了麻烦。
我使用的是wamp2.0,我已经尝试了exec和proc_open函数来尝试让程序运行,但即使进程正确启动,当涉及到GPU部分时,程序本身也会引发错误,“你的硬件不支持着色器”。该程序最初还检测正在使用的图形卡的类型,但这也没有发生。
需要说明的是,我还没有编写GPU程序。我可以直接从命令行运行相同的语句,但不能通过php。从php执行命令和直接执行命令有什么不同?
我使用的是英伟达GT8600显卡。任何帮助都是最好的。
在程序中,当它使用glGetString(GL_VENDOR)检查显卡供应商时,它会得到微软公司而不是NVIDIA。这导致了所有的问题,尽管我仍然不知道为什么只有当我在php中运行它时才会这样做。
我也试过从命令行独立运行php脚本,在这种情况下,我的显卡被正确检测到,一切都运行正常,只有当我通过我的浏览器时,它才不起作用。
发布于 2010-07-20 01:51:06
在深入研究之后,我发现这个问题是由于Windows7中的会话0隔离引起的(我很抱歉在问题中没有提到Windows7)
它的要点是,驻留在会话0中的wampapache服务启动的任何进程都无法访问显示设备(这要求我的服务是会话1的一部分)。因此,在调用GPU进程时,我的代码无法检测到我的图形卡。
解决这个问题的一种方法是在会话1中产生一个服务,然后让它执行进程。在NVIDIA论坛上有一个很好的帖子,以及一些示例代码,展示了如何做到这一点。
http://forums.nvidia.com/index.php?showtopic=93450&pid=1047458&mode=threaded&start=#entry1047458
https://stackoverflow.com/questions/3261716
复制相似问题