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

【GPU编程】Visual Studio创建基于GPU编程的项目

vs创建基于GPU编程的项目

  • 🍊前言
  • 🐸方法一-CUDA Runtime生成
    • 😝debug设置
  • 🍅方法二-空项目配置
  • 🍉🍉🍉代码验证

🍊前言

cuda以及cudnn的安装以及系统环境变量的配置默认已经做完。如果没有安装好配置好的,可以参考其他的博客。本博客只为记录在完成以上配置后,如何在vs端创建GPU编程的项目。

🐸方法一-CUDA Runtime生成

我们打开vs,点击创建新项目:
在这里插入图片描述
然后在右侧选择到cuda runtime,具体是什么版本 看你装的是什么版本 因人而异:
在这里插入图片描述
创建完毕后,软件会自动生成一段基于GPU编程的代码,运行之后如果能正常出结果,说明你的CUDA安装和CUDNN的安装与系统环境配置没有问题了:
在这里插入图片描述
运行这个.cu后缀名的代码,得到结果:
在这里插入图片描述
则说明我们的第一个CUDA编程的代码跑通了。

😝debug设置

我们创建完项目之后,正常运行没问题的话,就可以开始完成我们的GPU编程了,但在写代码的过程中,难免会遇到bug,这时候如果我们想通过打断点的方式去调试,程序却无法在断点处终止,而是每次都执行完毕,这是因为我们创建的项目默认给我们设置了无法debug的模式,我们只需要点击项目:
在这里插入图片描述
打开项目属性:
在这里插入图片描述
把红箭头指向的地方选择是。
在这里插入图片描述
这边也同样将选择的地方选择成是。

🍅方法二-空项目配置

创建好之后,我们右键项目名称,选择生成依赖项,再选择生成自定义:
在这里插入图片描述
勾选我们想要的CUDA版本。
点击空项目创建好项目之后,右键源文件,创建一个.cu为后缀名的代码文件:
在这里插入图片描述
名称自己随便定义。
右键点击刚才创建好的.cu后缀名的文件,选择属性,点击常规,在项类型中选择CUDA C/C++即可:
在这里插入图片描述
然后打开项目属性页,开始配置路径:
首先是包含目录:
在这里插入图片描述
然后是库目录:
在这里插入图片描述
然后是链接器的附加库目录:
在这里插入图片描述
然后,我们在桌面或者随便在哪个可以创建txt的地方,新建一个txt文件夹,命名为res.txt:
在这里插入图片描述
将这个txt复制到这个路径下:
在这里插入图片描述
打开终端,cd到这个路径里面,输入:

DIR *.lib /B > res.txt

在这里插入图片描述
然后我们再打开res.txt,则可以发现里面已经写入了这个路径下的所有lib依赖项的名字了。
在这里插入图片描述
然后我们复制所有的这些名称,拷贝到链接器-输入的附加依赖项中:
在这里插入图片描述
最后点击应用,然后确定。
最后记得将这两个位置设置成一样的:
在这里插入图片描述
设置debug的方式见方法一的最后。

🍉🍉🍉代码验证

这里我们准备一串基于GPU编程的代码:

#include <device_launch_parameters.h>
#include <cuda_runtime.h>
#include <iostream>
#include <cuda.h>
#include <vector>using namespace std;//基于GPU的矢量求和
#define N 10__global__ void add(int* a_ptr, int* b_ptr, int* c_ptr)
{int tid = blockIdx.x;if (tid < N){c_ptr[tid] = a_ptr[tid] + b_ptr[tid];}
}int main()
{/*std::vector<int> a(N), b(N), c(N);int* a_ = &a[0], * b_ = &b[0], * c_ = &c[0];*/int a[N], b[N], c[N];int* a_ptr, * b_ptr, * c_ptr;//在CPU上分配内存cudaMalloc((void**)&a_ptr, N * sizeof(int));cudaMalloc((void**)&b_ptr, N * sizeof(int));cudaMalloc((void**)&c_ptr, N * sizeof(int));//在cpu上为数组赋值for (int i = 0; i < N; i++){a[i] = -i;b[i] = i * i;}//将数组a和数组b复制到GPU上cudaMemcpy(a_ptr, a, N * sizeof(int), cudaMemcpyHostToDevice);cudaMemcpy(b_ptr, b, N * sizeof(int), cudaMemcpyHostToDevice);//N表示在执行核函数时使用的并行线程块的数量。add << <N, 1 >> > (a_ptr, b_ptr, c_ptr);//将运算结果从GPU拷贝到CPUcudaMemcpy(c, c_ptr, N * sizeof(int), cudaMemcpyDeviceToHost);//显示结果for (int i = 0; i < N; i++){cout << a[i] << "+" << b[i] << "=" << c[i] << endl;}cudaFree(a_ptr);cudaFree(b_ptr);cudaFree(c_ptr);return 0;
}

运行之后可以得到结果:
在这里插入图片描述
则说明基于GPU编程的项目创建成功了。

相关文章:

【GPU编程】Visual Studio创建基于GPU编程的项目

vs创建基于GPU编程的项目 &#x1f34a;前言&#x1f438;方法一-CUDA Runtime生成&#x1f61d;debug设置 &#x1f345;方法二-空项目配置&#x1f349;&#x1f349;&#x1f349;代码验证 &#x1f34a;前言 cuda以及cudnn的安装以及系统环境变量的配置默认已经做完。如果…...

MySQL面试题-索引的基本原理及相关面试题

先了解一下MySQL的结构 下面我们重点讲一下存储引擎 MySQL的数据库和存储数据的目录是一一对应的&#xff0c;这些数据库的文件就保存在磁盘中对应的目录里 下面我们来看一下对应的具体数据文件 .frm是表的结构&#xff0c;不管什么样的索引都会有 .ibd代表我们现在使用的存…...

MySQL学习笔记19

MySQL日志文件&#xff1a;MySQL中我们需要了解哪些日志&#xff1f; 常见日志文件&#xff1a; 我们需要掌握错误日志、二进制日志、中继日志、慢查询日志。 错误日志&#xff1a; 作用&#xff1a;存放数据库的启动、停止和运行时的错误信息。 场景&#xff1a;用于数据库的…...

为什么u盘在mac上显示不出来

插入U盘是个看似简单的操作&#xff0c;但有时候在Mac电脑上却出现了无法显示U盘的情况。这样的问题是非常让人头疼的&#xff0c;特别是当你急需使用U盘中的文件时。那么&#xff0c;究竟为什么U盘在Mac上会显示不出来呢&#xff1f;今天就让我们一起来深入了解一下这个问题&a…...

【golang】调度系列之sysmon

调度系列 调度系列之goroutine 调度系列之m 调度系列之p 在golang的调度体系中&#xff0c;除了GMP本身&#xff0c;还有另外一个比较重要的角色sysmon。实际上&#xff0c;除了GMP和sysmon&#xff0c;runtime中还有一个全局的调度器对象。但该对象只是维护一些全局的数据&…...

货物寄到英国选择什么物流比较划算?

随着全球化的发展&#xff0c;越来越多的企业开始将产品销售到海外市场&#xff0c;其中英国作为一个重要的贸易伙伴&#xff0c;吸引了大量的中国企业的关注。然而&#xff0c;如何将货物安全、快速地运送到英国&#xff0c;成为了众多企业面临的一个问题。那么&#xff0c;货…...

vite + react 基本项目搭建

新建项目步骤略过 1、下载scss 无需任何配置就可以直接使用scss了 pnpm install sass使用scss配置全局颜色变量 新建/src/styles/variable.scss并在 $primary: #76aef9在vite.cinfig.js里配置 export default defineConfig({css: {preprocessorOptions: {scss: {javascrip…...

一个方法解决三道区间问题

1288. 删除被覆盖区间 56. 合并区间 986. 区间列表的交集 # 1288. 删除被覆盖区间 class Solution:def removeCoveredIntervals(self, intervals: List[List[int]]) -> int:# 按照起点升序排列&#xff0c;起点相同时&#xff0c;按照终点降序排列intervals.sort(key lamb…...

sub0 里斯本精彩回顾:探索波卡区块的创新空间

sub0 Europe 2023 已在葡萄牙里斯本圆满结束&#xff01;sub0 大会是波卡生态开发者大会&#xff0c;由波卡协议的主要开发方 Parity Technologies 举办的开发者大会&#xff0c;汇聚了全球 Substrate 开发者和学习者&#xff0c;旨在为 Polkadot 和 Kusama 生态的开发者、贡献…...

颜色+情感的英语表达还有这些,零基础学英语口语去哪里,柯桥有推荐的吗?

当我们探讨关于"blue"&#xff08;蓝色&#xff09;的多义性时&#xff0c;我们会发现英语中有许多其他词汇也有类似的双关意义。 既可以表示一种颜色或物理属性&#xff0c;又可以代表一种情感或心理状态。 这种现象在语言中很常见&#xff0c;反映了语言的丰富性和…...

exoplayer的使用-6,播放器的选择

需要一个能播放蓝光的,高码率的播放器,在使用现成的播放器的基础上,可选的有几个,exoplayer,vlc,ijk,mpv. exoplayer的更新频繁,适应性强,扩展性一般,因为它基于系统的硬解,音频可扩展,使用ffmpeg可以解决. 有国际化支持,音频,字幕这些显示效果好. 对杜比视频,hdr这些支持看设…...

Windows上安装 Go 环境

一、下载go环境 下载go环境&#xff1a;Go下载官网链接找到自己想下载的版本&#xff0c;点击下载&#xff0c;比如我这是windows64位的&#xff0c;我就直接点击最新的。 二、安装go环境 双击下载的.msi文件 next next 他默认的是c盘&#xff0c;你自己可以改&#xff0c;然…...

【设计模式】四、工厂模式

文章目录 概述工厂模式简单工厂模式&#xff1a;工厂方法模式抽象工厂模式小结 概述工厂模式 传统方式&#xff1a; 简单工厂模式&#xff1a; 简单工厂模式的设计方案: 定义一个可以实例化 Pizaa 对象的类&#xff0c;封装创建对象的代码。 存在的问题&#xff1a; 简单工厂…...

十九,镜面IBL--BRDF积分贴图

再回顾下镜面部分的分割求和近似法 现在关注第二部分 最后可化为 也就是说&#xff0c;这两部分积分可以获得F0的系数和F0的偏差。 这两个值可以存储到BRDF积分贴图的RG部分。void main() { vec2 integratedBRDF IntegrateBRDF(TexCoords.x, TexCoords.y); FragColor …...

Linux 创建 终止线程(thread)

进程线程区别 创建线程 #include <pthread.h> int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg); -功能&#xff1a;创建一个子线程&#xff0c;一般情况下main函数所在的线程称为主线程&#xff0c;…...

【IPC 通信】信号处理接口 Signal API(6)

收发信号思想是 Linux 程序设计特性之一&#xff0c;一个信号可以认为是一种软中断&#xff0c;通过用来向进程通知异步事件。 本文讲述的 信号处理内容源自 Linux man。本文主要对各 API 进行详细介绍&#xff0c;从而更好的理解信号编程。 kill(2) 遵循 POSIX.1 - 2008 1.库 …...

ipaguard界面概览

ipaguard界面概览 ipaguard界面分左右2块&#xff1a;左边菜单导航栏&#xff0c;右边的功能区 左侧菜单&#xff1a;按模块分成启动界面&#xff0c;代码模块&#xff0c;文件模块&#xff0c;重签名与测试模块 右侧主功能区会随着功能变化&#xff0c;但是整体分3块&#xf…...

萌新的FPGA学习绪论-1

萌新的FPGA学习绪论-1 其实很多的课和内容都是相通的 我在跑完单周期的RiscV时候 虽然最后还差点意思但是基本的逻辑实现没有特别大的问题 过两天写一个Spec文档说明一下 由于开始一个新的设计 所以对于RiscV的设计暂时放到一边希望我能在接下来的时间内尽快完成 暂时不说这个…...

目标检测算法改进系列之Backbone替换为EMO

EMO&#xff1a;结合 Attention 重新思考移动端小模型中的基本模块 近年来&#xff0c;由于存储和计算资源的限制&#xff0c;移动应用的需求不断增加&#xff0c;因此&#xff0c;本文的研究对象是端侧轻量级小模型 (参数量一般在 10M 以下)。在众多小模型的设计中&#xff0…...

Laravel一些优雅的写法

1. 新增操作 // 原则&#xff0c;所有服务类只有一个public入口,或者多个public入口&#xff0c;但是他们做都是同一件事情 Class CreateService {// 创建类的入口, 根据dto去新建public function create(Dto $dto){// 先构建model对象, 不要在事务期间构建&#xff0c;减少事务…...

NoFences:重构桌面空间的区域化引擎

NoFences&#xff1a;重构桌面空间的区域化引擎 【免费下载链接】NoFences &#x1f6a7; Open Source Stardock Fences alternative 项目地址: https://gitcode.com/gh_mirrors/no/NoFences 副标题&#xff1a;三步打造个性化桌面系统 痛点分析&#xff1a;你的桌面是…...

告别卡顿与路径混乱:手把手教你配置ArcMap 10.x的个性化工作环境

告别卡顿与路径混乱&#xff1a;手把手教你配置ArcMap 10.x的个性化工作环境 ArcMap作为GIS领域的经典工具&#xff0c;其功能强大但默认配置往往无法满足专业用户的效率需求。许多GIS从业者都经历过这样的困扰&#xff1a;软件启动缓慢、数据路径杂乱无章、常用工具隐藏过深。…...

OpenFeign性能优化最全实战

Feign 就是动态代理 模板化 HTTP 请求&#xff0c;帮你把接口方法自动转成 HTTP 调用。 完整执行流程&#xff08;8 步&#xff09; 启动时&#xff1a;FeignClient 接口被 Feign 扫描&#xff0c;生成动态代理类 调用时&#xff1a;执行接口方法 → 进入代理类 解析注解&…...

保姆级教程:用Halcon的cooc_feature_image算子搞定LCD屏幕缺陷检测(附完整代码)

工业级LCD屏幕缺陷检测实战&#xff1a;Halcon纹理特征分析与优化策略 在液晶显示屏&#xff08;LCD&#xff09;制造过程中&#xff0c;微米级的缺陷可能导致产品报废。传统人工检测不仅效率低下&#xff0c;且漏检率高达15%-30%。Halcon的cooc_feature_image算子通过灰度共生…...

科研人高效投稿指南:Paperxie AI 期刊论文写作,让你的成果更快见刊

paperxie-免费查重复率aigc检测/开题报告/毕业论文/智能排版/文献综述/期刊论文https://www.paperxie.cn/ai/journalArticleshttps://www.paperxie.cn/ai/journalArticles 一、开篇&#xff1a;被期刊论文困住的科研人&#xff0c;你不是一个人 做实验时可以通宵达旦&#xff…...

claude code 使用

1&#xff0c;模型更换进入C盘目录 C:\Users\****\.claude 找到 settings.json这个是通义千问模型{"env": {"ANTHROPIC_AUTH_TOKEN": "sk-3db74945b4a****","ANTHROPIC_BASE_URL": "https://dashscope.aliyuncs.com/apps/anthro…...

Studio 3T 2026.6 (macOS, Linux, Windows) - MongoDB 的终极 GUI、IDE 和 客户端

Studio 3T 2026.6 (macOS, Linux, Windows) - MongoDB 的终极 GUI、IDE 和 客户端 The Ultimate GUI, IDE and client for MongoDB 请访问原文链接&#xff1a;https://sysin.org/blog/studio-3t/ 查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sy…...

开箱即用版Sambert语音合成:多情感AI配音部署与使用

开箱即用版Sambert语音合成&#xff1a;多情感AI配音部署与使用 1. 引言&#xff1a;多情感语音合成的价值与挑战 在智能客服、有声读物、虚拟主播等应用场景中&#xff0c;富有情感表现力的语音合成技术正变得越来越重要。传统语音合成系统往往只能生成单调机械的语音&#…...

ComfyUI自定义节点开发指南:从零构建你的专属AI工具链

1. 为什么需要自定义ComfyUI节点&#xff1f; 第一次用ComfyUI做AI绘画时&#xff0c;我就被它灵活的节点式操作吸引了。但用着用着发现一个问题&#xff1a;官方提供的节点虽然强大&#xff0c;但总有些特殊需求无法满足。比如想给生成的图片自动打水印、批量处理文件夹里的图…...

为什么你的Monte Carlo期权定价结果总偏差>8%?:揭秘随机数种子、路径步长与方差缩减的3重陷阱

第一章&#xff1a;Monte Carlo期权定价偏差的典型现象与问题界定Monte Carlo方法在欧式、亚式及路径依赖型期权定价中广泛应用&#xff0c;但其数值结果常表现出系统性偏差——并非源于算法逻辑错误&#xff0c;而是由随机采样、方差结构与边界处理等多重因素耦合所致。实践中…...