All Projects → Glavnokoman → Vuh

Glavnokoman / Vuh

Licence: mit
Vulkan compute for people

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
Gpur
R interface to use GPU's
Stars: ✭ 208 (-21.21%)
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
Gpu.js
GPU Accelerated JavaScript
Stars: ✭ 13,427 (+4985.98%)
Mutual labels:  glsl, gpu, 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.

Build Status

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].