#ray-tracing #opencl #cuda #ray-tracer #cpu-gpu

RayBNN_Cell

Cell Position Generator for RayBNN

5 releases (2 stable)

new 2.0.2 Jun 8, 2024
2.0.1 Jun 5, 2024
0.1.2 Oct 16, 2023
0.1.1 Oct 16, 2023
0.1.0 Oct 15, 2023

#378 in Science

Download history 8/week @ 2024-02-19 74/week @ 2024-02-26 7/week @ 2024-03-11 3/week @ 2024-03-25 21/week @ 2024-04-01 5/week @ 2024-05-20 2/week @ 2024-05-27

275 downloads per month
Used in raybnn_raytrace

GPL-3.0-only

22KB
333 lines

RayBNN_Cell

Cell posiition generation library for RayBNN using GPUs, CPUs, and FPGAs via CUDA, OpenCL, and oneAPI

Install Arrayfire

Install the Arrayfire 3.9.0 binaries at https://arrayfire.com/binaries/

or build from source https://github.com/arrayfire/arrayfire/wiki/Getting-ArrayFire

Add to Cargo.toml

arrayfire = { version = "3.8.1", package = "arrayfire_fork" }
rayon = "1.7.0"
num = "0.4.1"
num-traits = "0.2.16"
half = { version = "2.3.1" , features = ["num-traits"] }
RayBNN_DataLoader = "2.0.2"
RayBNN_Cell = "2.0.2"

List of Examples

Generate Cells and Check them for Collisions


//Generate Random Uniform Cells within a Sphere
let mut cell_pos: arrayfire::Array<f32>  = RayBNN_Cell::Hidden::Sphere::generate_uniform_sphere_position(&modeldata_float, &modeldata_int);


//Get indicies of non colliding cells
let idx = RayBNN_Cell::Hidden::Sphere::check_cell_collision_minibatch(
    &modeldata_float, 
    &cell_pos
);

let idx = arrayfire::locate(&idx);

//Select non colliding cells
cell_pos = arrayfire::lookup(&cell_pos, &idx, 0);

Types of cell collision checkers

//Checks One by one
let idx = RayBNN_Cell::Hidden::Sphere::check_cell_collision_serial(
    &modeldata_float, 
    &cell_pos
);

//Checks All cells at once
let idx = RayBNN_Cell::Hidden::Sphere::check_cell_collision_batch(
    &modeldata_float, 
    &cell_pos
);

//Checks in minibatches
let idx = RayBNN_Cell::Hidden::Sphere::check_cell_collision_minibatch(
    &modeldata_float, 
    &cell_pos
);

Generate Input Neuron Positions

let input_neurons: arrayfire::Array<f64> = RayBNN_Cell::Input::Sphere::create_spaced_neurons_1D(
    sphere_rad,
    input_size,
);

Dependencies

~7MB
~141K SLoC