30个版本 (19个重大更新)

0.19.7 2024年3月27日
0.19.6 2023年11月9日
0.19.5 2023年10月9日
0.19.4 2022年8月23日
0.2.0 2015年11月19日

#18 in 科学

Download history 1343/week @ 2024-04-20 825/week @ 2024-04-27 1224/week @ 2024-05-04 1044/week @ 2024-05-11 1164/week @ 2024-05-18 981/week @ 2024-05-25 1016/week @ 2024-06-01 1091/week @ 2024-06-08 1320/week @ 2024-06-15 1348/week @ 2024-06-22 1035/week @ 2024-06-29 987/week @ 2024-07-06 1122/week @ 2024-07-13 1279/week @ 2024-07-20 1274/week @ 2024-07-27 919/week @ 2024-08-03

4,640 每月下载量
用于 43 个Crates (35 个直接使用)

MIT/Apache

1MB
22K SLoC

ocl

Supported platforms Linux Build Status

Rust提供的纯OpenCL™绑定和接口。

目标

提供

  • 一个简单直观的OpenCL设备接口
  • OpenCL API的完整功能和力量
  • 极少的模板代码
  • 零或几乎零的性能开销
  • 线程安全和自动管理API指针和资源

使用

确保您的平台已安装OpenCL库,并且clinfo或某些其他诊断命令可以运行。将以下内容添加到您的项目Cargo.toml

[dependencies]
ocl = "0.19"

并将以下内容添加到您的crate根目录(lib.rs或main.rs)

extern crate ocl;

示例

来自examples/trivial.rs

extern crate ocl;
use ocl::ProQue;

fn trivial() -> ocl::Result<()> {
    let src = r#"
        __kernel void add(__global float* buffer, float scalar) {
            buffer[get_global_id(0)] += scalar;
        }
    "#;

    let pro_que = ProQue::builder()
        .src(src)
        .dims(1 << 20)
        .build()?;

    let buffer = pro_que.create_buffer::<f32>()?;

    let kernel = pro_que.kernel_builder("add")
        .arg(&buffer)
        .arg(10.0f32)
        .build()?;

    unsafe { kernel.enq()?; }

    let mut vec = vec![0.0f32; buffer.len()];
    buffer.read(&mut vec).enq()?;

    println!("The value at index [{}] is now '{}'!", 200007, vec[200007]);
    Ok(())
}

有关此库如何利用Rust的无成本抽象提供简单包装中的C API的全部功能和性能的更多信息,请参阅examples/trivial.rs的其余部分。

OpenCL简介

有关OpenCL基本知识的快速而全面的入门,请参阅Matthew Scarpino在drdobbs.com上的优秀文章《OpenCL入门》(他的书籍也非常好)。

深入探索

已经熟悉标准OpenCL核心API?请参阅ocl-core crate,以使用传统的API风格和Rust的安全性和便利性访问完整的特性集。

版本支持

支持OpenCL版本1.1及以上。由于OpenCL版本1.0固有的线程不安全性,不支持该版本。

Vulkan™和未来

OpenCL API 已经拥有了 Vulkan API 的所有新特性,例如低开销、高性能和无限制的硬件访问。在实际应用中,Vulkan 可以说是 OpenCL 特性的一个以图形为重点的超集(某种程度上是这样)。OpenCL 2.1+ 和 Vulkan 核/着色器现在都可以编译成 SPIR-V,使得设备端的处理相同。如果大多数驱动程序供应商将这两个主机 API 实现得完全相同,我也不会感到惊讶。

将来,这两种技术可能会完全合并(或者 Vulkan 会吸收 OpenCL)。无论发生什么,与这个库的前端无关,一切都不会改变。这个库将保持其关注计算方面的特性。

许可证

根据以下任意一种许可证授权:

由您选择。

贡献

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


“OpenCL 和 OpenCL 标志是苹果公司的商标,由 Khronos 授权使用。”
“Vulkan 和 Vulkan 标志是 Khronos Group Inc. 的商标。”

依赖项

~1.2–1.9MB
~32K SLoC