无法在OSX上导入PyOpenCL(异常失败)

时间:2012-09-16 02:22:49

标签: python macos osx-mountain-lion pyopencl

如何在Mac OSX上使用Python加载OpenCL?

输出

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)

1 个答案:

答案 0 :(得分:1)

您的硬件是否支持OpenCL?在某些情况下,我发现通过尝试运行构建和运行示例C程序来调试类似问题更容易。