歡迎使用PyOpenCL的文檔!?

PyOpenCL使您可以方便地通過Pythonic訪問 OpenCL 并行計算API。是什么讓PyOpenCL與眾不同?

  • 對象清理綁定到對象的生存期。這個成語,常被稱為 RAII 在C++中,編寫更為正確的、無泄漏和無崩潰的代碼更容易。

  • 完整性。如果您愿意,PyOpenCL可以將OpenCL的API的全部功能交給您使用。每一個模糊的 get_info() 查詢和所有CL調用都是可訪問的。

  • 自動錯誤檢查。所有錯誤都會自動轉換為Python異常。

  • 速度。PyopCl的底層是用C++編寫的,所以上面的所有細節都是免費的。

  • 有用的文件。你在看。;

  • 自由許可證。PyOpenCL是 MIT license 免費供商業、學術和私人使用。

舉個例子,給你一個印象:

#!/usr/bin/env python

import numpy as np
import pyopencl as cl

a_np = np.random.rand(50000).astype(np.float32)
b_np = np.random.rand(50000).astype(np.float32)

ctx = cl.create_some_context()
queue = cl.CommandQueue(ctx)

mf = cl.mem_flags
a_g = cl.Buffer(ctx, mf.READ_ONLY | mf.COPY_HOST_PTR, hostbuf=a_np)
b_g = cl.Buffer(ctx, mf.READ_ONLY | mf.COPY_HOST_PTR, hostbuf=b_np)

prg = cl.Program(ctx, """
__kernel void sum(
    __global const float *a_g, __global const float *b_g, __global float *res_g)
{
  int gid = get_global_id(0);
  res_g[gid] = a_g[gid] + b_g[gid];
}
""").build()

res_g = cl.Buffer(ctx, mf.WRITE_ONLY, a_np.nbytes)
prg.sum(queue, a_np.shape, None, a_g, b_g, res_g)

res_np = np.empty_like(a_np)
cl.enqueue_copy(queue, res_np, res_g)

# Check on CPU with Numpy:
print(res_np - (a_np + b_np))
print(np.linalg.norm(res_np - (a_np + b_np)))
assert np.allclose(res_np, a_np + b_np)

(你可以找到這個例子 examples/demo.py 在PyOpenCL源代碼發行版中。)

教程?

使用或增強PyOpenCL的軟件?

  • Jon Roose's pyclblas (code) makes BLAS in the form of clBLAS available from within pyopencl code.

    兩個早期的包裝器仍然可用:一個由 Eric Hunsberger 一個接一個 Lars Ericson .

  • Cedric Nugteren為 CLBlast OpenCL BLAS庫: PyCLBlast .

  • 格雷戈瑟爾哈默的 gpyfft 為AMD的openclfft庫clFFT提供Python包裝器。

  • 博格丹奧潘丘克 reikna 提供各種基于GPU的算法(FFT、隨機數生成、矩陣乘法),用于 pyopencl.array.Array 物體。

  • Troels Henriksen、Ken Fris Larsen和Cosmin Oancea's Futhark 編程語言提供了一種很好的方法來編寫嵌套的并行程序,并對數據進行縮減和掃描 pyopencl.array.Array 實例。

  • Robbert Harms和Alard Roebroeck的 MOT 提供各種GPU支持的非線性優化算法和MCMC采樣例程,用于并行優化和多問題采樣。

如果你知道一個軟件,你覺得應該在這個名單上,請讓我知道,或者,更好的,發送一個補??!

目錄?

請注意,本指南沒有解釋OpenCL編程和技術。請向官方咨詢 Khronos OpenCL documentation 為此。

PyOpenCL也有自己的 web site ,您可以在其中找到更新、新版本、文檔和支持。