vscode和Visual Studio里利用cuda核函数进行加速简单例子讲解
要让 .cpp 调用 .cu核心原则只有一条.cu 交给 nvcc 编译.cpp 交给 clMSVC或 g 编译两者通过「公共头文件 普通 C 函数」对接最后由链接器拼成一个 exe。 这种 CUDA 语法绝对不能出现在 .cpp 里否则 MSVC 直接报语法错误。下面先给对接代码骨架再分别讲 Visual Studio 和 VS Code 的配置。一、先把代码拆成三份这是所有配置的前提gray.h —— 两边共用的头文件结构体布局 函数声明必须完全一致#pragma once#ifdef __cplusplusextern “C” { // 防止名字修饰不同导致 LNK2019#endifstruct RGBPixel {unsigned char r, g, b;};// 注意这里只声明一个普通宿主机函数不暴露内核void rgbToGrayCUDA(const RGBPixel* h_rgb, unsigned char* h_gray, int width, int height);#ifdef __cplusplus}#endif|kernel.cu —— 你的代码只需包含上面的头#include “gray.h”#include cuda_runtime.h#include device_launch_parameters.hglobalvoid rgbToGrayKernel(const RGBPixel* d_rgb, unsigned char* d_gray, int w, int h) {int x blockIdx.x * blockDim.x threadIdx.x;int y blockIdx.y * blockDim.y threadIdx.y;if (x w || y h) return;int idx y * w x;d_gray[idx] (unsigned char)((77 * d_rgb[idx].r 150 * d_rgb[idx].g 29 * d_rgb[idx].b) 8);}void rgbToGrayCUDA(const RGBPixel* h_rgb, unsigned char* h_gray, int width, int height) {size_t rgbSize width * height * sizeof(RGBPixel);size_t graySize width * height * sizeof(unsigned char);RGBPixel* d_rgb nullptr; unsigned char* d_gray nullptr; cudaMalloc(d_rgb, rgbSize); cudaMalloc(d_gray, graySize); cudaMemcpy(d_rgb, h_rgb, rgbSize, cudaMemcpyHostToDevice); dim3 block(16, 16); dim3 grid((width 15) / 16, (height 15) / 16); rgbToGrayKernelgrid, block(d_rgb, d_gray, width, height); cudaDeviceSynchronize(); // 实际项目建议用宏检查错误 cudaMemcpy(h_gray, d_gray, graySize, cudaMemcpyDeviceToHost); cudaFree(d_rgb); cudaFree(d_gray);}main.cpp —— 纯 C看不到任何 CUDA 语法#include “gray.h”#include#includeint main() {const int W 640, H 480;std::vector rgb(W * H, {255, 128, 0});std::vector gray(W * H, 0);rgbToGrayCUDA(rgb.data(), gray.data(), W, H); std::cout gray[0] (int)gray[0] std::endl; // 期望 ≈ 179}只要这三份文件能一起参与构建、且链接时带上 cudart.lib事情就成了。剩下的都是工具链配置问题。二、Visual Studio推荐最省事前提安装 CUDA Toolkit 时必须勾选「Visual Studio Integration」已装过的话可在 Installer 里“更改”补装。重启 VS。方案 1直接用 CUDA 项目模板新项目文件 → 新建 → 项目搜索 CUDA 12.x Runtime会生成带 .cu 和正确属性表的项目。把你的 main.cpp 加进去即可什么都不用调。方案 2现有 C 项目接入 .cu你大概率是这个平台选 x64CUDA 不支持 Win32。右键项目 → 生成依赖项 → 生成自定义 → 勾选 cuda 12.x这一步是让 VS 认识 .cu 文件的关键。把 kernel.cu 拖进项目 → 右键该文件 → 属性 → 项类型 选 CUDA C/C做完第 2 步才有这个选项。main.cpp 保持项类型 C/C 编译器。可选但建议CUDA C/C → Device → Code Generation填 compute_75,sm_75按你的显卡算力改Turing75、Ampere86、Ada89。不填则默认一堆架构编译很慢。链接器 → 输入 → 附加依赖项确认有 cudart.lib模板一般已自带。F5 运行。如果以后有多个 .cu 且互相调用device函数CUDA C/C → Device → 生成可重定位设备代码 是 (-rdctrue)链接器会自动做设备链接否则报 unresolved external。三、VS Code没有内置构建系统两条路路线 ACMake CMake Tools 扩展强烈推荐跨平台、跨编辑器通用装扩展 CMake Tools微软和 NVIDIA CMake Support可选。项目根目录放cmake_minimum_required(VERSION 3.18)project(gray LANGUAGES CXX CUDA)set(CMAKE_CUDA_ARCHITECTURES 75) # 按显卡改或写 “native”set(CMAKE_CXX_STANDARD 17)add_executable(gray main.cpp kernel.cu) # CMake 自动区分编译器并处理链接target_link_libraries(gray PRIVATE CUDA::cudart)然后 CtrlShiftP → CMake: Configure选 Ninja/MSVC 生成器底部状态栏点 Build 即可。好处是 IntelliSense 会自动继承 CMake 的包含路径和定义不用手动伺候头文件报错。路线 Btasks.json 直接调命令行轻量、单文件项目.vscode/tasks.jsonWindows MSVC 宿主{“version”: “2.0.0”,“tasks”: [{“label”: “build”,“type”: “shell”,“command”: “nvcc”,“args”: [“-o”, “gray.exe”, “main.cpp”, “kernel.cu”, “-lcudart”, “–use_fast_math”],“group”: { “kind”: “build”, “isDefault”: true },“problemMatcher”: “$msCompile”}]}注意三点必须在 x64 Native Tools Command Prompt 环境里启动 VS Code否则 nvcc 找不到 cl或者在 task 里先调用 vcvars64.bat。也可以分步编译nvcc -c kernel.cu → cl /c main.cpp → link main.obj kernel.obj cudart.lib /out:gray.exe。Linux 下更简单nvcc -o gray main.cpp kernel.cu 一条搞定。IntelliSense 飘红装了 CMake Tools 就让它自动配置若纯手动可在 .vscode/c_cpp_properties.json 的 includePath 里加上 CUDA 头目录如 C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v12.9/include。不要自己 #defineCUDACC会把标准头搞乱。四、一定会踩的几个坑五、顺手两点优化建议跟你前面问的性能相关访存已经是合并的idx ywidth x相邻线程读相邻像素这点写得对。想再快一截可以把输入改成 uchar4一次读 4 字节对齐并把输出按 uint每 4 像素合并写带宽利用率会明显提升。生产环境别裸写 cudaMalloc/cudaFree每次调用都走 PCIe 两次拷贝 分配释放小图开销比计算还大。改成预分配设备缓冲复用或用 CUDA Stream 做流水错误检查用一个 CUDA_CHECK 宏包起来否则 cudaDeviceSynchronize 静默失败很难排查。

相关新闻

符文世界:龙之荒野好友联机一键开服服务器教程

符文世界:龙之荒野好友联机一键开服服务器教程

《符文世界:龙之荒野》(RuneScape: Dragonwilds)是Jagex基于经典《RuneScape》世界观打造的开放世界生存RPG,1.0正式版已于2026年9月15日上线。玩家可独自或与最多3名好友(共4人)联机合作,探索烬…

2026/10/2 20:48:13 阅读更多 →
本地 AI 智能体 OpenClaw 搭建教程:Windows/Mac 一键配置与 TaoToken 接入

本地 AI 智能体 OpenClaw 搭建教程:Windows/Mac 一键配置与 TaoToken 接入

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/2 20:48:13 阅读更多 →
信息安全的核心目标通常概括为 **CIA 三元组**:机密性、完整性和可用性

信息安全的核心目标通常概括为 **CIA 三元组**:机密性、完整性和可用性

在软件设计师考试大纲中,信息安全通常归属于“网络与信息安全知识”模块。该模块在上午综合知识科目中约占 5 分,主要考查信息安全基本概念、加密与认证技术、网络安全防护技术、安全协议以及信息安全等级保护制度与相关法律法规。它不要求考生像信息安全…

2026/10/2 20:48:13 阅读更多 →

最新新闻

如何把 Windows 11 任务栏找回经典快速启动工具栏?ExplorerPatcher 8 分钟配置完整指南

如何把 Windows 11 任务栏找回经典快速启动工具栏?ExplorerPatcher 8 分钟配置完整指南

如何把 Windows 11 任务栏找回经典快速启动工具栏?ExplorerPatcher 8 分钟配置完整指南 【免费下载链接】ExplorerPatcher This project aims to enhance the working environment on Windows 项目地址: https://gitcode.com/GitHub_Trending/ex/ExplorerPatcher …

2026/10/2 21:26:36 阅读更多 →
Java 设计模式精讲:基于 Active Object 模式构建高效异步并发系统(附 java-design-patterns 源码剖析)

Java 设计模式精讲:基于 Active Object 模式构建高效异步并发系统(附 java-design-patterns 源码剖析)

示例工程教程 【免费下载链接】java-design-patterns Design patterns implemented in Java 项目地址: https://gitcode.com/GitHub_Trending/ja/java-design-patterns 点击查看 免费下载 导读:本文以开源仓库 java-design-patterns 中的 active-object…

2026/10/2 21:26:36 阅读更多 →
深耕计算机考研,助力码农突围 — 天任考研计算机科学与技术专项集训营正式启航

深耕计算机考研,助力码农突围 — 天任考研计算机科学与技术专项集训营正式启航

计算机科学与技术是近年来考研报考热度最高的专业之一。随着信息技术和人工智能产业快速发展,计算机类研究生就业薪资持续走高,吸引了大量本专业考生和跨专业考生报考。然而,计算机考研竞争异常激烈,408 计算机学科专业基础综合内…

2026/10/2 21:26:36 阅读更多 →
Candle 运行 XLM-RoBERTa 实战:Fill-Mask、Reranker 与文本分类三大任务指南

Candle 运行 XLM-RoBERTa 实战:Fill-Mask、Reranker 与文本分类三大任务指南

人工智能大模型机器学习深度学习本地部署模型推理服务 【免费下载链接】candle Minimalist ML framework for Rust 项目地址: https://gitcode.com/GitHub_Trending/ca/candle 点击查看 免费下载 本文基于 Candle 开源仓库中的 xlm-roberta 示例 与对应源码&#x…

2026/10/2 21:26:36 阅读更多 →
2025五一数学建模竞赛B题实战:矿山数据处理建模全流程与TaoToken辅助代码论文解析

2025五一数学建模竞赛B题实战:矿山数据处理建模全流程与TaoToken辅助代码论文解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/2 21:26:36 阅读更多 →
全模态数据平台:面向Agent的架构与落地实践

全模态数据平台:面向Agent的架构与落地实践

今年的云栖2026主题是"湖生万物,助力AI",其中被反复讨论的一个核心概念,就是面向Agent的全模态数据平台。做Agent开发的朋友应该都深有体会:模型能力越来越强,可肚子里的"货"却常常不够用。文本、…

2026/10/2 21:25:35 阅读更多 →

日新闻

从零搭建AI工程化:模型之外的完整闭环

从零搭建AI工程化:模型之外的完整闭环

先搞清楚一件事:从零开始做 AI 工程化,难的从来不是调模型、写提示词,而是把一套原型 Demo 变成长得像是“正经系统”的东西。你手里可能已经有了能跑通的代码,也可能刚读完一些概念,但真到了要把它变成可维护、可观测…

2026/10/2 0:00:20 阅读更多 →
大模型训练显存估计与混合精度训练实战指南

大模型训练显存估计与混合精度训练实战指南

1. 大模型训练显存估计与混合精度训练详解显存不够用,几乎是每个做大模型训练的人都会撞上的第一堵墙。你可能也经历过:模型代码写完了,数据管道跑通了,满心欢喜地按下训练启动脚本,结果几秒钟后终端弹出一行红字——C…

2026/10/2 0:00:20 阅读更多 →
小样本学习数据集选型指南:27个真正可用的高质量数据集

小样本学习数据集选型指南:27个真正可用的高质量数据集

1. 小样本学习的“弹药库”:为什么你总在找数据集,却总找不到真正能用的? 小样本、数据集——这两个词最近半年在我处理的200多个AI项目咨询里,出现频率排进前三。不是模型调不好,不是代码写不对,而是卡在…

2026/10/2 0:00:20 阅读更多 →

周新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/10/1 19:40:48 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/10/1 19:41:40 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/10/1 20:05:24 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/2 10:36:31 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/2 5:26:06 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/2 6:09:11 阅读更多 →