一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - C/C++ - win10+VS2017+Cuda10.0環境配置詳解

win10+VS2017+Cuda10.0環境配置詳解

2021-09-18 16:06HallieDong C/C++

這篇文章主要介紹了win10+VS2017+Cuda10.0環境配置詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

一、安裝

1.1硬件支持

首先確定你的電腦顯卡是支持Cuda安裝的。
右鍵“我的電腦”,然后點擊“設備管理器”。在顯示適配器里可以查看顯卡型號。
如果包含在官網列表 中,則可以點擊對應的型號到下載界面下載Cuda安裝包。

win10+VS2017+Cuda10.0環境配置詳解

1.2 安裝VS2017
官網下載VS2017,并安裝。

1.3 安裝Cuda
在安裝過程中,會自動檢測本機是否已經安裝了配套的VS版本其中之一,如果VS版本和Cuda版本不匹配的話,安裝無法進行。
( 另外,如果電腦安裝了360殺毒的話,安裝過程中會不斷有疑似病毒修改的提示,要全部允許操作,否則無法安裝。)

以上步驟無報錯通過之后,基本環境已經搭建完成。

二、測試環境是否成功

參考了很多,所以有好幾種辦法,我全部列出來。

2.1

運行cmd,
輸入nvcc --version,即可查看版本號,如圖:

win10+VS2017+Cuda10.0環境配置詳解

set cuda,可以查看cuda設置的環境變量,如圖

win10+VS2017+Cuda10.0環境配置詳解

2.2
開始菜單->NVIDIA Corporation->CUDA Samples->6.5->Browse CUDA Samples,左鍵單擊打開示例代碼的位置,
找到下圖所示文件,在VS中打開并編譯(Build)。

win10+VS2017+Cuda10.0環境配置詳解

這個過程大約需要四十分鐘,編譯成功后,你將在VS中方看到如圖所示的提示。

win10+VS2017+Cuda10.0環境配置詳解

(在編譯過程中,我的VS報了如下找不到SDK錯誤:

win10+VS2017+Cuda10.0環境配置詳解

解決辦法為:
無需重裝,在開始菜單中找到VS的安裝軟件點擊打開,點擊修改(modify),缺少哪個版本安裝哪個windows SDK即可。)

未編譯前,Debug文件夾中只有三個文件,如圖。

win10+VS2017+Cuda10.0環境配置詳解

成功編譯后這個位置(具體路徑見上圖)將生成很多文件,在其中找到deviceQueryDrv.exe的程序拖入到cmd中,回車運行。
結果如下圖,我們得到了本機的GPU硬件信息。注意:關注第二行計算能力,可以看到這臺機器的計算能力是5.0。

win10+VS2017+Cuda10.0環境配置詳解

win10+VS2017+Cuda10.0環境配置詳解

2.3

打開vs2017,(我們可以觀察到,在VS2017模板一欄下方出現了“NVIDIA/CUDA 10.0”。)創建一個空win32程序,即cuda_test項目。選擇cuda_test,點擊右鍵–>項目依賴項–>自定義生成,選擇CUDA9.0。右鍵源文件文件夾->添加->新建項->選擇CUDA C/C++File,取名cuda_main。點擊cuda_main.cu的屬性,在配置屬性–>常規–>項類型–>選擇“CUDA C/C++”。

注意:以下步驟中的項目屬性設置均針對x64

win10+VS2017+Cuda10.0環境配置詳解

6. 包含目錄配置:
  1.右鍵點擊項目屬性–>屬性–>配置屬性–>VC++目錄–>包含目錄
  2.添加包含目錄:$(CUDA_PATH)\include

7. 庫目錄配置
  1.VC++目錄–>庫目錄
  2.添加庫目錄:$(CUDA_PATH)\lib\x64

8. 依賴項
  1.配置屬性–>鏈接器–>輸入–>附加依賴項
  2.添加庫文件:cublas.lib;cuda.lib;cudadevrt.lib;cudart.lib;cudart_static.lib;OpenCL.lib

cuda_main.cu代碼如下:

#include "cuda_runtime.h" 
#include "cublas_v2.h" 

#include <time.h> 
#include <iostream> 

using namespace std;

// 定義測試矩陣的維度 
int const M = 5;
int const N = 10;

int main()
{
	// 定義狀態變量 
	cublasStatus_t status;

	// 在 內存 中為將要計算的矩陣開辟空間 
	float *h_A = (float*)malloc(N*M * sizeof(float));
	float *h_B = (float*)malloc(N*M * sizeof(float));

	// 在 內存 中為將要存放運算結果的矩陣開辟空間 
	float *h_C = (float*)malloc(M*M * sizeof(float));

	// 為待運算矩陣的元素賦予 0-10 范圍內的隨機數 
	for (int i = 0; i < N*M; i++) {
		h_A[i] = (float)(rand() % 10 + 1);
		h_B[i] = (float)(rand() % 10 + 1);

	}

	// 打印待測試的矩陣 
	cout << "矩陣 A :" << endl;
	for (int i = 0; i < N*M; i++) {
		cout << h_A[i] << " ";
		if ((i + 1) % N == 0) cout << endl;
	}
	cout << endl;
	cout << "矩陣 B :" << endl;
	for (int i = 0; i < N*M; i++) {
		cout << h_B[i] << " ";
		if ((i + 1) % M == 0) cout << endl;
	}
	cout << endl;

	/*
	** GPU 計算矩陣相乘
	*/

	// 創建并初始化 CUBLAS 庫對象 
	cublasHandle_t handle;
	status = cublasCreate(&handle);

	if (status != CUBLAS_STATUS_SUCCESS)
	{
		if (status == CUBLAS_STATUS_NOT_INITIALIZED) {
			cout << "CUBLAS 對象實例化出錯" << endl;
		}
		getchar();
		return EXIT_FAILURE;
	}

	float *d_A, *d_B, *d_C;
	// 在 顯存 中為將要計算的矩陣開辟空間 
	cudaMalloc(
		(void**)&d_A,  // 指向開辟的空間的指針 
		N*M * sizeof(float)  // 需要開辟空間的字節數 
	);
	cudaMalloc(
		(void**)&d_B,
		N*M * sizeof(float)
	);

	// 在 顯存 中為將要存放運算結果的矩陣開辟空間 
	cudaMalloc(
		(void**)&d_C,
		M*M * sizeof(float)
	);

	// 將矩陣數據傳遞進 顯存 中已經開辟好了的空間 
	cublasSetVector(
		N*M,  // 要存入顯存的元素個數 
		sizeof(float),  // 每個元素大小 
		h_A,  // 主機端起始地址 
		1,  // 連續元素之間的存儲間隔 
		d_A,  // GPU 端起始地址 
		1  // 連續元素之間的存儲間隔 
	);
	cublasSetVector(
		N*M,
		sizeof(float),
		h_B,
		1,
		d_B,
		1
	);

	// 同步函數 
	cudaThreadSynchronize();

	// 傳遞進矩陣相乘函數中的參數,具體含義請參考函數手冊。 
	float a = 1; float b = 0;
	// 矩陣相乘。該函數必然將數組解析成列優先數組 
	cublasSgemm(
		handle,  // blas 庫對象  
		CUBLAS_OP_T,  // 矩陣 A 屬性參數 
		CUBLAS_OP_T,  // 矩陣 B 屬性參數 
		M,  // A, C 的行數  
		M,  // B, C 的列數 
		N,  // A 的列數和 B 的行數 
		&a,  // 運算式的 α 值 
		d_A,  // A 在顯存中的地址 
		N,  // lda 
		d_B,  // B 在顯存中的地址 
		M,  // ldb 
		&b,  // 運算式的 β 值 
		d_C,  // C 在顯存中的地址(結果矩陣) 
		M  // ldc 
	);

	// 同步函數 
	cudaThreadSynchronize();

	// 從 顯存 中取出運算結果至 內存中去 
	cublasGetVector(
		M*M,  // 要取出元素的個數 
		sizeof(float),  // 每個元素大小 
		d_C,  // GPU 端起始地址 
		1,  // 連續元素之間的存儲間隔 
		h_C,  // 主機端起始地址 
		1  // 連續元素之間的存儲間隔 
	);

	// 打印運算結果 
	cout << "計算結果的轉置 ( (A*B)的轉置 ):" << endl;

	for (int i = 0; i < M*M; i++) {
		cout << h_C[i] << " ";
		if ((i + 1) % M == 0) cout << endl;
	}

	// 清理掉使用過的內存 
	free(h_A);
	free(h_B);
	free(h_C);
	cudaFree(d_A);
	cudaFree(d_B);
	cudaFree(d_C);

	// 釋放 CUBLAS 庫對象 
	cublasDestroy(handle);

	getchar();

	return 0;
}

運行結果:

win10+VS2017+Cuda10.0環境配置詳解

2.4

直接新建一個CUDA 10.0 Runtime 項目。如圖(注意圖中文件命名與本例無關,無需參考),

win10+VS2017+Cuda10.0環境配置詳解

右鍵項目 → 屬性 → 配置屬性 → 鏈接器 → 常規 → 附加庫目錄,添加以下目錄:
$(CUDA_PATH_V10_0)\lib$(Platform)

示例代碼如下:

#include "cuda_runtime.h"
#include "device_launch_parameters.h"
#include <stdio.h>

int main() {
	int deviceCount;
	cudaGetDeviceCount(&deviceCount);

	int dev;
	for (dev = 0; dev < deviceCount; dev++)
	{
		int driver_version(0), runtime_version(0);
		cudaDeviceProp deviceProp;
		cudaGetDeviceProperties(&deviceProp, dev);
		if (dev == 0)
			if (deviceProp.minor = 9999 && deviceProp.major == 9999)
				printf("\n");
		printf("\nDevice%d:\"%s\"\n", dev, deviceProp.name);
		cudaDriverGetVersion(&driver_version);
		printf("CUDA驅動版本:                  %d.%d\n", driver_version / 1000, (driver_version % 1000) / 10);
		cudaRuntimeGetVersion(&runtime_version);
		printf("CUDA運行時版本:                 %d.%d\n", runtime_version / 1000, (runtime_version % 1000) / 10);
		printf("設備計算能力:                  %d.%d\n", deviceProp.major, deviceProp.minor);
		printf("Total amount of Global Memory:         %u bytes\n", deviceProp.totalGlobalMem);
		printf("Number of SMs:                 %d\n", deviceProp.multiProcessorCount);
		printf("Total amount of Constant Memory:        %u bytes\n", deviceProp.totalConstMem);
		printf("Total amount of Shared Memory per block:    %u bytes\n", deviceProp.sharedMemPerBlock);
		printf("Total number of registers available per block: %d\n", deviceProp.regsPerBlock);
		printf("Warp size:                   %d\n", deviceProp.warpSize);
		printf("Maximum number of threads per SM:        %d\n", deviceProp.maxThreadsPerMultiProcessor);
		printf("Maximum number of threads per block:      %d\n", deviceProp.maxThreadsPerBlock);
		printf("Maximum size of each dimension of a block:   %d x %d x %d\n", deviceProp.maxThreadsDim[0],
			deviceProp.maxThreadsDim[1],
			deviceProp.maxThreadsDim[2]);
		printf("Maximum size of each dimension of a grid:    %d x %d x %d\n", deviceProp.maxGridSize[0], deviceProp.maxGridSize[1], deviceProp.maxGridSize[2]);
		printf("Maximum memory pitch:              %u bytes\n", deviceProp.memPitch);
		printf("Texture alignmemt:               %u bytes\n", deviceProp.texturePitchAlignment);
		printf("Clock rate:                   %.2f GHz\n", deviceProp.clockRate * 1e-6f);
		printf("Memory Clock rate:               %.0f MHz\n", deviceProp.memoryClockRate * 1e-3f);
		printf("Memory Bus Width:                %d-bit\n", deviceProp.memoryBusWidth);
	}

	return 0;
}

運行結果:

win10+VS2017+Cuda10.0環境配置詳解

本文主要參考:1. https://blog.csdn.net/u013165921/article/details/77891913
2. https://www.cnblogs.com/wayne793377164/p/8185404.html

到此這篇關于win10+VS2017+Cuda10.0環境配置詳解的文章就介紹到這了,更多相關win10+VS2017+Cuda10.0配置內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://blog.csdn.net/HaleyDong/article/details/86093520

延伸 · 閱讀

精彩推薦
  • C/C++C++之重載 重定義與重寫用法詳解

    C++之重載 重定義與重寫用法詳解

    這篇文章主要介紹了C++之重載 重定義與重寫用法詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下...

    青山的青6062022-01-04
  • C/C++C/C++經典實例之模擬計算器示例代碼

    C/C++經典實例之模擬計算器示例代碼

    最近在看到的一個需求,本以為比較簡單,但花了不少時間,所以下面這篇文章主要給大家介紹了關于C/C++經典實例之模擬計算器的相關資料,文中通過示...

    jia150610152021-06-07
  • C/C++C語言實現電腦關機程序

    C語言實現電腦關機程序

    這篇文章主要為大家詳細介紹了C語言實現電腦關機程序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    xiaocaidayong8482021-08-20
  • C/C++C語言中炫酷的文件操作實例詳解

    C語言中炫酷的文件操作實例詳解

    內存中的數據都是暫時的,當程序結束時,它們都將丟失,為了永久性的保存大量的數據,C語言提供了對文件的操作,這篇文章主要給大家介紹了關于C語言中文件...

    針眼_6702022-01-24
  • C/C++學習C++編程的必備軟件

    學習C++編程的必備軟件

    本文給大家分享的是作者在學習使用C++進行編程的時候所用到的一些常用的軟件,這里推薦給大家...

    謝恩銘10102021-05-08
  • C/C++深入理解goto語句的替代實現方式分析

    深入理解goto語句的替代實現方式分析

    本篇文章是對goto語句的替代實現方式進行了詳細的分析介紹,需要的朋友參考下...

    C語言教程網7342020-12-03
  • C/C++詳解c語言中的 strcpy和strncpy字符串函數使用

    詳解c語言中的 strcpy和strncpy字符串函數使用

    strcpy 和strcnpy函數是字符串復制函數。接下來通過本文給大家介紹c語言中的strcpy和strncpy字符串函數使用,感興趣的朋友跟隨小編要求看看吧...

    spring-go5642021-07-02
  • C/C++c++ 單線程實現同時監聽多個端口

    c++ 單線程實現同時監聽多個端口

    這篇文章主要介紹了c++ 單線程實現同時監聽多個端口的方法,幫助大家更好的理解和學習使用c++,感興趣的朋友可以了解下...

    源之緣11542021-10-27
主站蜘蛛池模板: 亚洲免费在线观看 | 男女刺激高清视频在线观看 | 果冻传媒第一二三专区 | 国产一级特黄aa大片免费 | 日本在线观看视频 | 午夜无码片在线观看影院 | 四虎1515hhcom| 顶级欧美做受xxx000大乳 | 视频在线观看入口一二三2021 | 波多野结衣xxxxx在线播放 | 亚洲国产香蕉视频欧美 | 国产成人精品免费大全 | 亚洲国产成人综合 | 亚洲人成在线播放 | 国产第一福利视频导航在线 | 色v在线| 古装一级毛片 | 好男人社区www影院在线观看 | 欧美xingai | 青草悠悠视频在线观看 | 人人揉揉香蕉 | 香蕉在线精品一区二区 | 国产欧美日韩不卡一区二区三区 | 无码精品AV久久久奶水 | 日韩欧美国产成人 | 亚洲欧美精品一区天堂久久 | 国产aaa伦理片 | 18亚洲chinese男男1069| 亚洲精品在线免费 | 男人j放进女人的p视频免费 | 日本免费在线观看视频 | 欧美一区二区三区精品影视 | 秋霞综合网 | 四虎影院在线 | 久久久WWW免费人成精品 | 无码人妻精品一区二区蜜桃在线看 | 午夜伦伦电影理论片费看 | 姐姐不~不可以动漫在线观看 | 网友自拍偷拍 | 亚洲精品国产在线 | 国产成人一区二区三区在线视频 |