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
英文地址,請注明出處:http://en.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;通過多線…