2012-09-16 51 views
0

如何在Mac OSX上使用Python加載OpenCL?無法在OSX上導入PyOpenCL(異常失敗)

輸出

Chriss-MacBook-Pro:phoenix2-phoenix-2c83ee6 chris$ python opencl.py 
[22:17:15] Python OpenCL Info v0.1 
[22:17:15] Python Version: 2.7.2 64bit 
[22:17:15] PyOpenCL Path: /Library/Python/2.7/site-packages/pyopencl-2012.1-py2.7-macosx-10.8-intel.egg/pyopencl 
[22:17:15] Boost Python Version: Not Found 
[22:17:15] Unable to load PyOpenCL! OpenCL not supported? 

源代碼,測試腳本。 (失敗線標記)

#!/usr/bin/python 
import sys 
import os 
import time 
from platform import architecture 
from imp import find_module 

timeformat = '%H:%M:%S' 
def getTimestamp(): 
    return '[%s] ' % time.strftime(timeformat, time.localtime(time.time())) 

def log(message): 
    print getTimestamp() + str(message) 

def getPythonVersion(): 
    info = sys.version_info 
    return str(info[0]) + '.' + str(info[1]) + '.' + str(info[2]) 

def getPyOpenCLPath(): 
    try: 
     file, pathname, descr = find_module('pyopencl') 
    except: 
     pathname = 'Not found' 
    return str(pathname) 

def getBoostVersion(input): 
    try: 
     contents = os.listdir(input) 
    except: 
     return 'Not Found' 
    for i in range(len(contents)): 
     if 'boost_python' in contents[i].lower(): 
      return contents[i] 
    return 'Not Found' 

path = getPyOpenCLPath() 

#Display global information 
log('Python OpenCL Info v0.1') 
log('Python Version: ' + getPythonVersion() + ' ' + architecture()[0]) 
log('PyOpenCL Path: ' + path) 
log('Boost Python Version: ' + getBoostVersion(path)) 

#Check for PyOpenCL not found 
if path == 'Not Found': 
    log('Exiting') 
    sys.exit() 

#Now we try to import PyOpenCL 
# THIS IS WHERE THE FAILURE OCCURS !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
try: 
    import pyopencl 
    import pyopencl.version 
except: 
    log('Unable to load PyOpenCL! OpenCL not supported?') 
    sys.exit() 

#Continue printing 
log('PyOpenCL Version: ' + pyopencl.VERSION_TEXT) 

#get platfroms 
try: 
    platforms = pyopencl.get_platforms() 
except: 
    log('Stupid bug') 

# If no platforms exist then no OpenCL supporting devices are present 
if len(platforms) == 0: 
    log('No OpenCL platforms found!') 
    sys.exit() 

log('Listing platforms and devices:') 
count = 0 

# Iterate through platforms 
for i,p in enumerate(platforms): 

    # Display platform 
    log('') 
    log('[cl:' + str(i) + '] ' + p.name.replace('\x00','').strip()) 

    # Get devices 
    devices = platforms[i].get_devices() 

    # Make sure we don't callback for a platform if no devices found 
    if len(devices) > 0: 
     # Iterate through devices 
     for j,d in enumerate(devices): 
      count += 1 
      log('  [cl:' + str(i) + ':' + str(j) + '] ' + d.name.replace('\x00','').strip()) 


log('') 
log('This program will exit in 300 seconds...') 
time.sleep(300) 
+0

切換嘗試,併發布有效的異常。它可能有一些更有趣的信息(缺少庫等)。 – pr0gg3d

+0

@ pr0gg3d我是新來的Python ...你的意思是刪除嘗試? – LamonteCristo

+0

正如在http://pastebin.com/KvHzpcwG中,它應該打印出真正的異常。 – pr0gg3d

回答

1

您的硬件是否支持OpenCL?在某些情況下,我發現通過嘗試運行構建並運行示例C程序來調試類似的問題更容易。

+0

我在MacBook Pro Retna上。我運行了BitMinter客戶端,它說它可以加載OpenCL(而OpenCL在老的Mac上根本不能工作)。我很新,所以任何援助將不勝感激。 – LamonteCristo

相關問題