CUDA安装

  • CUDA安装经历了几天的安装终于把CUDA安装上了。
  • 1.cuda官方下载网址,目前最新版本为cuda7.5,选择自己系统对应的版本下载安装程序。
  • 2.运行cuda_ 7.5.18_windows.exe,程序会检测系统的兼容性如下图: 
  • 3.选择“同意并继续”,进入下图安装过程 (备注:安装cuda时,要关闭所有的vs程序) 

  • 4.等待大概半个小时后,安装程序终于完成了。

1.2 添加环境变量

CUDA_PATH = C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.5
CUDA_PATH_V7_5 = C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.5
CUDA_SDK_PATH = C:\ProgramData\NVIDIA Corporation\CUDA Samples\v7.5
CUDA_LIB_PATH = %CUDA_PATH%\lib\x64
CUDA_BIN_PATH = %CUDA_PATH%\bin
CUDA_SDK_BIN_PATH = %CUDA_SDK_PATH%\bin\win64
CUDA_SDK_LIB_PATH = %CUDA_SDK_PATH%\common\lib\x64

然后,在系统变量path的末尾添加: %CUDA_LIB_PATH%;%CUDA_BIN_PATH%;%CUDA_SDK_BIN_PATH%;%CUDA_SDK_LIB_PATH%;

1.3 重启计算机使得环境变量生效

1.4 VS2013 + CUDA7.5配置

  • 1.打开vs2013并创建一个空win32程序,创建一个cuda_samples的解决方案和cuda_test1项目: 
  • 2.右键源文件–>添加–>新建项,如下图所示:

  • 3.选择NIVIDIA CUDA7.5中 CUDA C/C++file,并在名称那填上cuda_main

  • 4.选择cuda_test1,点击右键–>项目依赖项–>自定义生成

  • 5.选择CUDA7.5

  • 6.点击cuda_main.cu的属性

    1. 在配置属性–>常规–>项类型–>选择“CUDA C/C++”

1.5 项目配置

1.5.1 x64
1.5.1.1 包含目录配置
  • 1.右键点击项目属性–>属性–>配置属性–>VC++目录–>包含目录
  • 2.添加包含目录: 
    $(CUDA_PATH)\include
1.5.1.2 库目录配置
  • 1.VC++目录–>库目录
  • 2.添加库目录: 
    $(CUDA_PATH)\lib\x64
1.5.1.3 依赖项
    1. 配置属性–>连接器–>输入–>附加依赖项
    1. 添加库文件: 
      cudlas.lib 
      cuda.lib 
      cudadevrt.lib 
      cudart.lib 
      cudart_static.lib 
      nvcuvid.lib 
      OpenCL.lib

注意:添加nvcuvenc.lib库文件,编译时,报找不到该文件的错误。去掉后,程序也能运行

1.5.2 x86(win32)

1.5.2.1 包含目录配置
    1. 右键点击项目属性–>属性–>配置属性–>VC++目录–>包含目录
    1. 添加包含目录: 
      $(CUDA_PATH)\include
1.5.2.2 库目录配置
  • 1.VC++目录–>库目录
  • 2.添加库目录: 
    $(CUDA_PATH)\lib\Win32
1.5.2.3 依赖项
    1. 配置属性–>连接器–>输入–>附加依赖项
    1. 添加库文件: 
      cuda.lib 
      cudadevrt.lib 
      cudart.lib 
      cudart_static.lib 
      nvcuvid.lib 
      OpenCL.lib

备注: win32和x64位的lib库有差别,配置时需注意,除了上述添加的lib文件外,x64还有其他的lib库文件,如cudlas.lib,如运行1.6的样例时,要添加这个库,不然会编译失败。

1.6 样例

/**

*  addition: C = A + B.

*

* This sample is a very basic sample that implements element by element

* vector addition. It is the same as the sample illustrating Chapter 2

* of the programming guide with some additions like error checking.

*/



#include 
    
    
     
     

#include 
     
     
      
      

// For the CUDA runtime routines (prefixed with "cuda_")

#include 
      
      
       
       



/**

* CUDA Kernel Device code

*

* Computes the vector addition of A and B into C. The 3 vectors have the same

* number of elements numElements.

*/





__global__ void Add(int a, int b, int *c)

{

	*c = a + b;

}



int main()

{

	int c;

	int *devc;

	cudaError_t err = cudaSuccess;

	err = cudaMalloc((void **)&devc, sizeof(int));

	if (err != cudaSuccess)

	{

		fprintf(stderr, "Failed to allocate device vector A (error code %s)!\n", cudaGetErrorString(err));

		exit(EXIT_FAILURE);

	}

	Add << <1, 1 >> >(2, 7, devc);

	err = cudaMemcpy(&c, devc, sizeof(int), cudaMemcpyDeviceToHost);

	if (err != cudaSuccess)

	{

		fprintf(stderr, "Failed to allocate device vector A (error code %s)!\n", cudaGetErrorString(err));

		exit(EXIT_FAILURE);

	}

	printf("2+7=%d\n", c);

	cudaFree(devc);

	system("pause");

	return 0;

}
empty
      
      
     
     
    
    

输出效果


另一个实例
// CUDA runtime 库 + CUBLAS 库 
#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 // 
    );
// 同步函数 
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;
}

运行结果如下图所示:

参考 http://blog.csdn.net/u011314529/article/details/51505029



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Total Commander的CudaLister插件(32位和64位版本),内含223个语法高亮文件。 Assembly.lcf Batch files.lcf C.lcf C#.lcf C++.lcf CSS.lcf Delphi resources.lcf Diff.lcf Go.lcf Haskell.lcf HTML.lcf Ini files.lcf JavaScript.lcf JSDoc.lcf JSON.lcf LESS.lcf Lua.lcf Makefile.lcf Markdown.lcf Pascal.lcf Perl.lcf PHP.lcf PowerShell.lcf Properties.lcf Python.lcf Ruby.lcf SQL.lcf XML.lcf TypeScript.lcf JavaScript Babel.lcf CoffeeScript.lcf Clojure.lcf Elixir.lcf Erlang.lcf MediaWiki.lcf Kotlin.lcf Racket.lcf GraphQL.lcf PlantUML.lcf LaTeX.lcf Caffe Prototxt.lcf Strace.lcf LiveCode.lcf Lisp.lcf Inno Setup.lcf Pascal script.lcf Twig.lcf Razor.lcf Kivy.lcf HTML Django DTL.lcf HTML Django DTL internal.lcf ZenScript (MineTweaker).lcf Stata.lcf Assembly SHARC DSP.lcf Assembly SPARC.lcf AviSynth.lcf HJSON.lcf MySQL SQL.lcf Assembly Z80 SjASM.lcf HTML Siteleaf Liquid.lcf HTML Siteleaf Liquid internal.lcf HTML Handlebars.lcf HTML Handlebars internal.lcf HTML Embedded JS internal.lcf Assembly AVR.lcf Apache Hive.lcf Squirrel.lcf Textile.lcf Lola-2.lcf PICL.lcf Rust.lcf Scala.lcf Objective-C.lcf MATLAB.lcf Java.lcf Graphviz DOT.lcf AutoIt.lcf AutoHotkey.lcf YAML.lcf Assembly MIPS.lcf Assembly ARM.lcf Bohemia SQF.lcf Intel HEX.lcf VimL.lcf Windows Resource Script.lcf Yacc.lcf reStructuredText.lcf ABC Notation.lcf Assembly JWASM.lcf RTF.lcf Modelica.lcf Jasmine JVM Assembler.lcf Java Velocity.lcf Bitsquid SJSON.lcf Dockerfile.lcf Oberon.lcf Abaqus Keywords.lcf CRF.lcf ColdFusion.lcf ARM Assembly.lcf PHP_.lcf HTML_.lcf Clavier.lcf NSIS.lcf Ragel.lcf Metafont.lcf AWK.lcf OpenSCAD.lcf Automake.lcf Vala.lcf Boo.lcf Bash script.lcf Nemerle.lcf R Markdown.lcf BibTeX.lcf OpenCL.lcf VBScript.lcf D.lcf Nim.lcf ABAP.lcf Visual dBase.lcf Visual Basic.lcf Prolog.lcf Asymptote.lcf Verilog HDL.lcf Pike.lcf MIPS Assembly.lcf Tcl.lcf Pawn.lcf Apache Pig.lcf HTML Smarty.lcf HTML Smarty internal.lcf Standard ML.lcf Great Cow Basic.lcf HTML Mustache.lcf HTML Diafan.lcf HTML Laravel Blade.lcf HTML Laravel Blade internal.lcf Tree.lcf CUDA C++.lcf Informix 4GL.lcf NFO files.lcf Text Russian detector.lcf GLSL.lcf Virgil.lcf Jinja2.lcf TOML.lcf Slim.lcf Haml.lcf Assembly FASM.lcf Gherkin.lcf Nginx.lcf Sass.lcf ActionScript.lcf Elm.lcf OpenEdge ABL.lcf MIB files (SNMP protocol).lcf Brainfuck.lcf Apache config.lcf Arduino.lcf Groovy.lcf F#.lcf FoxPro.lcf Puppet.lcf MSVS_Solution.lcf Swift.lcf ASAP2_database.lcf ASAP2_Meta_Language.lcf Julia.lcf AppleScript.lcf R.lcf Dart.lcf Scheme.lcf Fortran.lcf WSH_script.lcf CMake.lcf Stylus.lcf Jade.lcf Text_with_indentation.lcf PostScript.lcf Logfiles.lcf Haxe.lcf Caml.lcf Regular_expressions.lcf WinBuilder_script.lcf SQL_White.lcf SQL_Blue.lcf RPG_IV.lcf RPG_IV_(Free_Syntax).lcf PAX_Pascal.lcf Parser3.lcf OneC_(1C).lcf NSL_Assembler.lcf nnCron.lcf MySQL_Stored_Procedures.lcf MacroScript_(Macro_Sheduler).lcf JCL.lcf Gold_Parser.lcf Adobe_Flash.lcf XSLT.lcf VHDL.lcf T-SQL.lcf Smalltalk.lcf Rexx.lcf PL_SQL.lcf Modula 2.lcf KiXtart.lcf IDL language.lcf IDL files.lcf Harbour.lcf Graphviz.lcf GAMS.lcf Forth.lcf Factor.lcf Euphoria.lcf Eiffel.lcf CodeVisionAVR.lcf Cobol.lcf Clipper.lcf Clarion.lcf Ada (.ads).lcf Ada.lcf Acu Cobol.lcf
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值