# OBRAH

OBRAH (OpenCL But Rusty And High-level) is a Rust crate built on top of [OBWIO](https://github.com/muhammadmahdi70412-ship-it/obwio)(crates.io: [OBWIO](https://crates.io/crates/obwio), providing a **high-level, ergonomic interface for OpenCL**. It abstracts low-level C bindings, letting you perform GPU computations with minimal boilerplate.

## Overview

OBRAH provides an easy-to-use API for:

- Creating OpenCL contexts and command queues  
- Loading kernels from `.cl` files  
- Allocating and managing GPU buffers  
- Running kernels and retrieving results  

It is ideal for Rust developers who want GPU acceleration without dealing with raw OpenCL FFI.

## Features

- High-level Rust interface for OpenCL  
- Built on OBWIO for cross-platform GPU support  
- Simple buffer management (`buffer_write`, `to_gpu`, `from_gpu`)  
- Kernel management (`use_kernel`, `make_prog`, `setarg`, `run_kernel`)  
- Cleanup utilities to safely release OpenCL resources  

## Installation

Add OBRAH to your `Cargo.toml`:

```toml
[dependencies]
obrah = "0.1"
```

OBRAH automatically includes OBWIO as a dependency.

## Requirements

- Rust 1.70 or later
- OpenCL SDK installed on your system
- Compatible OpenCL runtime and drivers

## License

Licensed under the Apache License, Version 2.0

## Contributing

Contributions are welcome! Open issues, submit pull requests, or improve the documentation.

## Acknowledgments

OBRAH is built on OBWIO, which uses bindgen to generate FFI bindings. Thanks to the Rust and OpenCL communities for their documentation and support.


