Windows下cuda的安装和配置

今天开始做一个cuda教程。由于本人主要在windows下使用visual studio进行开发,因此这里讲一下windows下的cuda开发环境。

下载cuda_toolkit

从网站https://developer.nvidia.com/cuda-toolkit中下载,先选择Download Now,然后跳转到如下页面:
在这里插入图片描述

选择合适的平台和安装方式。我选择的是下载离线的安装包(exe文件),另外我安装的是12.9版本。
下载完成后,双击exe开始进行安装,按照它给出的默认设置就行,但是要记住安装路径(默认似乎是安装在C:\Program Files中)。
安装完成后重启电脑(使安装过程中自动添加的环境变量生效)。

配置开发环境

由于CMake是一种非常流行的项目构建方式,且非常好用,因此本文及此专栏中的所有文章都用CMake进行构建。
新建一个文件夹,里面新建四个文件:

  • main.cpp
  • kernal.cu
  • kernal.h
  • CMakeLists.txt
    然后再建立一个build文件夹,如图所示:
    在这里插入图片描述
    图中.clang-format是用来控制代码格式的,.editorconfig是用来设置编码方式的。这两个文件现在都可以忽略。
    main.cpp中代码如下:
#include "kernal.h"
int main() { test(); }

kernal.cu中代码如下:

#include <cuda_runtime.h>
#include <stdio.h>
#include <device_launch_parameters.h>               
#include "kernal.h"
__global__ void checkIndex(void)
{printf("threadIdx:(%d, %d, %d) blockIdx:(%d, %d, %d) blockDim:(%d, %d, %d) ""gridDim:(%d, %d, %d)\n",threadIdx.x, threadIdx.y, threadIdx.z, blockIdx.x, blockIdx.y, blockIdx.z, blockDim.x, blockDim.y, blockDim.z, gridDim.x, gridDim.y,gridDim.z);
}void test()
{int nElem = 6;dim3 block(3);dim3 grid((nElem + block.x - 1) / block.x);printf("grid.x %d grid.y %d grid.z %d\n", grid.x, grid.y, grid.z);printf("block.x %d block.y %d block.z %d\n", block.x, block.y, block.z);checkIndex<<<grid, block>>>();cudaDeviceReset();return ;
}

注意,上述代码中的checkIndex<<<grid, block>>>();在Visual Studio对其进行语法检查的时候会提示错误,如图:
在这里插入图片描述
这是Visual Studio的bug,不用管,不影响运行。
kernal.h中代码如下:

void test();

CMakeLists.txt中代码如下

##要求最低cmake程序版本
cmake_minimum_required(VERSION 3.20)#本工程的名字
project(CUDAARTICLEPROJECT CUDA CXX)# 设置 CUDA 架构
set(CMAKE_CUDA_ARCHITECTURES 89)
# 设置 C++ 标准
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# 设置 CUDA 标准
set(CMAKE_CUDA_STANDARD 14)
set(CMAKE_CUDA_STANDARD_REQUIRED ON)file(GLOB SRC_CPP ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp)
file(GLOB SRC_CUDA ${CMAKE_CURRENT_SOURCE_DIR}/*.cu)
file(GLOB SRC_H ${CMAKE_CURRENT_SOURCE_DIR}/*.h)
# 添加可执行文件
add_executable(${PROJECT_NAME} ${SRC_CPP} ${SRC_CUDA} ${SRC_H})# 添加 CUDA 头文件路径
target_include_directories(${PROJECT_NAME} PRIVATE"C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v12.9/include"  
)
target_include_directories(${PROJECT_NAME} PRIVATE   "C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v12.9/lib/x64"
)
# 设置 CUDA 分离编译
set_target_properties(${PROJECT_NAME} PROPERTIES CUDA_SEPARABLE_COMPILATION ON
)

这个文件比较重要,它决定了整个环境的配置。
其中,set(CMAKE_CUDA_ARCHITECTURES 89)要根据自己的显卡架构来设置。我的是4060ti,设置为89。不同显卡对应的数字不同,可以在https://developer.nvidia.com/cuda-gpus中进行查询,4060ti对应的是8.9,所以这里设置为89.

target_include_directories(${PROJECT_NAME} PRIVATE"C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v12.9/include"  
)
target_include_directories(${PROJECT_NAME} PRIVATE   "C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v12.9/lib/x64"
)

这段代码要根据自己的实际安装路径来设置。
随后进入build文件夹,在终端中打开这个文件夹,运行cmake ..命令。如下图所示:
在这里插入图片描述
出现红框中的提示表示构建成功。然后在build文件夹中打开sln文件(默认已安装Visual Studio)。在解决方案资源管理器中右键ALL_BUILD, 生成。随后右键项目名CUDAARTICLEPROJECT,生成。都成功后点击本地Windows调试器运行代码,如果终端打印出如下结果:
在这里插入图片描述
表明cuda安装和环境配置都没问题,可以愉快地开始cuda开发之旅了!!!

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

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

相关文章

【代码随想录day 19】 力扣 450.删除二叉搜索树中的节点

视频讲解&#xff1a;https://www.bilibili.com/video/BV1tP41177us/?share_sourcecopy_web&vd_sourcea935eaede74a204ec74fd041b917810c 文档讲解&#xff1a;https://programmercarl.com/0450.%E5%88%A0%E9%99%A4%E4%BA%8C%E5%8F%89%E6%90%9C%E7%B4%A2%E6%A0%91%E4%B8%A…

智慧养老丨实用科普+避坑指南:科技如何让晚年生活更安全舒适?

随着老龄化社会的到来&#xff0c;智慧养老产品逐渐成为改善老年人生活质量的重要工具。从智能手表到便携洗浴机&#xff0c;科技正为老年人的健康、安全与生活便利提供创新解决方案。我们这次主要介绍四类典型智慧养老产品&#xff0c;结合真实体验给出选购建议&#xff0c;并…

系统垃圾清理批处理脚本 (BAT)

系统垃圾清理批处理脚本 (BAT) 以下是一个Windows系统垃圾清理的批处理脚本&#xff0c;它可以清理常见的系统临时文件、缓存和日志等&#xff1a; echo off title 系统垃圾清理工具 color 0a echo. echo 正在清理系统垃圾文件&#xff0c;请稍候... echo.:: 清理临时文件 echo…

Terraform的零基础学习教程

一、Terraform 是什么&#xff1f; Terraform 是由 HashiCorp 开发的开源工具&#xff0c;用于自动化管理云基础设施&#xff08;如 AWS、Azure、GCP 等&#xff09;。 核心特点&#xff1a; 基础设施即代码&#xff08;IaC&#xff09;&#xff1a;用代码定义和管理资源。跨…

429. N 叉树的层序遍历(中等)题解

题目描述给定一个 N 叉树&#xff0c;返回其节点值的层序遍历。&#xff08;即从左到右&#xff0c;逐层遍历&#xff09;。树的序列化输入是用层序遍历&#xff0c;每组子节点都由 null 值分隔&#xff08;参见示例&#xff09;。示例 1&#xff1a;输入&#xff1a;root [1,…

Java 课程,每天解读一个简单Java之题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。

package ytr250813;import java.io.IOException;public class CharacterCounter {public static void main(String[] args) throws IOException {// 初始化计数器变量int letterCount 0; // 英文字母计数器int spaceCount 0; // 空格计数器int digitCount 0; // 数字计数器i…

GitLab CI + Docker 自动构建前端项目并部署 — 完整流程文档

一、环境准备1. 服务器准备一台Linux服务器&#xff08;CentOS/Ubuntu皆可&#xff09;&#xff0c;推荐至少4核8GB内存已安装 Docker&#xff08;及 Docker 服务已启动&#xff09;已安装 GitLab Runner2. 服务器上安装 Docker &#xff08;如果没装&#xff09;# CentOS9以下…

LCP 17. 速算机器人

目录 题目链接&#xff1a; 题目&#xff1a; 解题思路&#xff1a; 代码&#xff1a; 总结&#xff1a; 题目链接&#xff1a; LCP 17. 速算机器人 - 力扣&#xff08;LeetCode&#xff09; 题目&#xff1a; # LCP 17. 速算机器人 小扣在秋日市集发现了一款速算机器人。…

Spring cloud集成ElastictJob分布式定时任务完整攻略(含snakeyaml报错处理方法)

ElasticJob 是一款轻量级、可扩展的分布式定时任务解决方案&#xff0c;基于 Quartz 二次开发&#xff0c;支持任务分片、失效转移、任务追踪等功能&#xff0c;非常适合在 Spring Cloud 微服务场景中使用。我将带你完成 Spring Cloud 集成 ElasticJob 的全过程&#xff0c;并分…

了解 Linux 中的 /usr 目录以及 bin、sbin 和 lib 的演变

Linux 文件系统层次结构是一个复杂且引人入胜的体系&#xff0c;其根源深植于类 Unix 操作系统的历史之中。在这一结构的核心&#xff0c;/usr 目录是一个至关重要的组成部分&#xff0c;随着时间的推移&#xff0c;它经历了显著的演变。与此同时&#xff0c;/bin、/sbin、/lib…

高级IO(五种IO模型介绍)

文章目录一、IO为什么慢&#xff1f;一、阻塞IO二、非阻塞IO三、信号驱动IO四、IO多路复用五、异步IO一、IO为什么慢&#xff1f; IO操作往往都是和外设交互&#xff0c;比如键盘、鼠标、打印机、磁盘。而最常见的就是内存与磁盘的交互&#xff0c;要知道磁盘是机械设备&#…

第十二节:粒子系统:海量点渲染

第十二节&#xff1a;粒子系统&#xff1a;海量点渲染 引言 粒子系统是创造动态视觉效果的神器&#xff0c;从漫天繁星到熊熊火焰&#xff0c;从魔法特效到数据可视化&#xff0c;都离不开粒子技术。Three.js提供了强大的粒子渲染能力&#xff0c;可轻松处理百万级粒子。本文将…

LeetCode Day5 -- 二叉树

目录 1. 啥时候用二叉树&#xff1f; &#xff08;1&#xff09;典型问题 &#xff08;2&#xff09;核心思路 2. BFS、DFS、BST 2.1 广度优先搜索BFS &#xff08;1&#xff09;适用任务 &#xff08;2&#xff09;解决思路​​&#xff1a;使用队列逐层遍历 2.2 深度…

<c1:C1DateTimePicker的日期时间控件,控制日期可以修改,时间不能修改,另外控制开始时间的最大值比结束时间小一天

两个时间控件 <c1:C1DateTimePicker Width"170" EditMode"DateTime" CustomDateFormat"yyyy-MM-dd" CustomTimeFormat"HH:mm:ss" Style"{StaticResource ListSearch-DateTimePicker}" x:Name"dateTimePicker"…

文件完整性监控工具:架构和实现

文件完整性监控(FIM)作为一道关键的防御层&#xff0c;确保系统和网络中文件及文件夹的完整性与安全性。文件完整性监控工具通过监控关键文件的变更并检测未经授权的修改&#xff0c;提供关于潜在安全漏洞、恶意软件感染和内部威胁的早期警报。为了使文件完整性监控工具发挥实效…

Linux信号量和信号

1.温故知新上一篇博客&#xff0c;我们又知道了一种进程间通信的方案&#xff1a;共享内存。它是在物理内存中用系统调用给我们在物理内存开辟一个共享内存&#xff0c;可以由多个进程的页表进行映射&#xff0c;共享内存不和管道一样&#xff0c;它的生命周期是随内核的&#…

腾讯测试岗位面试真题分析

以下是对腾讯测试工程师面试问题的分类整理、领域占比分析及高频问题精选&#xff08;基于​​92道问题&#xff0c;总出现次数118次​​&#xff09;。问题按​​7大技术领域​​划分&#xff0c;高频问题标注优先级&#xff08;1-5&#x1f31f;&#xff09;&#xff1a; 不…

全面解析远程桌面:功能实现、性能优化与安全防护全攻略

远程桌面技术已成为工作与生活中不可或缺的协作工具&#xff0c;但在实际应用中&#xff0c;用户常遇到连接失败、卡顿延迟、安全隐患等问题。本文从远程桌面功能原理、网络与性能优化、安全防护策略、跨平台兼容性等角度&#xff0c;详细解析常见问题的解决方案&#xff0c;并…

【问题】Mybatis-plus框架使用@Select注解编写查询SQL,json字段查询转换失败

问题描述在使用mybaits-plus的时候定义的Mapper接口实现了BaseMapper&#xff0c;没有编写Mapper对应的xml&#xff0c;大部分查询使用框架的接口进行查询基本属性返回都是正常&#xff0c;复杂对象在sql中会进行查询&#xff0c;但是返回对象中却未包含相关属性。问题原因 没有…

Python多线程实现大文件下载

Python多线程实现大文件下载 在互联网时代&#xff0c;文件下载是日常操作之一&#xff0c;尤其是大文件&#xff0c;如软件安装包、高清视频等。然而&#xff0c;网络条件不稳定或带宽有限时&#xff0c;下载速度会变得很慢&#xff0c;令人抓狂。幸运的是&#xff0c;通过多线…