Glavnokoman / Vuh
Licence: mit
Vulkan compute for people
Stars: ✭ 264
Labels
Projects that are alternatives of or similar to Vuh
Cekirdekler
Multi-device OpenCL kernel load balancer and pipeliner API for C#. Uses shared-distributed memory model to keep GPUs updated fast while using same kernel on all devices(for simplicity).
Stars: ✭ 76 (-71.21%)
Mutual labels: gpu, gpgpu, gpu-acceleration, gpu-computing
Neanderthal
Fast Clojure Matrix Library
Stars: ✭ 927 (+251.14%)
Mutual labels: gpu, gpgpu, high-performance-computing, gpu-computing
Bayadera
High-performance Bayesian Data Analysis on the GPU in Clojure
Stars: ✭ 342 (+29.55%)
Mutual labels: gpu, gpu-acceleration, high-performance-computing, gpu-computing
Emu
The write-once-run-anywhere GPGPU library for Rust
Stars: ✭ 1,350 (+411.36%)
Mutual labels: gpu, gpgpu, gpu-acceleration, gpu-computing
Webclgl
GPGPU Javascript library 🐸
Stars: ✭ 313 (+18.56%)
Mutual labels: glsl, gpu, gpgpu, gpu-computing
Hipsycl
Implementation of SYCL for CPUs, AMD GPUs, NVIDIA GPUs
Stars: ✭ 377 (+42.8%)
Mutual labels: gpu, gpgpu, high-performance-computing, gpu-computing
Stdgpu
stdgpu: Efficient STL-like Data Structures on the GPU
Stars: ✭ 531 (+101.14%)
Mutual labels: gpu, gpgpu, gpu-acceleration, gpu-computing
rbcuda
CUDA bindings for Ruby
Stars: ✭ 57 (-78.41%)
Mutual labels: high-performance-computing, gpu-acceleration, gpu-computing
Deepnet
Deep.Net machine learning framework for F#
Stars: ✭ 99 (-62.5%)
Mutual labels: gpu, gpu-acceleration, gpu-computing
Tf Quant Finance
High-performance TensorFlow library for quantitative finance.
Stars: ✭ 2,925 (+1007.95%)
Mutual labels: gpu, high-performance-computing, gpu-computing
Vulkancore
Vulkan 1.0 graphics and compute API bindings for .NET Standard
Stars: ✭ 162 (-38.64%)
Mutual labels: vulkan, gpu, gpgpu
Vulkan Kompute
General purpose GPU compute framework for cross vendor graphics cards (AMD, Qualcomm, NVIDIA & friends). Blazing fast, mobile-enabled, asynchronous and optimized for advanced GPU data processing usecases.
Stars: ✭ 350 (+32.58%)
Mutual labels: vulkan, gpgpu, gpu-computing
MatX
An efficient C++17 GPU numerical computing library with Python-like syntax
Stars: ✭ 418 (+58.33%)
Mutual labels: gpu, gpgpu, gpu-computing
Heteroflow
Concurrent CPU-GPU Programming using Task Models
Stars: ✭ 57 (-78.41%)
Mutual labels: gpu, gpu-acceleration, gpu-computing
3d Game Shaders For Beginners
🎮 A step-by-step guide to implementing SSAO, depth of field, lighting, normal mapping, and more for your 3D game.
Stars: ✭ 11,698 (+4331.06%)
Mutual labels: glsl, vulkan, glsl-shaders
Vulkan minimal compute
Minimal Example of Using Vulkan for Compute Operations. Only ~400LOC.
Stars: ✭ 603 (+128.41%)
Mutual labels: glsl, vulkan, gpgpu
kompute
General purpose GPU compute framework built on Vulkan to support 1000s of cross vendor graphics cards (AMD, Qualcomm, NVIDIA & friends). Blazing fast, mobile-enabled, asynchronous and optimized for advanced GPU data processing usecases. Backed by the Linux Foundation.
Stars: ✭ 872 (+230.3%)
Mutual labels: vulkan, gpgpu, gpu-computing
Regl Cnn
Digit recognition with Convolutional Neural Networks in WebGL
Stars: ✭ 490 (+85.61%)
Mutual labels: glsl, gpu, gpgpu
Vuh. A Vulkan-based GPGPU computing framework.
Vulkan is the most widely supported GPU programming API on modern hardware/OS. It allows to write truly portable and performant GPU accelerated code that would run on iOS, Android, Linux, Windows, macOS... NVidia, AMD, Intel, Adreno, Mali... whatever. At the price of ridiculous amount of boilerplate. Vuh aims to reduce the boilerplate to (a reasonable) minimum in most common GPGPU computing scenarios. The ultimate goal is to beat OpenCL in usability, portability and performance.
Motivating Example
saxpy implementation using vuh.
auto main()-> int {
auto y = std::vector<float>(128, 1.0f);
auto x = std::vector<float>(128, 2.0f);
auto instance = vuh::Instance();
auto device = instance.devices().at(0); // just get the first available device
auto d_y = vuh::Array<float>(device, y); // create device arrays and copy data
auto d_x = vuh::Array<float>(device, x);
using Specs = vuh::typelist<uint32_t>; // shader specialization constants interface
struct Params{uint32_t size; float a;}; // shader push-constants interface
auto program = vuh::Program<Specs, Params>(device, "saxpy.spv"); // load shader
program.grid(128/64).spec(64)({128, 0.1}, d_y, d_x); // run once, wait for completion
d_y.toHost(begin(y)); // copy data back to host
return 0;
}
and the corresponding kernel (glsl compute shader) code:
layout(local_size_x_id = 0) in; // workgroup size (set with .spec(64) on C++ side)
layout(push_constant) uniform Parameters { // push constants (set with {128, 0.1} on C++ side)
uint size; // array size
float a; // scaling parameter
} params;
layout(std430, binding = 0) buffer lay0 { float arr_y[]; }; // array parameters
layout(std430, binding = 1) buffer lay1 { float arr_x[]; };
void main(){
const uint id = gl_GlobalInvocationID.x; // current offset
if(params.size <= id){ // drop threads outside the buffer
return;
}
arr_y[id] += params.a*arr_x[id]; // saxpy
}
Features
- storage buffers as
vuh::Array<T>
- allocated in device-local, host-visible or device-local-host-visible memories
- data exchange with host incl. hidden staging buffers
- computation kernels as
vuh::Program
- buffers binding (passing arbitrary number of array parameters)
- specialization constants (to set workgroup dimensions, etc...)
- push-constants (to pass small data (<= 128 Bytes), like task dimensions etc...)
- whatever compute shaders support, shared memory, etc...
- asynchronous data transfer and kernel execution with host-side synchronization
- multiple device support
- yet to come...
- not ever coming...
Usage
Note that the project description data, including the texts, logos, images, and/or trademarks,
for each open source project belongs to its rightful owner.
If you wish to add or remove any projects, please contact us at [email protected].