win 10+VS 2017+Cuda 10.0 환경 설정 상세 설명

10966 단어 win10VS2017Cuda10.0
설치 하 다
1.1 하드웨어 지원
우선 컴퓨터 그래 픽 카드 가 Cuda 설 치 를 지원 하 는 지 확인 하 세 요.
'내 컴퓨터'를 오른쪽 클릭 하고'장치 관리자'를 클릭 합 니 다.디 스 플레이 어댑터 에서 그래 픽 카드 모델 을 볼 수 있 습 니 다.
홈 페이지리스트에 포 함 될 경우 해당 모델 을 클릭 해 다운로드 인터페이스 에서 Cuda 설치 패 키 지 를 다운로드 할 수 있다.

1.2 설치 VS 2017
홈 페이지 에서 VS 2017 을 다운로드 하고 설치 합 니 다.
1.3 Cuda 설치
설치 과정 에서 이 컴퓨터 에 설 치 된 VS 버 전 중 하나 가 있 는 지 자동 으로 감지 되 며,VS 버 전과 Cuda 버 전이 일치 하지 않 으 면 설치 가 불가능 합 니 다.
(또한 컴퓨터 에 360 백신 이 설치 되 어 있 으 면 설치 과정 에서 바이러스 수정 의심 알림 이 계속 있 을 수 있 으 므 로 모두 조작 을 허용 해 야 하 며 그렇지 않 으 면 설치 할 수 없다.)
이상 의 절 차 는 잘못 보고 하지 않 고 통과 한 후에 기본 환경 은 이미 구축 되 었 다.
2.환경 성공 여부 테스트
많이 참 고 했 기 때문에 여러 가지 방법 이 있 습 니 다.제 가 모두 열거 하 겠 습 니 다.
2.1
cmd 실행,nvcc --version을 입력 하면 버 전 번 호 를 볼 수 있 습 니 다.그림 참조:
set cudacuda 가 설정 한 환경 변 수 를 볼 수 있 습 니 다.그림 과 같 습 니 다.

2.2
시작 메뉴->NVIDIA Corporation->CUDA Samples->6.5->Browse CUDA Samples,왼쪽 단 추 를 누 르 면 예제 코드 의 위 치 를 엽 니 다.
다음 그림 에서 보 여 주 는 파일 을 찾 아 VS 에서 열 고 컴 파일 합 니 다(Build).

이 과정 은 약 40 분 이 걸 립 니 다.컴 파일 에 성공 하면 VS 중국 에서 그림 과 같은 힌트 를 볼 수 있 습 니 다.

(컴 파일 과정 에서 제 VS 는 다음 과 같이 SDK 오 류 를 찾 을 수 없습니다.

해결 방법 은:
다시 설치 할 필요 가 없습니다.시작 메뉴 에서 VS 의 설치 소프트웨어 를 찾 으 려 면 열 고 수정(modify)을 누 르 십시오.어떤 버 전이 없 으 면 windows SDK 를 설치 하면 됩 니 다.)
컴 파일 되 지 않 기 전에 Debug 폴 더 에는 그림 과 같은 세 개의 파일 만 있 었 습 니 다.

컴 파일 에 성공 하면 이 위치(구체 적 인 경 로 는 위의 그림 참조)에 많은 파일 이 생 성 됩 니 다.device Query Drv.exe 를 찾 은 프로그램 을 cmd 에 끌 어 다 놓 고 다시 실행 합 니 다.
결 과 는 다음 그림 과 같 습 니 다.우 리 는 이 컴퓨터 의 GPU 하드웨어 정 보 를 얻 었 습 니 다.주의:두 번 째 줄 의 계산 능력 에 주목 하면 이 기계 의 계산 능력 은 5.0 임 을 알 수 있 습 니 다.


2.3
vs 2017 을 열 면(VS 2017 템 플 릿 란 아래 에'NVIDIA/CUDA 10.0'이 나타 나 는 것 을 관찰 할 수 있 습 니 다.)빈 win 32 프로그램,즉 cuda 만 들 기테스트 항목.cuda 선택test,오른쪽 단 추 를 누 르 면 C>항목 의존 항목 C>사용자 정의 생 성,CUDA 9.0 을 선택 합 니 다.원본 파일 폴 더 오른쪽 단추->추가->새 항목->CUDA C/C++파일 선택,cudamain。클릭 cudamain.cu 의 속성,설정 속성 C>일반 C>항목 유형 C>"CUDA C/C++"를 선택 하 십시오.
주의:다음 단계 의 항목 속성 설정 은 모두 x64 에 대한 것 입 니 다.

6.디 렉 터 리 설정 포함:
프로젝트 속성 C>속성 C>설정 속성 C>VC++디 렉 터 리 C>포함 디 렉 터 리 를 오른쪽 클릭
  2.포함 디 렉 터 리 추가:$(CUDA_PATH)\include7.라 이브 러 리 디 렉 터 리 설정
  1.VC++디 렉 터 리 C>라 이브 러 리 디 렉 터 리
라 이브 러 리 디 렉 터 리 추가:$(CUDA_PATH)\lib\x648.의존 항
속성 설정 C>링크 기 C>입력 C>추가 의존 항목
라 이브 러 리 파일 추가:cublas.lib;cuda.lib;cudadevrt.lib;cudart.lib;cudart_static.lib;OpenCL.libcuda_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;
}
실행 결과:

2.4
CUDA 10.0 Runtime 항목 을 직접 새로 만 듭 니 다.그림(그림 에서 파일 이름 은 이 예 와 상 관 없 이 참고 할 필요 가 없습니다).

오른쪽 키 항목→속성→설정 속성→링크 기→일반→추가 라 이브 러 리 디 렉 터 리,다음 디 렉 터 리 추가:
$(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("
"); printf("
Device%d:\"%s\"
", dev, deviceProp.name); cudaDriverGetVersion(&driver_version); printf("CUDA : %d.%d
", driver_version / 1000, (driver_version % 1000) / 10); cudaRuntimeGetVersion(&runtime_version); printf("CUDA : %d.%d
", runtime_version / 1000, (runtime_version % 1000) / 10); printf(" : %d.%d
", deviceProp.major, deviceProp.minor); printf("Total amount of Global Memory: %u bytes
", deviceProp.totalGlobalMem); printf("Number of SMs: %d
", deviceProp.multiProcessorCount); printf("Total amount of Constant Memory: %u bytes
", deviceProp.totalConstMem); printf("Total amount of Shared Memory per block: %u bytes
", deviceProp.sharedMemPerBlock); printf("Total number of registers available per block: %d
", deviceProp.regsPerBlock); printf("Warp size: %d
", deviceProp.warpSize); printf("Maximum number of threads per SM: %d
", deviceProp.maxThreadsPerMultiProcessor); printf("Maximum number of threads per block: %d
", deviceProp.maxThreadsPerBlock); printf("Maximum size of each dimension of a block: %d x %d x %d
", deviceProp.maxThreadsDim[0], deviceProp.maxThreadsDim[1], deviceProp.maxThreadsDim[2]); printf("Maximum size of each dimension of a grid: %d x %d x %d
", deviceProp.maxGridSize[0], deviceProp.maxGridSize[1], deviceProp.maxGridSize[2]); printf("Maximum memory pitch: %u bytes
", deviceProp.memPitch); printf("Texture alignmemt: %u bytes
", deviceProp.texturePitchAlignment); printf("Clock rate: %.2f GHz
", deviceProp.clockRate * 1e-6f); printf("Memory Clock rate: %.0f MHz
", deviceProp.memoryClockRate * 1e-3f); printf("Memory Bus Width: %d-bit
", deviceProp.memoryBusWidth); } return 0; }
실행 결과:

본 고 는 주로 참고:1.https://blog.csdn.net/u013165921/article/details/77891913
2. https://www.cnblogs.com/wayne793377164/p/8185404.html
win 10+VS 2017+Cuda 10.0 환경 설정 에 대한 자세 한 설명 은 여기 서 소개 합 니 다.더 많은 win 10+VS 2017+Cuda 10.0 설정 내용 은 이전 글 을 검색 하거나 아래 글 을 계속 찾 아 보 세 요.앞으로 도 많은 응원 부 탁 드 리 겠 습 니 다!

좋은 웹페이지 즐겨찾기