For those who are seeking the answer in 2016 (and even 2017) …
Disclaimer
- I’ve failed to emulate GPU after all.
- It might be possible to use
gpuocelot
if you satisfy its list of
dependencies.
I’ve tried to get an emulator for BunsenLabs (Linux 3.16.0-4-686-pae #1 SMP
Debian 3.16.7-ckt20-1+deb8u4 (2016-02-29) i686 GNU/Linux).
I’ll tell you what I’ve learnt.
-
nvcc
used to have a-deviceemu
option back in CUDA Toolkit 3.0I downloaded CUDA Toolkit 3.0, installed it and tried to run a simple
program:#include <stdio.h> __global__ void helloWorld() { printf("Hello world! I am %d (Warp %d) from %d.\n", threadIdx.x, threadIdx.x / warpSize, blockIdx.x); } int main() { int blocks, threads; scanf("%d%d", &blocks, &threads); helloWorld<<<blocks, threads>>>(); cudaDeviceSynchronize(); return 0; }
Note that in CUDA Toolkit 3.0
nvcc
was in the/usr/local/cuda/bin/
.It turned out that I had difficulties with compiling it:
NOTE: device emulation mode is deprecated in this release and will be removed in a future release. /usr/include/i386-linux-gnu/bits/byteswap.h(47): error: identifier "__builtin_bswap32" is undefined /usr/include/i386-linux-gnu/bits/byteswap.h(111): error: identifier "__builtin_bswap64" is undefined /home/user/Downloads/helloworld.cu(12): error: identifier "cudaDeviceSynchronize" is undefined 3 errors detected in the compilation of "/tmp/tmpxft_000011c2_00000000-4_helloworld.cpp1.ii".
I’ve found on the Internet that if I used
gcc-4.2
or similarly ancient instead ofgcc-4.9.2
the errors might disappear. I gave up.
-
gpuocelot
The answer by Stringer has a link to a very old
gpuocelot
project website. So at first I thought that the project was abandoned in 2012 or so. Actually, it was abandoned few years later.Here are some up to date websites:
I tried to install gpuocelot following the guide. I had several errors during installation though and I gave up again.
gpuocelot
is no longer supported and depends on a set of very specific versions of libraries and software.You might try to follow this tutorial from July, 2015 but I don’t guarantee it’ll work. I’ve not tested it.
-
MCUDA
The MCUDA translation framework is a linux-based tool designed to
effectively compile the CUDA programming model to a CPU architecture.It might be useful. Here is a link to the website.
-
CUDA Waste
It is an emulator to use on Windows 7 and 8. I’ve not tried it though. It doesn’t seem to be developed anymore (the last commit is dated on Jul 4, 2013).
Here’s the link to the project’s website: https://code.google.com/archive/p/cuda-waste/