Cuda 學習 - Hello World
===
# Cuda 介紹
* CUDA 是用於圖形處理單元(graphical processing units,GPU)的平行運算平台和程式設計模型。透過 CUDA,您可以利用 GPU 的運算能力加速應用程式。
* 利用 Cuda 寫 code 前需要先安裝對應的 cuda 套件及支援的 cudnn, 對應版本可在網路上找尋到相關教學
* Cuda 撰寫是轉寫 .cu , 寫法與 C/C++ 相似, 編譯實需使用的 nvcc 作為編譯器
* C vs Cuda 程式上使用的指令, 其實就差在前面多個cuda
| c | cuda |
| -------- | ----------- |
| malloc | cudaMalloc |
| memset | cudaMemset |
| free | cudaFree |
* Cuda 應用的領域
* 圖形渲染
* 科學計算
* AI 領域(影像處理、NLP...)
# Hello World
* 引入相關 .h 檔
```cpp=
#include <cuda_runtime.h>
#include <device_launch_parameters.h>
#include <stdio.h>
```
* 撰寫 cuda function , 需要住要的是要使用 cuda 的 function 前面需要添加global
```cpp=
__global__ void hello_cuda(){
printf("Hello CUDA world \n");
}
```
* 執行函式
```cpp=
int main(){
hello_cuda<<<1, 1>>>();
cudaDeviceSynchronize();
cudaDeviceReset();
return 0;
}
```
* 編譯可用cmake生成Makefile後在將.cu檔編譯成執行檔
```cmake=
cmake_minimum_required(VERSION 3.16)
project("main" LANGUAGES CXX CUDA)
add_executable(main)
target_sources(main PRIVATE "main.cu")
```
* 執行成果

[github](https://github.com/GU-Lin/Cuda_Practice/tree/main/1_Hello_World)
參考資料:
https://roo.cash/blog/nvidia-cuda/
* ###### tags : `Cuda`