#opencl #api #api-bindings #gpgpu #gpu #ffi

cl3

Khronos OpenCL 3.0 API及其扩展的Rust实现

39个版本

0.10.0 2024年3月31日
0.9.5 2023年12月22日
0.9.4 2023年11月5日
0.9.2 2023年7月30日
0.1.3 2020年12月31日

#50 in 图形API

Download history 753/week @ 2024-04-21 501/week @ 2024-04-28 708/week @ 2024-05-05 583/week @ 2024-05-12 551/week @ 2024-05-19 544/week @ 2024-05-26 548/week @ 2024-06-02 543/week @ 2024-06-09 432/week @ 2024-06-16 488/week @ 2024-06-23 226/week @ 2024-06-30 288/week @ 2024-07-07 414/week @ 2024-07-14 424/week @ 2024-07-21 664/week @ 2024-07-28 519/week @ 2024-08-04

2,056每月下载量
31个包中使用(通过opencl3

Apache-2.0

390KB
8K SLoC

cl3

crates.io docs.io OpenCL 3.0 License Rust

Khronos OpenCL API的Rust适配器。

描述

基于opencl-sys OpenCL FFI绑定的Khronos OpenCL 3.0 C API的函数式、安全Rust接口。
它是opencl3包的基础,该包提供了一种更简单、基于对象的OpenCL 3.0 API模型。

OpenCL 3.0 是一个统一规范,对之前版本的OpenCL功能增加很少。
它规定所有 OpenCL 1.2 功能是 强制性的,而所有OpenCL 2.x和3.0功能现在是可选的。

OpenCL还有扩展,允许其他功能,如OpenGL和DirectX互操作性,请参阅 OpenCL扩展。此库包含FFI绑定以使用OpenCL扩展。

设计

此包应用了 适配器模式,将OpenCL C API函数转换为返回包含C函数所需结果的Rust函数,或OpenCL错误代码的Result。唯一的例外是 svm_free,它只提供对 clSVMFree C API函数的安全包装。

大多数模块都以其在cl.h中对应的"API"部分命名。它们包含Rust适配器函数,用于那些部分中定义的OpenCL API C函数及其相关类型和常量。
更多信息请参阅Rust 文档

OpenCL 版本和扩展的 API 由 Rust 特性如 "CL_VERSION_2_0" 和 "cl_khr_gl_sharing" 控制。要启用 OpenCL 版本,必须启用该版本的特性以及 所有 前一个版本的 OpenCL 特性,例如对于 "CL_VERSION_2_0";"CL_VERSION_1_1" 和 "CL_VERSION_1_2" 也必须启用。

默认特性为 "CL_VERSION_1_1" 和 "CL_VERSION_1_2"。

Rust 会对由启用的 OpenCL 版本废弃的 OpenCL API 函数发出弃用警告,例如,当启用 "CL_VERSION_2_0" 时,clCreateCommandQueue 被弃用。

使用

确保已安装 OpenCL 可安装客户端驱动程序(ICD)和相应的 OpenCL 硬件驱动程序,请参阅 OpenCL 安装

cl3 默认支持 OpenCL 1.2 和 2.0 ICD 加载器。如果您有 OpenCL 2.0 ICD 加载器,请在您的项目 Cargo.toml 中添加以下内容

[dependencies]
cl3 = "0.9"

如果您的 OpenCL ICD 加载器支持更高版本的 OpenCL,则向 cl3 添加相应的特性,例如,对于 OpenCL 2.1 ICD 加载器,请在您的项目 Cargo.toml 中添加以下内容而不是

[dependencies.cl3]
version = "0.9"
features = ["CL_VERSION_1_1", "CL_VERSION_1_2", "CL_VERSION_2_0", "CL_VERSION_2_1"]

可以通过添加其特性来启用 OpenCL 扩展,例如。

[dependencies.cl3]
version = "0.9"
features = ["cl_khr_gl_sharing", "cl_khr_dx9_media_sharing"]

无论您使用哪个版本的 OpenCL ICD 加载器,请将以下内容添加到您的 crate 根目录(lib.rsmain.rs)中

extern crate cl3;

测试

该包包含单元、文档和集成测试。
测试运行平台和设备信息函数(等等),因此它们可以提供有关系统 OpenCL 功能的有用信息。

建议以单线程模式运行测试,因为其中一些在多线程运行时可能会相互干扰,例如。

cargo test -- --test-threads=1 --show-output

集成测试被标记为 ignore,因此请使用以下命令运行它们

cargo test -- --test-threads=1 --show-output --ignored

示例

测试提供了如何使用该包的示例,例如:请参阅 platformdevicecontextintegration_test

贡献

如果您想通过代码或文档进行贡献,请从 贡献指南 开始。如果您有任何问题,请随时提出。只是请遵守我们的 行为准则

许可

根据 Khronos Group OpenCL,许可为 Apache License,Version 2.0。
您可以在以下位置获得许可证的副本:https://apache.ac.cn/licenses/LICENSE-2.0

除非您明确说明,否则您有意提交以供包含在您的工作中的任何贡献,根据 Apache-2.0 许可证定义,应按上述方式许可,不附加任何额外条款或条件。

OpenCL 和 OpenCL 标志是 Apple Inc. 的商标,由 Khronos Group 许可使用。

依赖关系

~0.6–1.1MB
~26K SLoC