当前位置: 首页 > news >正文

【CUDA C实战演练】CUDA介绍、安装、C代码示例

文章目录

  • 0. 前言
  • 1. 并行计算与异构计算
    • 1.1 并行计算(Parallel Computing)
    • 1.2 异构计算(Heterogeneous Computing)
  • 2. CUDA 的核心概念
    • 2.1 主机(Host)与设备(Device)
    • 2.2 线程层次结构
    • 2.3 内存模型
    • 2.4 执行模型
  • 3. CUDA 与 C 语言的关系
    • 3.1 语法扩展
    • 3.2 混合编程
    • 3.3 与标准C的差异
  • 4. CUDA安装

0. 前言

📣按照国际惯例,首先声明:本文只是我自己学习的理解,虽然参考了他人的宝贵见解及成果,但是内容可能存在不准确的地方。如果发现文中错误,希望批评指正,共同进步。

CUDA(Compute Unified Device Architecture)是NVIDIA推出的GPU通用计算编程模型和工具链,让开发者能用 C/C++ 直接调用 GPU 的并行计算能力。如果没有 CUDA,GPU 将只能用于图形渲染,无法高效加速科学计算、AI 训练等通用计算任务。

本文涵盖了CUDA的基础介绍,CUDA Toolkit的安装以及CUDA C语言代码示例。

在这里插入图片描述

1. 并行计算与异构计算

1.1 并行计算(Parallel Computing)

并行计算(Parallel Computing)是一种 同时使用多个计算资源 解决单个问题的计算模式,其核心目标是通过 任务分解协同执行 来显著提升计算效率。与传统的串行计算(一步一步顺序执行)不同,并行计算允许多个操作同时进行。

在这里插入图片描述

并行计算按任务可以分为:

类型描述典型应用
数据并行同一操作在不同数据上并行执行(如GPU处理图像像素)图像处理、矩阵运算
任务并行不同任务同时执行(如同时下载文件和解压数据)服务器多任务处理

按硬件层级可以划分为:

层级实现方式示例
指令级并行CPU流水线、超标量架构Intel Hyper-Threading
线程级并行多核CPU/GPU的多线程OpenMP、CUDA
节点级并行多台计算机协同(分布式系统)MPI(消息传递接口)

1.2 异构计算(Heterogeneous Computing)

异构计算是指联合使用不同架构的计算单元(如CPU+GPU+FPGA),发挥各自优势。

  • CPU:擅长逻辑控制、串行任务。
  • GPU:擅长高吞吐量并行计算。
  • CUDA 的实现
    • 统一内存管理cudaMallocManaged 分配CPU/GPU共享内存。
    • 异步执行:通过 cudaStream_t 实现计算与数据传输重叠。

在这里插入图片描述

2. CUDA 的核心概念

2.1 主机(Host)与设备(Device)

概念描述关键操作
HostCPU及其内存malloc, free
DeviceGPU及其显存cudaMalloc, cudaFree

2.2 线程层次结构

  • Kernel(核函数):GPU上并行执行的函数,标记为 __global__
  • Grid → Block → Thread
    • Grid:所有线程块的集合。
    • Block:一组线程(最多1024线程,依架构而定)。
    • Thread:最小执行单元。

在这里插入图片描述

2.3 内存模型

内存类型作用域典型用途
全局内存所有线程主存储区,访问速度较慢
共享内存单个Block高速缓存,减少全局内存访问
寄存器单个线程最快,但容量有限
常量内存所有线程(只读)存储不变数据(如系数矩阵)

2.4 执行模型

  • SIMT(单指令多线程)
    GPU以32线程为一组(Warp)执行相同指令,但可处理不同数据。
  • 隐式同步:同一Block内的线程可通过共享内存和 __syncthreads() 同步。

3. CUDA 与 C 语言的关系

3.1 语法扩展

CUDA 在标准C语言基础上扩展了:

  • 函数限定符
    • __global__:核函数,由CPU调用、GPU执行。
    • __device__:GPU端函数,仅GPU可调用。
    • __host__:CPU端函数(默认)。
  • 变量限定符
    • __shared__:定义共享内存变量。
    • __constant__:定义常量内存变量。

3.2 混合编程

CUDA 程序通常是 C/C++ 主机代码 + GPU 核函数 的混合体:

#include<stdio.h>
#include<cuda_runtime.h>//GPU核函数
__global__ void helloCUDA(){printf("hello world from thread %d\n", threadIdx.x);  //threadIdx.x表示当前线程在 Block内的x维度的编号(从0开始)}//主机代码
int main() {helloCUDA << <1, 5 >> > ();  //启动5个线程cudaDeviceSynchronize();  //阻塞主机线程,直到GPU上所有任务(包括核函数、内存传输)完成return 0;
}

输出为:
在这里插入图片描述

3.3 与标准C的差异

特性标准CCUDA C
内存管理malloc/freecudaMalloc/cudaFree
函数调用直接调用通过 <<<...>>> 启动核函数
并行模型需依赖多线程库原生支持GPU大规模并行

4. CUDA安装

  1. 首先要先安装VS: https://visualstudio.microsoft.com/zh-hans/
    在这里插入图片描述

  2. 下载CUDA Toolkit: https://developer.nvidia.com/cuda-toolkit
    在这里插入图片描述

  • 选择合适的版本
    在这里插入图片描述
  • 下载完成在这里插入图片描述
  1. 安装
    在这里插入图片描述
    在这里插入图片描述

  2. 安装完成
    在这里插入图片描述

  3. 打开CMD输入nvcc -V,有返回版本号,确认安装成功
    在这里插入图片描述

  4. 打开VS,创建CUDA项目
    在这里插入图片描述

相关文章:

【CUDA C实战演练】CUDA介绍、安装、C代码示例

文章目录 0. 前言1. 并行计算与异构计算1.1 并行计算&#xff08;Parallel Computing&#xff09;1.2 异构计算&#xff08;Heterogeneous Computing&#xff09; 2. CUDA 的核心概念2.1 主机&#xff08;Host&#xff09;与设备&#xff08;Device&#xff09;2.2 线程层次结构…...

滑动窗口——无重复字符最长的字串

题目&#xff1a; 子字符串&#xff0c;我们也可以看成子数组。 题意不难理解&#xff0c;这个题我们暴力枚举的思路是把每一个字符遍历存到hash桶中&#xff0c;如果放两次就进行结果更新。 但这个题我们有更优化的方法&#xff0c;利用数组代替hash&#xff08;重点不在这&…...

QT中connect高级链接——指针、lambda、宏

1、connect使用指针 connect(button,&QPushButton::released,this,&MainWidget::mySlot); //【抬起】按钮button时&#xff0c;修改按钮b2的标题 2、使用lambda表达式 引入lambda表达式&#xff0c;类似内联函数&#xff0c;可以用于不会被重用的短代码片段&#x…...

说说es配置项的动态静态之分和集群配置更新API

这天因为某件工作来到了es官网某个参数配置相关的页面&#xff0c;注意到了下图圆圈里的“Dynamic”&#xff1a; 链接&#xff1a;https://www.elastic.co/guide/en/elasticsearch/reference/8.1/modules-cluster.html#misc-cluster-settings 显然这是对配置项的一个描述&am…...

如何有效防御服务器DDoS攻击

分布式拒绝服务&#xff08;DDoS&#xff09;攻击通过大量恶意流量淹没服务器资源&#xff0c;导致服务瘫痪。本文将提供一套结合代码实现的主动防御方案&#xff0c;涵盖流量监控、自动化拦截和基础设施优化。 1. 实时流量监控与告警 目标&#xff1a;检测异常流量并触发告警…...

C#上传文件到腾讯云的COS

测试环境&#xff1a; vs2022 .net 6控制台应用程序 测试步骤如下&#xff1a; 1 添加子用户&#xff0c;目前是为了拿到secretId和secretKey&#xff0c;打开添加子用户界面链接&#xff1a;https://console.cloud.tencent.com/cam 并为子用户添加API 密钥 2 通过链接htt…...

强缓存与协商缓存的实现机制

文章目录 前言**1. 强缓存&#xff08;强制缓存&#xff09;****强缓存生效流程**&#xff1a;**2. 协商缓存&#xff08;对比缓存&#xff09;****协商缓存生效流程**&#xff1a;**对比总结****实际应用建议** **1. 缓存配置的三种主要实现方式** 前言 强缓存与协商缓存的实…...

【云备份】项目展示项目总结

目录 一. 项目展示 二. 项目总结 一. 项目展示 首先我们打开服务端&#xff0c;把没有用的东西都删干净&#xff0c;包括备份的文件信息啊什么的 这个时候我们启动服务器 我们先用浏览器去看看 什么东西都没有。 好&#xff0c;我们现在去启动客户端&#xff0c;下面这个是客…...

嵌入式 Linux Platform 驱动模型测试

文章目录 一、为什么要用 Platform 驱动模型&#xff1f; 二、Platform 驱动模型的三大核心组件 1.Platform 总线&#xff08;虚拟总线&#xff09; 2.Platform 设备&#xff08;platform_device&#xff09; 3.Platform 驱动&#xff08;platform_driver&#xff09; 三、Plat…...

Linux:web服务nginx

一.Nginx简介 Nginx (engine x) 是一个高性能的Web和反向代理服务器&#xff0c;同时也是一个 IMAP/POP3/SMTP 代理服器。Nginx处理高并发能力是十分强大的&#xff0c;能经受高负载的考验。而且支持热部署&#xff0c;几乎可以做到 7 * 24 小时不间断运行&#xff0c;即使运行…...

【“星睿O6”评测】Armv9.2a、KLEIDIAI及vulkan加速llamacpp部署本地AI

llamacpp 简介 llama.cpp 的主要目标是通过最小的设置&#xff0c;实现 LLM 推理&#xff0c;在各种硬件上&#xff08;无论是本地还是云端&#xff09;提供最先进的性能。 纯 C/C实现&#xff0c;无任何依赖苹果 M1/M2 芯片&#xff08;Apple silicon&#xff09;优化&#…...

Advanced Installer 22.5打包windows 安装包

Advanced Installer 22.5打包windows 安装包 1、打开Advanced Installer 22.5打包工具&#xff0c;绿色免安装下载链接&#xff1a;https://download.csdn.net/download/LongtengGensSupreme/90778405 2、选择需要打包的文件 3、设置安装文件夹权限 4、安装参数设置 5、构建设…...

Qt界面设计时窗口中各控件布局及自适应方法

在进行Qt界面设计时,往往会因为控件的布局以及伴随窗口拉伸时控件没有做好自适应部署而导致界面效果大打折扣。 这里简单介绍一下QtDesigner实现界面自适应布局,包括水平布局、垂直布局、栅格布局应用,确保界面元素随窗口变化自动调整。 图1 如图所示,这是我们的设计目标…...

添加地形与自定义地形

在先前我们设置的地图中,放大后不难发现这是2d平面 此时我们可以使用cesium自带的方法对图层进行修改 terrainProvider:Cesium.createWorldTerrainAsync(_) 修改后重新打开地图明显有了3d效果 还可以自定义添加水纹效果 requestWaterMask: true, // 可选&#xff1a;请求水面掩…...

livedata使用,完整的livedata的Demo

完整 LiveData Demo&#xff08;Java 实现&#xff09; 下面是一个可直接运行的完整 LiveData 示例&#xff0c;包含 ViewModel、LiveData 的基本使用以及与 UI 的交互。 项目结构 app/ ├── java/ │ ├── com.example.livedatademo/ │ │ ├── MainActivity.java │ …...

SpringBoot+Vue全栈的一个简单入门案例

目录 开发环境 Github开源项目 入门一&#xff1a;跑起别人的开源项目 跑起前端Vue 跑起后端SpringBoot 运行效果 入门二&#xff1a;将HTML模板转成Vue组件 下载一个免费的HTML模板 通过Trae将HTML转成Vue组件 将生成Vue组件增加为Vue的一个路由节点 运行Vue看看效…...

Nginx 性能调优与深度监测全攻略

目录 Nginx 性能调优与深度监测全攻略 一、引言 二、Nginx 核心性能调优策略 2.1 基础参数优化 2.1.1 worker 进程配置 2.1.2 事件驱动模型优化 2.2 缓存与资源优化 2.2.1 静态资源缓存 2.2.2 反向代理缓存 2.3 网络与连接优化 2.3.1 TCP 参数调整 2.3.2 Keep-Aliv…...

bad interpreter: No such file or directory

shell脚本加sqlite插入语句&#xff0c;内容如下&#xff1a; #!/bin/bash # 数据库文件路径 DB_FILE"/opt/ecu/db/Test.db" # 检查数据库文件所在目录是否存在&#xff0c;若不存在则创建 DB_DIR$(dirname "$DB_FILE") if [ ! -d "$DB_FILE" ]…...

python安装pyqt5失败

记录 PyQt5不支持3.10及以上版本&#xff0c;pip install PyQt5时报错raise PyProjectOptionException(qmake 详细错误信息如下&#xff1a; $ pip install PyQt5 Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple Collecting pyqt5Using cached https://pypi…...

【风控】模型监控和异常处理

在风控模型的全生命周期中&#xff0c;模型监控与异常处理是保障模型持续、稳定、可靠运行的关键环节。本指南旨在提供系统化、可落地的监控指标、预警策略及异常处置流程&#xff0c;帮助团队快速定位、响应并修复线上模型问题&#xff0c;最大限度降低风险。 1.模型监控与预…...

高并发内存池(一):项目简介+定长内存池的实现

目录 一&#xff0c;项目介绍 二&#xff0c;什么是内存池 1&#xff0c;池化技术 2&#xff0c;内存池 3&#xff0c;内存池主要解决的问题 4&#xff0c;malloc 三&#xff0c;实现一个定长内存池 定长内存池的设计 大致结构 核心功能实现 申请一块大小为T的内存 释…...

STM32--TIM--函数

void TIM_ITConfig(TIM_TypeDef* TIMx, uint16_t TIM_IT, FunctionalState NewState) 用于使能或禁用指定的定时器中断。...

文生图(Text-to-Image)的发展

文章目录 1. 早期探索&#xff08;2010-2015&#xff09;&#xff1a;传统方法与初步尝试2. 文本条件GAN时代&#xff08;2016-2019&#xff09;3. 自回归与VQ-VAE时代&#xff08;2019-2021&#xff09;4. 扩散模型革命&#xff08;2021-2022&#xff09;(1) 扩散模型基础突破…...

vscode预览模式(点击文件时默认覆盖当前标签,标签名称显示为斜体,可通过双击该标签取消)覆盖标签、新窗打开

文章目录 VS Code 预览模式如何取消预览模式&#xff08;即“固定”标签页&#xff09;&#xff1f;预览模式有什么用&#xff1f; VS Code 预览模式 在 VS Code 中&#xff0c;当你单击文件浏览器&#xff08;例如&#xff0c;资源管理器侧边栏&#xff09;中的某个文件时&am…...

热部署相关

手动热部署 启动热部署后代码进行修改可以不用重启整个项目Carl F9修改的代码就可以直接生效了 热部署只进行重启的操作而不用进行重载的操作 自动热部署 自定义重启排除项 关闭热部署 ture为开启热部署false为关闭 如果直接在application.yml里写可能会被其他优先级更高的配…...

高防ip是怎么做到分布式防御的

高防IP的分布式防御体系通过多维度技术协同实现攻击流量的分散处理与智能拦截&#xff0c;其核心机制可从以下五个层面解析&#xff1a; ​​一、全球节点网络布局​​ ​​多区域节点覆盖​​ 在全球关键互联网枢纽&#xff08;如北美、欧洲、亚太&#xff09;部署清洗中心&am…...

结构可视化:利用数据编辑器剖析数据内在架构​

结构可视化聚焦于展示数据的内部结构和各部分之间的关系&#xff0c;使企业能够深入理解数据的组织方式和层次体系&#xff0c;从而更好地进行数据管理和分析。通过结构可视化&#xff0c;企业可以清晰地看到数据的层次结构、关联关系以及数据流动路径&#xff0c;为数据驱动的…...

QT编程练习20250507

#include <stdio.h> // 包含标准输入输出库 #include <stdlib.h> // 包含通用工具库&#xff08;如malloc, free等&#xff09; #include <string> // 包含C string类定义 #include <iostream> // 包含C输入输出流库using namespace std; // 使用st…...

【软件设计师:算法】3.排序算法

一、排序 将一组杂乱无章的数据按一定的规律次序排列起来。 排序的目的是什么? 便于查找!排序算法的好坏如何衡量? 时间效率——排序速度(即排序所花费的全部比较次数)空间效率——占内存辅助空间的大小稳定性——若两个记录A和B的关键字值相等,但排序后A、B的先后次序保…...

Linux 内核学习(7) --- 字符设备驱动

字符设备驱动程序 Linux 中主要有三类设备的驱动程序&#xff0c;分别是字符设备驱动程序&#xff0c;块设备驱动程序和网络设备驱动程序 字符设备是指在 I/O 传输过程中以字符为单位进行传输的设备&#xff0c;例如键盘&#xff0c;打印机等&#xff0c;字符设备的驱动程序结…...

vue3+vite项目引入tailwindcss

从2025年1月tailwindcss4.0发布开始使用tailwindcss比之前简化很多 1,安装 yarn add tailwindcss tailwindcss/vite2,配置vite.config.js import tailwindcss from tailwindcss/vite;...plugins: [tailwindcss(),...] ...3,在主css文件顶部添加 注意一定是css文件,不能是sc…...

IIS配置SSL

打开iis 如果搜不到iis&#xff0c;要先开 再搜就打得开了 cmd中找到本机ip 用http访问本机ip 把原本的http绑定删了 再用http访问本机ip就不行了 只能用https访问了...

LeetCode:对称二叉树

1、题目描述 给你一个二叉树的根节点 root &#xff0c; 检查它是否轴对称。 示例 1&#xff1a; 输入&#xff1a;root [1,2,2,3,4,4,3] 输出&#xff1a;true 示例 2&#xff1a; 输入&#xff1a;root [1,2,2,null,3,null,3] 输出&#xff1a;false 提示&#xff1a; 树中…...

6天从0到精通:MySQL基础快速入门指南

放在前头 6天从0到精通&#xff1a;MySQL基础快速入门指南 6天从0到精通&#xff1a;MySQL基础快速入门指南 在数据驱动的时代浪潮下&#xff0c;MySQL作为全球最受欢迎的开源关系型数据库管理系统之一&#xff0c;广泛应用于Web开发、数据分析、云计算等多个领域。无论是刚…...

信息论12:从信息增益到信息增益比——决策树中的惩罚机制与应用

从信息增益到信息增益比&#xff1a;决策树中的惩罚机制与应用 引言&#xff1a;当"信息量"遇到"公平性" 在2018年某银行的信用卡风控系统中&#xff0c;数据分析师发现一个诡异现象&#xff1a;客户ID号在决策树模型中竟成为最重要的特征。这个案例揭示…...

C++ -- 哈希扩展

目录 位图 位图概念 位图的实现 位图应用 布隆过滤器 布隆过滤器的提出 布隆过滤器概念 布隆过滤器的插入 布隆过滤器的查找 布隆过滤器的删除 位图 给40亿个不重复的无符号整数&#xff0c;没排过序。给一个无符号整数&#xff0c;如何快速判断一个数是否在这40亿个数…...

AI大模型分类以及Prompt优化技巧

目录 一、AI大模型分类 1、按模态分类 2、按开源性分类 3、按规模分类 4、按用途分类 如何对比和选择大模型 二、Token 如何计算 Token 如何估算Token成本 三、Prompt工程 Prompt优化技巧 基础提示技巧 1、明确指定任何和角色 2、提供详细说明和具体示例 3、使用…...

将本地项目提交到新建的git仓库

方式一: # 登录git&#xff0c;新建git仓库和指定的分支&#xff0c;如master、dev# 下载代码&#xff0c;默认下载master分支 git clone http://10.*.*.67/performance_library/pfme-*.git # 切换到想要提交代码的dev分支 git checkout dev# 添加想要提交的文件 git add .#…...

【wpf】10 C#树形控件高效实现:递归构建与路径查找优化详解

在WPF应用程序开发中&#xff0c;树形控件的实现是常见且具有挑战性的需求。本文将深入解析一套高效树形结构的实现方案&#xff0c;包含递归构建、路径查找优化、动态交互等多个关键技术点。 一、递归构建树形结构 private TreeItem CreateTreeViewItem(TreeNode node) {var…...

低空科技护航珞樱春色,技术引领助推广阔应用

春风拂珞珈&#xff0c;樱海绽放时。赏樱季已接近尾声&#xff0c;作为武汉大学测绘遥感信息工程全国重点实验室的成果转化科技型企业&#xff0c;大势智慧积极参与校园的智能化建设&#xff0c;助力武汉大学的樱花季巡航管理&#xff0c;打造更为安全、有序的赏樱体验。 低空…...

Tiny Machine Learning在人类行为分析中的全面综述

论文标题&#xff1a; 中文&#xff1a;《Tiny Machine Learning在人类行为分析中的全面综述》 英文&#xff1a;A Comprehensive Survey on Tiny Machine Learning for Human Behavior Analysis 作者信息&#xff1a; Ismail Lamaakal, Student Member, IEEE, Siham Essahr…...

8.12 GitHub Sentinel企业级进化:容器化优化×AI监控,效率提升300%实战

GitHub Sentinel 扩展优化与商业化演进路径 关键词:企业级 Agent 扩展性设计、容器化部署优化、多格式报告生成、第三方服务集成、SaaS 服务架构 1. 功能扩展方向 1.1 多格式报告生成技术实现 采用模板引擎与文件流处理技术实现动态报告生成: #mermaid-svg-2BhQlvVsDp5NdL…...

算法-时间复杂度和空间复杂度

刷算法必备时间和空间复杂度&#xff0c;记录下方便查询。 时间复杂度 概念 时间复杂度衡量的是算法 执行所需的时间 随输入规模 n 增长的变化趋势&#xff0c;用大O 表示法描述&#xff08;通常是看这个循环&#xff09;。 分类 常数时间O(1) 无论输入多大&#xff0c;执行…...

springboot国家化多语言实现

前言 公司在做国际化项目时需要匹配多语言环境&#xff0c;通过spring实现i18n国际化方便快捷 项目结构 src/ ├── main/ │ ├── java/ │ │ └── com/example/i18ndemo/ │ │ ├── config/ # 配置类 │ │ ├── controller/ # …...

第2章 算法分析基础

2-1 算法的时间复杂度分析 2.1.1 输入规模与基本语句 输入规模&#xff1a;算法处理数据的规模&#xff0c;通常用 n 表示。 基本语句&#xff1a;执行次数与输入规模直接相关的关键操作。 例2.1 顺序查找 int SeqSearch(int A[], int n, int k) { for (int i 0; i < n…...

vue2 计算属性 computed

计算属性他是一个属性&#xff0c;他不是一个函数&#xff0c;使用的时候不要加括号 reduce reduce 是 JavaScript 数组的一个高阶函数&#xff0c;用于对数组中的每个元素执行一个​​累积计算​​&#xff0c;最终返回一个单一的值。...

Milvus 向量数据库详解与实践指南

一、Milvus 核心介绍 1. 什么是 Milvus&#xff1f; Milvus 是一款开源、高性能、可扩展的向量数据库&#xff0c;专门为海量向量数据的存储、索引和检索而设计。它支持近似最近邻搜索&#xff08;ANN&#xff09;&#xff0c;适用于图像检索、自然语言处理&#xff08;NLP&am…...

记录一次 python 文件环境变量配置-sqlmap.py

第一步&#xff1a;环境变量配置 C:\Users\14913\Downloads\application\3.secure\sqlmap-2025.5.6 或者 C:\Users\14913\Downloads\application\3.secure\sqlmap-2025.5.6 都可以&#xff01; 第二步 使用 第一步&#xff1a;不再进目录 第二步&#xff1a;不再python … s…...

使用大语言模型进行机器人规划(Robot planning with LLMs)

李升伟 编译 长期规划在机器人学领域可以从经典控制方法与大型语言模型在现实世界知识能力的结合中获益。 在20世纪80年代&#xff0c;机器人学和人工智能&#xff08;AI&#xff09;领域的专家提出了莫雷奇悖论&#xff0c;观察到人类看似简单的涉及移动和感知的任务&#x…...

STM32 CAN总线

目录 定时传输CAN简介和硬件电路 CAN简介 主流通信协议对比 ​编辑 CAN硬件电路 ​编辑 CAN电平标准 CAN收发器 – TJA1050&#xff08;高速CAN&#xff09; CAN物理层特性 帧格式 数据帧 遥控帧 错误帧 过载帧 ​编辑 帧间隔 ​编辑 位填充 波形实例 位…...