#include const int N = 16; const int blocksize = 16; #define gpuErrchk(ans) { gpuAssert((ans), __FILE__, __LINE__); } inline void gpuAssert(cudaError_t code, const char *file, int line, bool abort=true) { if (code != cudaSuccess) { fprintf(stderr,"GPUassert: %s %s %d\n", cudaGetErrorString(code), file, line); if (abort) exit(code); } } __global__ void hello(char *a, int *b) { a[threadIdx.x] += b[threadIdx.x]; } namespace stormcuda { namespace graph { void helloWorld() { printf("CUDA TEST START\n"); printf("Should print \"Hello World\"\n"); char a[N] = "Hello \0\0\0\0\0\0"; int b[N] = {15, 10, 6, 0, -11, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; char c[N] = "YELLO \0\0\0\0\0\0"; char *ad; int *bd; const int csize = N * sizeof(char); const int isize = N * sizeof(int); printf("%s", a); cudaMalloc((void **) &ad, csize); cudaMalloc((void **) &bd, isize); cudaMemcpy(ad, a, csize, cudaMemcpyHostToDevice); cudaMemcpy(bd, b, isize, cudaMemcpyHostToDevice); dim3 dimBlock(blocksize, 1); dim3 dimGrid(1, 1); hello << < dimGrid, dimBlock >> > (ad, bd); gpuErrchk(cudaPeekAtLastError()); gpuErrchk(cudaDeviceSynchronize()); cudaMemcpy(c, ad, csize, cudaMemcpyDeviceToHost); cudaFree(ad); cudaFree(bd); printf("%s\n", c); printf("CUDA TEST END\n"); } } }