All Projects → fynv → ThrustRTC

fynv / ThrustRTC

Licence: other
CUDA tool set for non-C++ languages that provides similar functionality like Thrust, with NVRTC at its core.

Programming Languages

C++
36643 projects - #6 most used programming language
C#
18002 projects
python
139335 projects - #7 most used programming language
java
68154 projects - #9 most used programming language
c
50402 projects - #5 most used programming language
CMake
9771 projects

Projects that are alternatives of or similar to ThrustRTC

Cupy
NumPy & SciPy for GPU
Stars: ✭ 5,625 (+13619.51%)
Mutual labels:  cuda, nvrtc
Thrust
The C++ parallel algorithms library.
Stars: ✭ 3,595 (+8668.29%)
Mutual labels:  cuda, thrust
lbvh
an implementation of parallel linear BVH (LBVH) on GPU
Stars: ✭ 67 (+63.41%)
Mutual labels:  cuda, thrust
PySDM
Pythonic particle-based (super-droplet) warm-rain/aqueous-chemistry cloud microphysics package with box, parcel & 1D/2D prescribed-flow examples in Python, Julia and Matlab
Stars: ✭ 26 (-36.59%)
Mutual labels:  thrust, nvrtc
LaneandYolovehicle-DetectionLinux
Lane depertaure and Yolo objection detection C++ Linux
Stars: ✭ 16 (-60.98%)
Mutual labels:  cuda
FLAMEGPU2
FLAME GPU 2 is a GPU accelerated agent based modelling framework for C++ and Python
Stars: ✭ 25 (-39.02%)
Mutual labels:  cuda
pyRender
Lightweight Cuda Renderer with Python Wrapper.
Stars: ✭ 49 (+19.51%)
Mutual labels:  cuda
rust-inline-cuda-tutorial
Let's jump into CUDA development with Rust
Stars: ✭ 17 (-58.54%)
Mutual labels:  cuda
mini-nbody
A simple gravitational N-body simulation in less than 100 lines of C code, with CUDA optimizations.
Stars: ✭ 73 (+78.05%)
Mutual labels:  cuda
cresset
Template repository to build PyTorch projects from source on any version of PyTorch/CUDA/cuDNN.
Stars: ✭ 573 (+1297.56%)
Mutual labels:  cuda
cuda-toolkit
GitHub Action to install CUDA
Stars: ✭ 34 (-17.07%)
Mutual labels:  cuda
cuda memtest
Fork of CUDA GPU memtest 👓
Stars: ✭ 68 (+65.85%)
Mutual labels:  cuda
bazel.cmake
bazel.cmake mimics the behavior of bazel to simplify the usability of CMake
Stars: ✭ 38 (-7.32%)
Mutual labels:  cuda
monolish
monolish: MONOlithic LInear equation Solvers for Highly-parallel architecture
Stars: ✭ 166 (+304.88%)
Mutual labels:  cuda
dynamic-occupancy-grid-map
Implementation of A Random Finite Set Approach for Dynamic Occupancy Grid Maps with Real-Time Application
Stars: ✭ 89 (+117.07%)
Mutual labels:  cuda
rbcuda
CUDA bindings for Ruby
Stars: ✭ 57 (+39.02%)
Mutual labels:  cuda
SoliditySHA3Miner
All-in-one mixed multi-GPU (nVidia, AMD, Intel) & CPU miner solves proof of work to mine supported EIP918 tokens in a single instance (with API).
Stars: ✭ 28 (-31.71%)
Mutual labels:  cuda
warp
continuous energy monte carlo neutron transport in general geometries on GPUs
Stars: ✭ 27 (-34.15%)
Mutual labels:  cuda
ClothTOP
GPU-accelerated Cloth TOP node for TouchDesigner using the NVIDIA Flex physics solver.
Stars: ✭ 33 (-19.51%)
Mutual labels:  cuda
Arch-Data-Science
Archlinux PKGBUILDs for Data Science, Machine Learning, Deep Learning, NLP and Computer Vision
Stars: ✭ 92 (+124.39%)
Mutual labels:  cuda

ThrustRTC

The aim of the project is to provide a library of general GPU algorithms, functionally similar to Thrust, that can be used in non-C++ programming launguages that has an interface with C/C++ (Python, C#, JAVA etc).

This projects uses a new CUDA programming paradigm: NVRTC + dynamic-instantiation, as an alternative to the well establish "CUDA runtime + static compilation + templates" paradigm.

Click here to learn more about the new paradigm.

Using ThrustRTC in different languages

The usage of this library is quite simlar to using Thrust, except that you can use it Python, C# and JAVA, and CUDA SDK is not required.

Thrust, C++:

#include <vector>
#include <thrust/replace.h>
#include <thrust/device_vector.h>

std::vector<int> hdata({ 1, 2, 3, 1, 2  });
thrust::device_vector<int> A(hdata);
thrust::replace(A.begin(), A.end(), 1, 99);

// A contains { 99, 2, 3, 99, 2}

ThrustRTC, in C++:

#include "TRTCContext.h"
#include "DVVector.h"
#include "replace.h"

int hdata[5] = { 1,2,3,1,2 };
DVVector A("int32_t", 5, hdata);
TRTC_Replace(A, DVInt32(1), DVInt32(99));

// A contains { 99, 2, 3, 99, 2}

ThrustRTC, in Python:

import ThrustRTC as trtc

A = trtc.device_vector_from_list([1, 2, 3, 1, 2], 'int32_t')
trtc.Replace(A, trtc.DVInt32(1), trtc.DVInt32(99))

# A contains [99, 2, 3, 99, 2]

ThrustRTC, in C#:

using ThrustRTCSharp;

DVVector A = new DVVector(new int[] { 1, 2, 3, 1, 2 });
TRTC.Replace(A, new DVInt32(1), new DVInt32(99));

// A contains { 99, 2, 3, 99, 2}

ThrustRTC, in JAVA:

import JThrustRTC.*;

DVVector vec = new DVVector(new int[] { 1, 2, 3, 1, 2 });
TRTC.Replace(vec, new DVInt32(1), new DVInt32(99));

// A contains { 99, 2, 3, 99, 2}

A significant difference between ThrustRTC and Thrust is that ThrustRTC does not include the iterators. All operations explicitly work on vectors types. There are adaptive objects that can be used to map to a sub-range of a vector instead of using the whole vector.

Quick Start Guide

Quick Start Guide - for Python users

Quick Start Guide - for C# users

Quick Start Guide - for JAVA users

Demos

Using ThrustRTC for histogram calculation and k-means clustering.

https://fynv.github.io/ThrustRTC/Demo.html

License

I've decided to license this project under '"Anti 996" License'

Basically, you can use the code any way you like unless you are working for a 996 company.

996.icu

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