Added compilation example
This commit is contained in:
parent
2161c62608
commit
36b2720fe3
@ -244,3 +244,56 @@ BLAS Examples
|
|||||||
|
|
||||||
Compilation and Linking
|
Compilation and Linking
|
||||||
=======================
|
=======================
|
||||||
|
To compile with this library, there are only a few things necessary.
|
||||||
|
First, it is recommended you use the provided template ``Makefile``, which can be
|
||||||
|
easily modified to suit your project needs. It already default handles the compilation
|
||||||
|
and linking with ``nvcc``, so long as you fulfill a few requirements.
|
||||||
|
|
||||||
|
#. Use the compiler flag ``CUDA`` to mark where GPU-specific code is, if necessary.
|
||||||
|
#. Any files that use ``CUDA`` functionality, (i.e defining a kernel), should have the file
|
||||||
|
extension ``.cu.cpp``.
|
||||||
|
#. When including the ``Core.h`` header file, in only **one** file, you must define the
|
||||||
|
macro ``CUDATOOLS_IMPLEMENTATION``. That file must also compile for CUDA, so its
|
||||||
|
extension must be ``.cu.cpp``. It's recommended to put this with your kernel definitions.
|
||||||
|
|
||||||
|
Afterwards the ``Makefile`` will have two targets ``cpu`` and ``gpu``, which compile
|
||||||
|
the CPU and GPU compatible binaries respectively. As an example, we can look at the whole
|
||||||
|
file for the first example:
|
||||||
|
|
||||||
|
.. code-block:: cpp
|
||||||
|
|
||||||
|
// main.cu.cpp
|
||||||
|
#define CUDATOOLS_IMPLEMENTATION
|
||||||
|
#include <Core.h>
|
||||||
|
|
||||||
|
DEFINE_KERNEL(add, int x, int y) {
|
||||||
|
printf("Kernel: %i\n", x + y);
|
||||||
|
}
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
KERNEL(add, CudaTools::Kernel::basic(1), 1, 1); // Prints 2.
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.. code-block::
|
||||||
|
|
||||||
|
// Makefile
|
||||||
|
|
||||||
|
CC := g++-10
|
||||||
|
NVCC := nvcc
|
||||||
|
CFLAGS := -Wall -std=c++17 -fopenmp -MMD
|
||||||
|
NVCC_FLAGS := -MMD -w -Xcompiler
|
||||||
|
|
||||||
|
INCLUDE := ../../
|
||||||
|
LIBS_DIR :=
|
||||||
|
LIBS_DIR_GPU := /usr/local/cuda/lib64
|
||||||
|
LIBS :=
|
||||||
|
LIBS_GPU := cuda cudart cublas
|
||||||
|
|
||||||
|
TARGET = coreKernel
|
||||||
|
SRC_DIR = .
|
||||||
|
BUILD_DIR = build
|
||||||
|
|
||||||
|
The lines above are the first few lines of the ``Makefile``, which are the only
|
||||||
|
lines you should need to modify, consisting of libraries and flags, as well as
|
||||||
|
the name of the target.
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user