Thurst is an excellent library for CUDA development.
Unfortunately, Thrust is not present in the CARMA Toolkit but it is easy to install.
On the x86 development system, we are going to pull down the latest source from Thrust using git.
If git is not installed, we can easily add to the system with:
sudo apt-get install git
and then clone the git repository
git clone https://github.com/thrust/thrust.git
We are now ready to cross-compile. Remember that Thrust is a template library, everything is build from include files.
Using our standard Makefile, we just need to add the directory in which the Thrust include files are ( in this case /home/ubuntu/thrust).
We also want to restrict the code generation to arch sm_21 ( the CARMA kit has a Q1000m GPU with 2.1 compute capabilities) to reduce the compilation time.
We are going to use one of the examples shipping with Thrust, monte_carlo.cu
# Makefile for cross-compile #
############################
all : monte_carlo
CUDA_HOME=/usr/local/cuda
CC=/arm-linux-gnueabi-gcc
NVCC=$(CUDA_HOME)/bin/nvcc -target-cpu-arch ARM --compiler-bindir /usr/bin/arm-linux-gnueabi-gcc-4.5 -m32
THRUST_LOC=/home/ubuntu/thrust
monte_carlo : monte_carlo.cu
$(NVCC) -O3 -arch sm_21 -o monte_carlo -I$(THRUST_LOC) monte_carlo.cu
clean:
rm monte_carlo
Once we generate the executable, we can copy it on the CARMA
scp monte_carlo ubuntu@carma:~
and execute it. We will see the number pi printed with 2 digits ( 3.14).
If you want to see more digits, you can change the source code and set the precision to 6 instead of the original 2
std::cout << std::setprecision(6);