Marvin is a deep learning framework designed first and foremost to be hackable. It is naively simple for fast prototyping, uses only basic C/C++, and only calls CUDA and cuDNN as dependencies.
This first post in a series on CUDA C and C++ covers the basic concepts of parallel programming on the CUDA platform with C/C++.
int i = blockDim.x * blockIdx.x + threadIdx.x
CUDA lets you work with familiar programming concepts while developing software that can run on a GP This is the first of a series of articles to introduce you to the power of CUDA -- through working code -- and to the thought process to help you map applications onto multi-threaded hardware (such as GPUs) to get big performance increases. Of course, not all problems can be mapped efficiently onto multi-threaded hardware, so part of my thought process will be to distinguish what will and what won't work, plus provide a common-sense idea of what might work "well-enough". "CUDA programming" and "GPGPU programming" are not the same (although CUDA runs on GPUs). CUDA permits working with familiar programming concepts while developing software that can run on a GPU. It also avoids the performance overhead of graphics layer APIs by compiling your software directly to the hardware (GPU assembly language, for instance), thereby providing great performance.
A. Dallmann, P. Beck, and J. von Gudenberg. Parallel Processing and Applied Mathematics, volume 8385 of Lecture Notes in Computer Science, Springer Berlin Heidelberg, (2014)