pyopencl 在 windows 上的安装及使用

<2022-05-07 周六>

pyopenclwindows上的安装及使用

因为pyopenclwindows上安装和使用不是想象中的那么容易,所以还是需要记录一下。

我的环境Python 3.10.4,按照pip install pyopencl的提示,先后安装了numpywheelmako,总之,提示缺啥安装啥,然后就不管在cmdpowershell还是在Developer Command Prompt for VS 2022中都没有安装成功pyopencl,一直提示:

src\wrap_cl.hpp(70): fatal error C1083: Cannot open include file: 'CL/cl.h': No such file or directory

最后在官网上找到了方法,从“Christoph Gohlke distributes binary wheels for PyOpenCL on Windows.”下载pyopencl-2022.1.3-cp310-cp310-win_amd64.whl解决:

PS D:\dnld> pip install .\pyopencl-2022.1.3-cp310-cp310-win_amd64.whl

这样就安装成功了。使用官网的例子测试一下:

#!/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)
knl = prg.sum  # Use this Kernel object for repeated calls
knl(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("res_np       : ", res_np)
print("(a_np + b_np): ", (a_np + b_np))
print(np.linalg.norm(res_np - (a_np + b_np)))
assert np.allclose(res_np, a_np + b_np)

运行效果:

PS D:\demos\t_pyopencl\demo> python.exe .\demo.py
Choose platform:
[0] <pyopencl.Platform 'Intel(R) OpenCL' at 0x1c89caa1e40>
Choice [0]:
Choose device(s):
[0] <pyopencl.Device 'Intel(R) HD Graphics 530' on 'Intel(R) OpenCL' at 0x1c89cb07160>
[1] <pyopencl.Device 'Intel(R) Core(TM) i5-6500 CPU @ 3.20GHz' on 'Intel(R) OpenCL' at 0x1c89c33df60>
Choice, comma-separated [0]:
Set the environment variable PYOPENCL_CTX=':' to avoid being asked again.
C:\Users\ysouyno\AppData\Local\Programs\Python\Python310\lib\site-packages\pyopencl\__init__.py:270: CompilerWarning: Non-empty compiler output encountered. Set the environment variable PYOPENCL_COMPILER_OUTPUT=1 to see more.
  warn("Non-empty compiler output encountered. Set the "
[0. 0. 0. ... 0. 0. 0.]
res_np       :  [1.3405421  0.803946   0.69187665 ... 0.9120757  0.5142325  0.5313911 ]
(a_np + b_np):  [1.3405421  0.803946   0.69187665 ... 0.9120757  0.5142325  0.5313911 ]
0.0
PS D:\demos\t_pyopencl\demo>

这里主要说明下PYOPENCL_CTX的环境变量设置,powershell的输出如下:

PS D:\demos\t_pyopencl\demo> $env:PYOPENCL_COMPILER_OUTPUT=1
PS D:\demos\t_pyopencl\demo> $env:PYOPENCL_CTX='0:0'
PS D:\demos\t_pyopencl\demo> python.exe .\demo.py
C:\Users\ysouyno\AppData\Local\Programs\Python\Python310\lib\site-packages\pyopencl\__init__.py:268: CompilerWarning: Built kernel retrieved from cache. Original from-source build had warnings:
Build on <pyopencl.Device 'Intel(R) HD Graphics 530' on 'Intel(R) OpenCL' at 0x1f43640f230> succeeded, but said:

fcl build 1 succeeded.
bcl build succeeded.

  warn(text, CompilerWarning)
[0. 0. 0. ... 0. 0. 0.]
res_np       :  [1.1701384  1.1061795  1.1798061  ... 0.99728197 0.5002522  1.80389   ]
(a_np + b_np):  [1.1701384  1.1061795  1.1798061  ... 0.99728197 0.5002522  1.80389   ]
0.0
PS D:\demos\t_pyopencl\demo> $env:PYOPENCL_CTX='0:1'
PS D:\demos\t_pyopencl\demo> python.exe .\demo.py
C:\Users\ysouyno\AppData\Local\Programs\Python\Python310\lib\site-packages\pyopencl\__init__.py:268: CompilerWarning: Built kernel retrieved from cache. Original from-source build had warnings:
Build on <pyopencl.Device 'Intel(R) Core(TM) i5-6500 CPU @ 3.20GHz' on 'Intel(R) OpenCL' at 0x1a9cda3ade0> succeeded, but said:

Compilation started
Compilation done
Linking started
Linking done
Device build started
Device build done
Kernel <sum> was successfully vectorized (8)
Done.
  warn(text, CompilerWarning)
C:\Users\ysouyno\AppData\Local\Programs\Python\Python310\lib\site-packages\pyopencl\__init__.py:268: CompilerWarning: From-binary build succeeded, but resulted in non-empty logs:
Build on <pyopencl.Device 'Intel(R) Core(TM) i5-6500 CPU @ 3.20GHz' on 'Intel(R) OpenCL' at 0x1a9cda3ade0> succeeded, but said:

Device build started
Device build done
Reload Program Binary Object.
  warn(text, CompilerWarning)
[0. 0. 0. ... 0. 0. 0.]
res_np       :  [0.3848073 1.6682227 1.1773763 ... 0.801935  1.1112832 1.5165817]
(a_np + b_np):  [0.3848073 1.6682227 1.1773763 ... 0.801935  1.1112832 1.5165817]
0.0
PS D:\demos\t_pyopencl\demo>

cmd的输出如下:

D:\demos\t_pyopencl\demo>set PYOPENCL_COMPILER_OUTPUT=1

D:\demos\t_pyopencl\demo>set PYOPENCL_CTX=0:0

D:\demos\t_pyopencl\demo>python demo.py
C:\Users\ysouyno\AppData\Local\Programs\Python\Python310\lib\site-packages\pyopencl\__init__.py:268: CompilerWarning: Built kernel retrieved from cache. Original from-source build had warnings:
Build on <pyopencl.Device 'Intel(R) HD Graphics 530' on 'Intel(R) OpenCL' at 0x1bc6e0b1250> succeeded, but said:

fcl build 1 succeeded.
bcl build succeeded.

  warn(text, CompilerWarning)
[0. 0. 0. ... 0. 0. 0.]
res_np       :  [0.6949563  1.1166335  0.57082427 ... 1.3923297  1.2337677  1.4651983 ]
(a_np + b_np):  [0.6949563  1.1166335  0.57082427 ... 1.3923297  1.2337677  1.4651983 ]
0.0

D:\demos\t_pyopencl\demo>set PYOPENCL_CTX=0:1

D:\demos\t_pyopencl\demo>python demo.py
C:\Users\ysouyno\AppData\Local\Programs\Python\Python310\lib\site-packages\pyopencl\__init__.py:268: CompilerWarning: Built kernel retrieved from cache. Original from-source build had warnings:
Build on <pyopencl.Device 'Intel(R) Core(TM) i5-6500 CPU @ 3.20GHz' on 'Intel(R) OpenCL' at 0x22c8a4e1b60> succeeded, but said:

Compilation started
Compilation done
Linking started
Linking done
Device build started
Device build done
Kernel <sum> was successfully vectorized (8)
Done.
  warn(text, CompilerWarning)
C:\Users\ysouyno\AppData\Local\Programs\Python\Python310\lib\site-packages\pyopencl\__init__.py:268: CompilerWarning: From-binary build succeeded, but resulted in non-empty logs:
Build on <pyopencl.Device 'Intel(R) Core(TM) i5-6500 CPU @ 3.20GHz' on 'Intel(R) OpenCL' at 0x22c8a4e1b60> succeeded, but said:

Device build started
Device build done
Reload Program Binary Object.
  warn(text, CompilerWarning)
[0. 0. 0. ... 0. 0. 0.]
res_np       :  [1.0808852  1.2096584  0.8938436  ... 0.35234842 0.3697133  0.88079625]
(a_np + b_np):  [1.0808852  1.2096584  0.8938436  ... 0.35234842 0.3697133  0.88079625]
0.0

D:\demos\t_pyopencl\demo>

注意powershellcmd的设置方法不一样:

SHELLENV
powershell$env:PYOPENCL_CTX=‘0:1’
cmdset PYOPENCL_CTX=0:1

:0表示platform:1表示device

为什么这个时候了还要去了解pyopencl的使用?因为python的代码更简洁,可以快速的测试kernel函数,减少开发周期,就像当年学习octave一样。

<think>好的,我现在需要帮助用户找到如何通过Anaconda安装Cartopy库的方法。首先,我应该回忆一下Anaconda的基本安装流程,以及常见的库安装方式。记得Anaconda通常使用conda命令来管理包,所以安装Cartopy很可能也是通过conda进行的。 用户的问题是关于Cartopy的安装,而Cartopy是一个用于地理数据可视化的库,可能需要依赖一些地理信息系统(GIS)相关的库,比如GEOS、PROJ等。这些依赖在Anaconda的仓库中应该都有预编译好的版本,所以使用conda安装会比较方便,避免自己编译带来的麻烦。 接下来,我需要确认正确的安装命令。通常,conda install package-name是最直接的命令。不过有时候可能包名和实际名称会有差异,比如大小写或者拼写不同。Cartopy的正确包名应该是cartopy,全部小写。所以用户可以使用conda install -c conda-forge cartopy。这里注意到conda-forge是一个常用的社区维护的channel,很多科学计算的包都会发布在这里,所以加上-c conda-forge参数来指定从conda-forge安装是必要的。 然后,用户可能需要验证安装是否成功。这时候可以通过启动Python环境,尝试导入cartopy库,如果没有报错,说明安装成功。如果有报错,可能需要检查依赖是否安装完整,或者是否有环境冲突的问题。例如,有时候已有的包版本可能与新安装的库不兼容,这时候可能需要创建一个新的conda环境来隔离安装。 另外,考虑到用户之前提到的其他引用,比如安装PyOpenCL或者处理Hugging Face连接问题,可能用户在使用过程中会遇到网络问题或者依赖缺失的情况。这时候可以建议用户检查网络连接,或者尝试使用离线安装的方式,但Cartopy通常通过conda安装会自动处理依赖,所以主要问题可能在于正确使用conda命令和指定正确的channel。 最后,生成相关问题的时候,需要围绕Cartopy的安装使用、常见问题以及与其他库的集成等方面来提问,这样用户如果有进一步的问题,可以自行参考或继续提问。例如,安装后的环境配置、与其他地理库的配合使用、常见错误处理等。</think>通过Anaconda安装Cartopy库的步骤如下: ### 步骤 1. 打开Anaconda命令行工具 - Windows系统:打开**Anaconda Prompt** - macOS/Linux:打开终端 ### 步骤 2. 创建新环境(可选,推荐) 为避免依赖冲突,建议创建独立环境: ```bash conda create -n cartopy_env python=3.9 conda activate cartopy_env ``` ### 步骤 3. 添加conda-forge通道 Cartopy及其依赖库(如PROJ、GEOS)需通过社区维护的conda-forge安装: ```bash conda config --add channels conda-forge conda config --set channel_priority strict ``` ### 步骤 4. 安装Cartopy 执行以下命令完成安装: ```bash conda install cartopy ``` 安装过程会自动解析依赖项,包括$shapely$、$proj$、$geos$等地理空间库[^1]。 ### 步骤 5. 验证安装Python环境中运行测试: ```python import cartopy print(cartopy.__version__) ``` 若无报错且输出版本号(如0.21.0),则安装成功[^3]。 ### 常见问题解决 1. **依赖冲突**:若出现`UnsatisfiableError`,尝试: ```bash conda clean --all conda update --all conda install cartopy --strict-channel-priority ``` 2. **离线安装**:若网络连接失败(如触发类似[^4]的报错),可下载预编译包: ```bash conda install cartopy --use-local /path/to/cartopy-package.tar.bz2 ``` ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值