hello cuda world
This commit is contained in:
parent
c6ece025dd
commit
4500fcbb18
24
build.bat
Normal file
24
build.bat
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
@echo off
|
||||||
|
|
||||||
|
ctime -begin timeBuild.ctm
|
||||||
|
|
||||||
|
set CommonCompilerFlags=/nologo /Zi /FC /Od
|
||||||
|
@rem /WX /W4 /wd4201 /wd4100 /wd4189 /wd4244 /wd4127 /wd4456
|
||||||
|
@rem
|
||||||
|
@rem
|
||||||
|
|
||||||
|
set cuda_root=D:/lib/cudatoolkit/lib/x64
|
||||||
|
|
||||||
|
set CudaSources=../src/main.cu
|
||||||
|
|
||||||
|
IF NOT EXIST .\build mkdir .\build
|
||||||
|
pushd .\build
|
||||||
|
nvcc %CudaSources% -o program.exe
|
||||||
|
|
||||||
|
set LastError=%ERRORLEVEL%
|
||||||
|
popd
|
||||||
|
|
||||||
|
ctime -end timeBuild.ctm %LastError%
|
||||||
|
IF NOT %LastError%==0 GOTO :end
|
||||||
|
|
||||||
|
:end
|
||||||
12
src/editortest.cu
Normal file
12
src/editortest.cu
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
|
||||||
|
__global__ void some_global_kernel() {
|
||||||
|
|
||||||
|
some_kernel<<<32, 32>>>(0,0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
__device__ void some_kernel(int a, int b)
|
||||||
|
{
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
104
src/main.cu
Normal file
104
src/main.cu
Normal file
@ -0,0 +1,104 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
|
||||||
|
typedef int S32;
|
||||||
|
typedef unsigned int U32;
|
||||||
|
typedef float F32;
|
||||||
|
|
||||||
|
|
||||||
|
#define CUDA_CHECK(err) do { \
|
||||||
|
if (err != cudaSuccess) { \
|
||||||
|
fprintf(stderr, "CUDA ERROR: %s at %s:%d\n", \
|
||||||
|
cudaGetErrorString(err), __FILE__, __LINE__); \
|
||||||
|
exit(EXIT_FAILURE); \
|
||||||
|
} \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#define LOG printf
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#define NUM_BLOCKS 1
|
||||||
|
#define NUM_THREADS 32
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
__device__ void modify_array(U32 *arr, U32 N)
|
||||||
|
{
|
||||||
|
U32 i = threadIdx.x;
|
||||||
|
if(i < N)
|
||||||
|
{
|
||||||
|
arr[i] = i;
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
__global__ void hello_from_device(U32 *arr, U32 N)
|
||||||
|
{
|
||||||
|
|
||||||
|
modify_array(arr, N);
|
||||||
|
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
|
||||||
|
LOG("Hello from cpu\n");
|
||||||
|
|
||||||
|
|
||||||
|
U32 N = NUM_THREADS;
|
||||||
|
U32 arr_size = N * sizeof(U32);
|
||||||
|
|
||||||
|
|
||||||
|
U32 *arr = (U32 *)malloc(arr_size);
|
||||||
|
memset(arr, 0, arr_size);
|
||||||
|
|
||||||
|
cudaError_t cuErr;
|
||||||
|
U32 *d_arr = 0;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
cuErr = cudaMalloc(&d_arr, arr_size);
|
||||||
|
CUDA_CHECK(cuErr);
|
||||||
|
|
||||||
|
cuErr = cudaMemcpy(d_arr, arr, arr_size, cudaMemcpyHostToDevice);
|
||||||
|
CUDA_CHECK(cuErr);
|
||||||
|
|
||||||
|
LOG("Array before CUDA \n");
|
||||||
|
for(U32 i = 0; i < N; i += 1)
|
||||||
|
{
|
||||||
|
LOG("%i: %i \n", i, arr[i]);
|
||||||
|
}
|
||||||
|
LOG("\n");
|
||||||
|
|
||||||
|
|
||||||
|
hello_from_device<<<NUM_BLOCKS, NUM_THREADS>>>(d_arr, N);
|
||||||
|
|
||||||
|
cuErr = cudaMemcpy(arr, d_arr, arr_size, cudaMemcpyDeviceToHost);
|
||||||
|
CUDA_CHECK(cuErr);
|
||||||
|
|
||||||
|
cuErr = cudaFree(d_arr);
|
||||||
|
CUDA_CHECK(cuErr);
|
||||||
|
|
||||||
|
LOG("Array after CUDA \n");
|
||||||
|
for(U32 i = 0; i < N; i += 1)
|
||||||
|
{
|
||||||
|
LOG("%i \n", arr[i]);
|
||||||
|
}
|
||||||
|
LOG("\n");
|
||||||
|
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
BIN
timeBuild.ctm
Normal file
BIN
timeBuild.ctm
Normal file
Binary file not shown.
Loading…
Reference in New Issue
Block a user