2010-07-16 56 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