2010-07-16 6 views
0

J'ai un programme qui utilise le GPU pour effectuer certains calculs. Je peux obtenir le programme pour fonctionner correctement en utilisant la ligne de commande. Mais quand j'essaie d'exécuter la même déclaration via PHP, j'ai des problèmes. J'utilise wamp 2.0, et j'ai essayé les fonctions exec et proc_open pour essayer d'exécuter le programme, mais même si le processus démarre correctement, quand il s'agit de la partie GPU, le programme lui-même lève l'erreur "Shader n'est pas supporté par votre matériel". Le programme détecte également le type de carte graphique utilisé, mais cela ne se produit pas non plus.Exécution du programme GPGPU via WAMP

Pour être clair, je n'ai pas écrit le programme GPU. Et je peux exécuter la même déclaration directement à partir de la ligne de commande, mais pas à travers php. Quelle est la différence dans l'exécution d'une commande de PHP plutôt que directement? J'utilise une carte graphique NVIDIA GT8600. Toute aide serait géniale.

Dans le programme lorsqu'il recherche un fournisseur de carte graphique à l'aide de glGetString (GL_VENDOR), il obtient Microsoft Corporation au lieu de NVIDIA. Cela cause tous les problèmes, bien que je ne sache toujours pas pourquoi cela le fait seulement quand je l'exécute à partir de php. J'ai également essayé d'exécuter le script php en mode autonome à partir de la ligne de commande, et dans ce cas, ma carte graphique est détectée correctement et tout fonctionne correctement, seulement quand je passe par mon navigateur ne fonctionne pas.

+0

Ceci est plus probablement erreur avec le programme GPU. Avez-vous essayé de définir le répertoire de travail en PHP (lors de l'exécution) comme le même que celui que vous avez utilisé en ligne de commande? – mauris

+0

Oui je l'ai fait, j'ai aussi donné des chemins absolus partout, et comme je l'ai dit, le programme démarre, mais il ne peut tout simplement pas exécuter les parties GPU. Il effectue une vérification sur le GPU et revient avec une erreur disant que je ne peux pas supporter le shader. – Slartibartfast

+0

Se pourrait-il que l'utilisateur qui exécute le code PHP n'ait pas les bonnes permissions? Je ne connais presque rien à propos de Windows, mais sur Linux cela se produit lorsque votre utilisateur ne peut pas ouvrir/dev/nvidiactl. Il y a quelques informations sur ce genre de problème ici: http://www.nvnews.net/vbulletin/showthread.php?t=89965 Peut être un point de départ. –

Répondre

0

Après quelques recherches autour j'ai trouvé que le problème se pose en raison de la session 0 isolement dans Windows 7 (je me excuse humblement de ne pas mentionner Windows 7 dans la question)

L'essentiel de ce être, un processus initié par le Le service wampapache qui réside dans la session 0 ne peut pas accéder aux périphériques d'affichage (ce qui nécessite que mon service fasse partie de la session 1). Donc, mon code lors de l'appel du processus GPU est incapable de détecter ma carte graphique. Une façon de contourner ce problème est de générer un service dans la session 1, puis de laisser le processus s'exécuter. Il y a un bon fil dans les forums NVIDIA avec un exemple de code qui montre comment cela peut être fait.

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

Questions connexes