我有使用OpenCL C内核代码的PyOpenCL代码.我运行我的应用程序时捕获分段错误错误.如何使用某些调试器或其他一些开发工具调试此类错误?我不知道究竟要做什么来找出问题所在.我想到选择printf或什么,但我想使用更强大的东西.
我相信内核代码中的错误,所以我想先调试内核代码.
UPD.我在linux(Arch Linux,3.6.11),python 2或3,PyOpenCl 2012.1上
我曾在几个项目中使用OpenCL,但始终将内核编写为一个(有时候相当大)的函数.现在我正在开发一个更复杂的项目,并希望在几个内核之间共享功能.
但是我可以找到的示例都将内核显示为单个文件(甚至很少调用辅助函数).似乎应该可以使用多个文件 - clCreateProgramWithSource()接受多个字符串(并假设它们结合起来) - 尽管pyopencl Program()只需要一个源.
所以我希望听到任何有这方面经验的人:
谢谢.
我有一台配备 AMD 处理器的 MacBook Pro,我想在这个 GPU 中运行 Keras(Tensorflow 后端)。我开始知道 Keras 只适用于 NVIDIA GPU。解决方法是什么(如果可能)?
我最近发现了GP-GPU(通用图形处理单元)的强大功能,并希望利用它在一台机器上执行"繁重"的科学和数学计算(否则需要大型CPU集群).
我知道有几个接口可以在GPU上运行,其中最突出的是CUDA和OpenCL.后者具有防止CUDA在大多数显卡(NVIDIA,AMD,Intel)上运行的优势,而不仅仅是NVIDA卡.在我的情况下,我有一个普通的Intel 4000 GPU似乎与OpenCL很好地合作.
现在,我需要学习如何使用PyOpenCL来进一步操作!所以这里有一个问题:
我怎样才能开始使用PyOpenCL?有什么先决条件?我真的需要有Python和/或OpenCL的经验吗?
我的背景是在fortran中,事实上我需要将冗长的fortran代码翻译并并行化为python(或pyopencl),主要处理PDE和对角化矩阵.
我已阅读了两个相关网站http://enja.org/2011/02/22/adventures-in-pyopencl-part-1-getting-started-with-python/和http://documen.tician.de/ pyopencl /但它们对新手(即假人)并没有真正的帮助.
我只是不知道该怎么做.我不想成为该领域的专家,只是为了了解如何在pyopencl上并行化简单的数学和线性代数.
任何建议和帮助都非常欢迎!
该数学函数的目的是使用二面角计算两个(或更多)蛋白质结构之间的距离:
例如,它在结构生物学中非常有用.我已经使用numpy在python中编写了这个函数,但目标是实现更快.作为计算时间参考,我使用scikit-learn包中提供的欧几里德距离函数.
这是我目前的代码:
import numpy as np
import numexpr as ne
from sklearn.metrics.pairwise import euclidean_distances
# We have 10000 structures with 100 dihedral angles
n = 10000
m = 100
# Generate some random data
c = np.random.rand(n,m)
# Generate random int number
x = np.random.randint(c.shape[0])
print c.shape, x
# First version with numpy of the dihedral_distances function
def dihedral_distances(a, b):
l = 1./a.shape[0]
return np.sqrt(l* np.sum((0.5)*(1. - np.cos(a-b)), axis=1))
# Accelerated version with numexpr
def dihedral_distances_ne(a, b):
l = …Run Code Online (Sandbox Code Playgroud) 我想下载适用于 Windows 和 Linux 的 OpenCL AMD APP SDK 3.0 的独立版本。
让
import pyopencl as cl
import pyopencl.array as cl_array
import numpy
a = numpy.random.rand(50000).astype(numpy.float32)
mf = cl.mem_flags
Run Code Online (Sandbox Code Playgroud)
有什么区别
a_gpu = cl.Buffer(self.ctx, mf.READ_ONLY | mf.COPY_HOST_PTR, hostbuf=a)
Run Code Online (Sandbox Code Playgroud)
和
a_gpu = cl_array.to_device(self.ctx, self.queue, a)
Run Code Online (Sandbox Code Playgroud)
?
有什么区别
result = numpy.empty_like(a)
cl.enqueue_copy(self.queue, result, result_gpu)
Run Code Online (Sandbox Code Playgroud)
和
result = result_gpu.get()
Run Code Online (Sandbox Code Playgroud)
?
我想知道在函数使用之前是否有办法检查可用的GPU内存量.我的代码通常使用1.5 GB或更多的GPU内存,如果我的程序想要使用它时其他东西正在使用GPU,我会得到一个MemoryError异常或类似的东西.
我想实现某种代码,以便我可以检查GPU是否有足够的可用内存,如果有,请继续运行,但如果没有,请等到它可用.
(最好,我想在尝试使用GPU之前检查,而不是使用try-except循环,只是在失败时重试)
我检查了PyOpenCL文档,看看device_info下是否有相关内容,但我找不到任何实际的描述.
我为我的GPU安装了最新的CUDA和驱动程序.我在Win7 64bit上使用Python 2.7.10.我尝试从以下位置安装pyopencl:
a.http://www.lfd.uci.edu/~gohlke/pythonlibs/#pyopencl上的非官方Windows二进制文件
b.从https://pypi.python.org/pypi/pyopencl获取源代码后编译自己的代码
两种情况下安装都成功但我尝试导入后会收到相同的错误消息:
>>> 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.
>>>
Run Code Online (Sandbox Code Playgroud)
我有Visual C++可再发行从安装Visual Studio 2015年https://www.microsoft.com/en-us/download/details.aspx?id=48145.
我还尝试了2种不同版本的GPU驱动程序(包括最新版本).一样.很多人似乎都得到了相同的错误,在一些论坛上,我通过将GPU驱动程序更新到最新版本来阅读,它运行正常.但不适合我.
谁知道如何解决这个问题?
在Mac上支持OpenCL 将在macOS 10.15中结束,因此人们投资PyOpenCL + OpenCL作为进行通用GPU(+ CPU)计算的手段很快就会开始失去一个关键平台.
所以我的问题是: