Merge branch 'dev'
[cuda.git] / hello_cuda / hello.cu
1 /*
2         Copyright (C) 2012  fmaj7b5.info
3
4         This program is free software: you can redistribute it and/or modify
5         it under the terms of the GNU General Public License as published by
6         the Free Software Foundation, either version 2 of the License, or
7         (at your option) any later version.
8
9         This program is distributed in the hope that it will be useful,
10         but WITHOUT ANY WARRANTY; without even the implied warranty of
11         MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12         GNU General Public License for more details.
13
14         You should have received a copy of the GNU General Public License
15         along with this program.  If not, see <http://www.gnu.org/licenses/>.
16 */
17
18 #include <cuda.h>
19 #include "hello.cuh"
20
21 using namespace FM7b5;
22
23 __device__ const char str[] = "Hello CUDA!";
24
25 __global__ void hello(char* buf)
26 {
27         const size_t idx = threadIdx.x;
28
29         if (idx < sizeof(str)) {
30                 buf[idx] = str[idx];
31         }
32 }
33
34 void FM7b5::hello_gpu(char* buf)
35 {
36         const size_t num_str(sizeof(str));
37         char* d_buf(nullptr);
38
39         cudaMalloc(&d_buf, sizeof(char) * num_str);
40
41         hello<<<1, num_str>>>(d_buf);
42
43         cudaMemcpy(buf, d_buf, sizeof(char) * num_str, cudaMemcpyDeviceToHost);
44
45         cudaFree(d_buf);
46 }