ubuntu - 如何在 Ubuntu 上为 AMD Ryzen 移动 CPU 安装 opencl
问题描述
我有一台配备 AMD Ryzen 5 2500u(集成了 radeon vega 8 移动 GPU)处理器的笔记本,并使用 Ubuntu 18.04.2。我想在 CPU 和 GPU 上使用 C++ 运行一些 OpenCL 计算。我的问题是我不确定opencl如何识别cpu。
我已经从 amd 网站和 AMD APP SDK 3.0 安装了 amdgpu-pro。运行 clinfo 后,我得到以下输出:
平台数量 2
平台名称 Clover
平台供应商 Mesa
平台版本 OpenCL 1.1 Mesa 18.2.8
平台配置文件 FULL_PROFILE
平台扩展 cl_khr_icd
平台扩展功能后缀 MESA
平台名称 AMD 加速
并行处理平台供应商 Advanced Micro Devices, Inc.
平台版本 OpenCL 2.1 AMD-APP (2671.3)
平台配置文件 FULL_PROFILE
平台扩展 cl_khr_icd cl_amd_event_callback cl_amd_offline_devices
平台主机定时器分辨率 1ns
平台扩展功能后缀 AMD
平台名称 Clover
设备数量 1
设备名称 AMD RAVEN(DRM 3.26.0、4.18.0-16-generic、LLVM 7.0.0)
设备供应商 AMD
设备供应商 ID 0x1002
设备版本 OpenCL 1.1 Mesa 18.2.8
驱动程序版本 18.2.8
设备 OpenCL C 版本 OpenCL C 1.1
设备类型 GPU
设备配置文件 FULL_PROFILE
可用设备 是
编译器可用 是
最大计算单元 8
最大时钟频率 1100MHz
最大工作项尺寸 3
最大工作项尺寸 256x256x256
最大工作组大小 256
首选工作组大小倍数 64
首选/原生向量大小
char 16 / 16
short 8 / 8
int 4 / 4
long 2 / 2
half 8 / 8 (cl_khr_fp16) float 4 / 4
double 2 / 2 (cl_khr_fp64)半精度浮点支持 (cl_khr_fp16)
...
平台名称 AMD 加速并行处理
设备数量 1
设备名称 gfx902
设备供应商 Advanced Micro Devices, Inc.
设备供应商 ID 0x1002
设备版本 OpenCL 1.2 AMD-APP (2671.3)
驱动程序版本 2671.3(PAL、HSAIL)
设备 OpenCL C 版本 OpenCL C 1.2
设备类型 GPU
设备板名称 (AMD) 未知 AMD GPU
设备拓扑 (AMD) PCI-E,05:00.0
设备配置文件 FULL_PROFILE
…………
NULL 平台行为
clGetPlatformInfo(NULL, CL_PLATFORM_NAME, ...) 无平台
clGetDeviceIDs(NULL, CL_DEVICE_TYPE_ALL, ...) 无平台
clCreateContext(NULL, ...) [默认] 无平台
clCreateContext(NULL, ...) [其他] 成功 [MESA]
clCreateContextFromType(NULL, CL_DEVICE_TYPE_DEFAULT) 成功 (1)
Platform Name Clover Device Name AMD RAVEN (DRM 3.26.0, 4.18.0-16-generic, LLVM 7.0.0)
clCreateContextFromType(NULL, CL_DEVICE_TYPE_CPU) 在平台中找不到设备
clCreateContextFromType(NULL, CL_DEVICE_TYPE_GPU) 成功 (1)
Platform Name Clover Device Name AMD RAVEN (DRM 3.26.0, 4.18.0-16-generic, LLVM 7.0.0)
clCreateContextFromType(NULL, CL_DEVICE_TYPE_ACCELERATOR) 在平台中找不到设备
clCreateContextFromType(NULL, CL_DEVICE_TYPE_CUSTOM) 在平台中找不到设备
clCreateContextFromType(NULL, CL_DEVICE_TYPE_ALL) 成功 (1)
Platform Name Clover Device Name AMD RAVEN (DRM 3.26.0, 4.18.0-16-generic, LLVM 7.0.0)
带有设备“AMD RAVEN (DRM 3.26.0, 4.18.0-16-generic, LLVM 7.0.0)”的第一个平台“Clover”的设备类型为“GPU”,而带有设备“gfx902”的第二个平台似乎也成为我系统的 GPU。
所以我的问题是:我必须安装什么才能让opencl也识别我系统的cpu?
感谢您的帮助!
解决方案
将 CPU 与 OpenCL 一起使用自然需要支持 CPU 的 OpenCL 实现。特别是POCL应该可用。AMD 似乎已经放弃了他们的 CPU OpenCL 实施,而英特尔声称他们的实施仅适用于他们品牌的处理器。
顺便说一句,如果尝试将工作自动分配到所有设备,则为同一设备(例如 Clover 和 APP)混合 OpenCL 实现可能会产生令人惊讶的结果。如果您可以指定要使用的设备应该没问题。
推荐阅读
- azure - 使用 Xamarin Forms 从 Azure SQL 数据库中选择表
- python - 告知 sympy 变量之间的不等式
- html - ANKI CSS/HTML:如何在右下角的浏览器“位置:固定”中制作标签,标签不重叠?
- javascript - Javascript:刷新父窗口后如何获取对子窗口对象的引用
- git - 为什么我的 git repo 有两个别名?
- c# - System.Linq.Dynamic.Core - 错误消息:“目标对象不是 ExpandoObject”
- amazon-web-services - 如何识别 AWS Lambda 是使用 AWS CDK 创建的?
- asp.net-core - 在 IIS 中托管 ASP.Net Core MVC 应用程序时出现 HTTP 500 错误
- scala - Prohibit generating of apply for case class
- python - scipy 版本可以改变 scipy.interpolate.griddata 结果吗?