1.helle_cuda学习

从一个简单的例子进入cuda的学习:

cpp 复制代码
#include <stdio.h>
#include <cuda.h>
#include <cuda_runtime.h>

__global__ void hello_cuda(){
    // 泛指当前线程在所有block范围内的全局id
    unsigned int idx = blockIdx.x * blockDim.x + threadIdx.x;
    printf("block id = [ %d ], thread id = [ %d ] hello cuda\n", blockIdx.x, idx);
}

int main() {
    hello_cuda<<< 3, 4 >>>();
    cudaDeviceSynchronize();
    return 0;
}



// 输出
// block id = [ 2 ], thread id = [ 8 ] hello cuda
// block id = [ 2 ], thread id = [ 9 ] hello cuda
// block id = [ 2 ], thread id = [ 10 ] hello cuda
// block id = [ 2 ], thread id = [ 11 ] hello cuda
// block id = [ 1 ], thread id = [ 4 ] hello cuda
// block id = [ 1 ], thread id = [ 5 ] hello cuda
// block id = [ 1 ], thread id = [ 6 ] hello cuda
// block id = [ 1 ], thread id = [ 7 ] hello cuda
// block id = [ 0 ], thread id = [ 0 ] hello cuda
// block id = [ 0 ], thread id = [ 1 ] hello cuda
// block id = [ 0 ], thread id = [ 2 ] hello cuda
// block id = [ 0 ], thread id = [ 3 ] hello cuda

(1)idx -- 线程的id

(2)global 表示cuda kernel 函数的前缀,该函数被cpu调用启动,在gpu上执行

(3)blockDim.x和blockIdx.x 表示block内线程的数量以及每个block的id

(4)threadIdx.x表示block内的线程id

(5)<<< 3 , 4 >>> 在main函数中启动cuda kernel函数的标志,第一个参数表示block的数量,第二个参数表示每个block内的线程数量

(6)cudaDeviceSynchronize()表示该函数强制cpu等待gpu上的cuda kernel执行,即同步,这里也可以不写,只是cpu比gpu先执行完


host : cpu端部调用且在cpu端部执行的函数,正常的c++代码,无任何修饰符时默认是cpu端函数

device: GPU端调用且在GPU端执行的函数,可以理解为GPU端的函数封装,且编译器确定是否inline

noinline:强制编译器不inline

forceinline:强制编译器inline

eg:

host devce int run_on_cpu_or_gpu(){

return 1;

}


block中有很多个线程,


CUDA函数有哪些函数组成

1)__global__修饰的CUDA Kernel函数

2)main函数,基于<<<... , ... >>>启动cuda Kernel函数

3)可选::__device__和__host__修饰的函数

相关推荐
硬件yun14 分钟前
学功能安全
学习·安全·汽车
火眼金睛炼单词14 分钟前
图像记单词:视觉化学习能否破解英语记忆难题
学习
一条破秋裤17 分钟前
STM32 学习笔记:GPIO 输出原理与硬件设计
笔记·stm32·学习
andrsted18 分钟前
作业发布、课堂检测和错题讲评,用一个小程序完成
学习·微信小程序·小程序·学习方法
w2005122421 分钟前
K8S控制器管理
linux·云原生·容器·kubernetes
Dream Cosmos24 分钟前
Linux 多线程——线程互斥:从抢票问题到 Mutex 底层原理
linux·c++
hahaha601625 分钟前
HLS高层次综合设计技巧--循环merge和循环split
人工智能·算法·计算机视觉
JAI科研27 分钟前
Deepseek Agent Harness教程(七) | Deepseek Harness不是一个内核加一堆插件
开发语言·人工智能·深度学习·算法·自然语言处理·transformer·vllm
玖石书42 分钟前
Ubuntu 更换 USTC 镜像源完整指南(AMD64 / AARCH64)
linux·运维·ubuntu
集思广益的灰太狼43 分钟前
变频器启动致PLC数据异常?西门子G120配合滤波器EMC抑制方案
人工智能·算法·工控·emc·电磁兼容·变频器·西门子