【问题标题】:Executing GPGPU program through WAMP通过 WAMP 执行 GPGPU 程序
【发布时间】:2010-07-16 03:23:56
【问题描述】:

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

我使用的是 wamp 2.0,我尝试了 exec 和 proc_open 函数来尝试让程序运行,但是即使进程正确启动,当涉及到 GPU 部分时,程序本身也会提高错误,“您的硬件不支持着色器”。该程序最初还会检测正在使用的显卡类型,但也没有发生这种情况。

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

我使用的是 NVIDIA GT8600 显卡。任何帮助都会很棒。

在程序中,当它使用 glGetString(GL_VENDOR) 检查显卡供应商时,它会获取 Microsoft Corporation 而不是 NVIDIA。这导致了所有问题,尽管我仍然不知道为什么只有当我从 php 运行它时才会这样做。

我也尝试过从命令行独立运行 php 脚本,在这种情况下,我的显卡被正确检测到并且一切正常,只有当我通过浏览器时它才不起作用。

【问题讨论】:

  • 这很可能是 GPU 程序的错误。您是否尝试将 PHP 中的工作目录(执行时)设置为与您在命令行中使用的相同?
  • 是的,我做到了,我还在各处给出了绝对路径,就像我说的,程序确实启动了,但它只是无法运行 GPU 部分。它在 GPU 上执行检查并返回一个错误,说我不能支持着色器。
  • 会不会是执行PHP代码的用户缺少正确的权限?我对 Windows 几乎一无所知,但在 Linux 上,当您的用户无法打开 /dev/nvidiactl 时,就会发生这种情况。这里有一些关于这类问题的信息:nvnews.net/vbulletin/showthread.php?t=89965 可能是一个起点。

标签: php opengl exec wamp gpgpu


【解决方案1】:

经过一番挖掘,我发现问题是由于 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-05
    • 1970-01-01
    相关资源
    最近更新 更多