ocl-macros
Documentation | Change Log
Macros for easier/faster working with the ocl crate. ocl-macros currently supports rust macros for easy ocl::Kernel and ocl::Buffer creation.
This crate is still in early development.
Features
- Simple Kernel creation in one line.
- Easy specifying of multiple kernel arguments, named or unnamed
- Buffer creation in one line
Usage
If you want to use ocl-macros with ocl, add the following to your Cargo.toml:
[]
= "0.0.4"
Import the macros into your project by adding the following to your project's root:
use *;
Example
Example use of ocl-macros:
use ;
use *;
let PROGRAM_SRC: &str = r#"
kernel void add_one(global float* var) {
const uint n = get_global_id(0);
// This program adds 1.0f to each element in the buffer
var[n] += 1.0f;
}
"#;
// Initialize OpenCL context/queue
let platform = default;
// Get first device on default platform
let device = default_device!;
let context = builder
.platform
.devices
.build
.unwrap;
let queue = new.unwrap;
let program = builder
.devices
.src
.build
.unwrap;
// Create new float buffer with 100 elements of starting value 0.0f32
let buffer = buffer!;
// Create the "add_one" kernel with work size 100 and buffer as first unnamed argument
let kernel = kernel!;
// Run kernel (This is unsafe)
unsafe
// Get buffer content as new vector
let vec = bget!;
// The elements are now 1.0f32!
assert!;
This code uses various macros to create a new buffer and kernel with the created buffer as an unnamed argument. The kernel is then executed. The buffer content is read into a new vector and verified. It has changed from 0.0 to 1.0!
License
This crate is licensed under the MIT license or the Apache-2.0 license.
Contribution
Contributions are welcome! Any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.