2015-11-03 36 views
6

Ho installato l'ultimo CUDA e il driver per la mia GPU. Sto usando Python 2.7.10 su Win7 a 64 bit. Ho provato a installare pyopencl da:Caricamento Python Pyopencl DLL fallito anche con i driver più recenti

a. i binari non ufficiali di Windows a http://www.lfd.uci.edu/~gohlke/pythonlibs/#pyopencl

b. compilando la mia dopo aver ottenuto le fonti da https://pypi.python.org/pypi/pyopencl

L'installazione ha avuto successo su entrambi i casi, ma ottengo lo stesso messaggio di errore una volta che cerco di importarlo:

>>> import pyopencl 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "C:\Python27\lib\site-packages\pyopencl-2015.1-py2.7-win-amd64.egg\pyope 
cl\__init__.py", line 30, in <module> 
    import pyopencl._cl as _cl 
ImportError: DLL load failed: The specified procedure could not be found. 
>>> 

ho Visual C++ Redistributable for Visual Studio 2015 installato da https://www.microsoft.com/en-us/download/details.aspx?id=48145.

Ho anche provato con 2 versioni diverse del driver GPU (incluso l'ultimo). Stessa cosa. Un sacco di gente sembra avere lo stesso errore e su alcuni forum ho letto che aggiornando i driver della GPU alla fine, funziona perfettamente. Ma non per me.

Qualcuno sa come risolvere questo problema?

+0

si sono seguite questo link per installare il PyOpenCL: [installazione PyOpenCL su Windows] (https: // wiki.tik er.net/PyOpenCL/Installation/Windows)? – Jon

risposta

1

Ho paura che non ci sia una risposta giusta a questo problema. Ogni caso è diverso. Dipende da cosa è installato nel sistema operativo. Per rintracciare tali problemi normalmente utilizzo Dependency Walker.

In questo caso specifico aprivo _cl.pyd (di solito in C:\Python27\Lib\site-packages\pyopencl) in Dependency Walker per controllare se non ci sono dipendenze mancanti o se per esempio OpenCL.dll è in realtà quella che dovrebbe essere usato. OpenCL.dll può essere installato da altri programmi e il loro percorso aggiunto a PATH. Anche OpenCL.dll in System32 potrebbe essere troppo vecchio. Fondamentalmente, è possibile rinviare a tutti gli errori, tranne uno, OpenCL.dll in OpenCL.dll.bak e/o rimuovere i percorsi da PATH.

2

Ho avuto lo stesso problema e ho scoperto che era causato da AMD OpenCL.dll che non aveva una funzione introdotta in OpenCL 2.1. Il sito Gohlke ha solo OpenCL 2.1 e 1.2, mentre i driver AMD supportano 2.0.

Perché volevo 2.0, la soluzione più semplice era quella di sostituire manualmente AMD System32/OpenCL.dll con quello di Intel SDK con supporto sperimentale 2.1.

+0

Wow, come sapevi che stavo usando le librerie di Gohlke? ;) Inoltre, l'installazione della versione pyOpenCL 1.2 funziona. –

0

Provate entrambe le versioni 1.2 e 2.1 con cui stavo provando più tardi e ho riscontrato questo problema. Cambiato il funzionamento e funziona, ma ha utilizzato la GPU Intel. NVidia OpenCL.dll è 2.0 e non funziona ancora.

appena controllato la matrice cl.get_platforms e giudicano 0. Intel 1. NVidia

  1. pyopencl.Platform Intel (R) OpenCL & pyopencl.Device Intel (R) core (TM) .. . Intel (R) OpenCL
  2. pyopencl.Platform NVIDIA CUDA & pyopencl.Device Quadro ... NVIDIA CUDA