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

news2025/1/13 6:05:23

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拷贝到CPU
	cudaMemcpy(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编程的项目创建成功了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1030096.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

七天学会C语言-第六天(指针)

1.指针变量与普通变量 指针变量与普通变量是C语言中的两种不同类型的变量&#xff0c;它们有一些重要的区别和联系。 普通变量是一种存储数据的容器&#xff0c;可以直接存储和访问数据的值。&#xff1a; int num 10; // 定义一个整数型普通变量num&#xff0c;赋值为10在例…

【算法训练-二叉树 四】【对称与翻转】对称二叉树、翻转二叉树

废话不多说&#xff0c;喊一句号子鼓励自己&#xff1a;程序员永不失业&#xff0c;程序员走向架构&#xff01;本篇Blog的主题是【二叉树的形态变化】&#xff0c;使用【二叉树】这个基本的数据结构来实现&#xff0c;这个高频题的站点是&#xff1a;CodeTop&#xff0c;筛选条…

后端思维:通过代码去重,做一个后端通用模板

目录 后端思维 1. 优化前的例子 2. 抽取公用方法去重 3. 反射对比字段 4.Lambda函数式泛型 5. 继承多态. 6. 模板方法 6.1 定义对比模板的骨架 6.2 模板的方法逐步细化 6.3 不同对比子类 7. 工厂模式 模板方法 策略模式全家桶 最后 后端思维 最近工作中,我通过层层…

学Python的漫画漫步进阶 -- 第十二步.文件读写

学Python的漫画漫步进阶 -- 第十二步.文件读写 十二、文件读写12.1 打开文件12.2 关闭文件12.2.1 在finally代码块中关闭文件12.2.2 在with as代码块中关闭文件 12.3 读写文本文件12.4 动动手——复制文本文件12.5 读写二进制文件12.6 动动手——复制二进制文件12.7 练一练12.8…

Redis之list类型

文章目录 Redis之list类型1. 列表添加/弹出元素2. 查看列表3. 获取列表中元素的个数4. 删除列表中指定的值5. 获取/指定元素的值6. 向列表中插入元素7. 删除指定索引范围之外的所有元素8. 将元素从一个列表转移到另一个列表9. 应用场景9.1 队列9.2 类似微信上订阅公众号&#x…

MidJourneyAI绘画之月满中秋情更浓

皓月当空照人间&#xff0c; 银河洒满天幕间。 嫦娥轻舞婵娟态&#xff0c; 桂香飘散诗意添。 团圆乐享如意时&#xff0c; 家人相聚笑声吹。 中秋欢庆如诗意&#xff0c; 祝福平安好运气。

从网约车平台合规问题看企业合规难题如何破解

随着互联网的快速发展&#xff0c;网约车行业逐渐崛起并成为人们出行的重要选择之一。然而&#xff0c;虽然网约车平台带来了便利和效率&#xff0c;但也引发了一系列合规问题。 近日&#xff0c;西安市交通运输综合执法支队和西安市出租汽车管理处组织开展了西安市网约车行业…

Leetcode 95. 不同的二叉搜索树 II

文章目录 题目代码&#xff08;9.21 首刷看解析&#xff09; 题目 Leetcode 95. 不同的二叉搜索树 II 代码&#xff08;9.21 首刷看解析&#xff09; class Solution { public:vector<TreeNode*> generateTrees(int n) {return build(1,n);}vector<TreeNode*> bu…

singularity docker 拉取镜像 seurat和scapy spatial空转数据转换 cell2location

JiekaiLab/scDIOR: scDIOR: Single cell data IO softwaRe (github.com) module availablemodule load singularitysingularity pull docker://jiekailab/scdior-image:Seuratv4_Scanpy1.8 export PATH/seu_share/apps/singularity/bin/singularity:$PATH

C++数据结构题:DS 顺序表--连续操作

建立顺序表的类&#xff0c;属性包括&#xff1a;数组、实际长度、最大长度&#xff08;设定为 1000 &#xff09; 该类具有以下成员函数&#xff1a; 构造函数&#xff1a;实现顺序表的初始化。 插入多个数据的 multiinsert(int i, int n, int item[]) 函数&#xff0c;实…

vue 脚手架 入门 记录

vue 脚手架 入门 记录 以管理员身份运行PowerShell执行&#xff1a;get-ExecutionPolicy&#xff0c;回复Restricted&#xff0c;表示状态是禁止的 3.执行&#xff1a;set-ExecutionPolicy RemoteSigned 4.选择Y 注意&#xff1a;一定要以管理员的身份运行PowerShell&#xff…

Verilog功能模块——标准FIFO转FWFT FIFO

前言 在使用FIFO IP核时&#xff0c;我更喜欢使用FWFT(First Word First Through) FIFO而非标准FIFO&#xff0c;FWFT FIFO的数据会预先加载到dout端口&#xff0c;当empty为低时数据就已经有效了&#xff0c;而rd_en信号是指示此FIFO更新下一个数据&#xff0c;这种FWFT FIFO的…

【Linux基础】第30讲 Linux用户和用户组权限控制命令(二)

1&#xff09;sudo命令 sudo是Linux系统管理指令&#xff0c;是允许系统管理员让普通用户执行一些或者全部的root命令的一个工具&#xff0c;如halt,reboot,su等等&#xff0c;这样不仅减少了root用户的登录和管理时间&#xff0c;同样也提高了安全性。 2&#xff09;修改配置…

Grafana设置默认主页

点击【设置/管理】-> 【默认首选项 Preferences】-> 【主页仪表盘】 在下拉中选择一个页面作为主页即可

山西电力市场日前价格预测【2023-09-22】

日前价格预测 预测说明&#xff1a; 如上图所示&#xff0c;预测明日&#xff08;2023-09-22&#xff09;山西电力市场全天平均日前电价为322.75元/MWh。其中&#xff0c;最高日前电价为386.53元/MWh&#xff0c;预计出现在06: 45。最低日前电价为237.40元/MWh&#xff0c;预计…

Java高级-动态代理

动态代理 1.介绍2.案例 1.介绍 public interface Star {String sing(String name);void dance(); }public class BigStar implements Star{private String name;public BigStar(String name) {this.name name;}public String sing(String name) {System.out.println(this.name…

一个不怎么成功的三级菜单

三级菜单制作&#xff0c;菜单焦点总是消失&#xff0c;等发现好的再写一篇 发现 ​ 父元素设置了display:flex时&#xff0c;子元素中的display:none或者display:block就会失效。这是因为display:flex的优先级高于display:none和display:block&#xff0c;使他们的作用失效了。…

Map<K,V>的使用和List学习

Map Map是一种专门用来进行搜索的容器或者数据结构&#xff0c;其搜索的效率与其具体的实例化子类有关。对于静态类型的查找来说&#xff0c;一般直接遍历或者用二分查找【不会对区间进行插入和删除操作】 而在现实生活中的查找比如&#xff1a; 根据姓名查询考试成绩通讯录…

RISC-V Reader 笔记(七)RV64,特权架构,未来可选扩展

RV64 比起 RV32&#xff0c;其实扩展不多。 主要是添加了一系列字&#xff0c;双字为单位的操作。 各个 ISA 32 64比较 x86&#xff1a;变量都存在寄存器里&#xff0c;不像 32 存在内存里&#xff0c;因此指令数少很多&#xff0c;但是因此添加了很多新操作码来操作更多的寄…

ctfshow web入门(2)

web11 打开这个网站&#xff0c;到网站诊断分析模块 搜索域名 web12 提示 有时候网站上的公开信息&#xff0c;就是管理员常用密码 打开&#xff0c;就是个购物网站 因为昨天刚做robots.txt 我就搜了一下 真的有&#xff0c;提示admin这个页面 访问一下&#xff0c;userna…