当前位置: 首页 > 编程日记 > 正文

VS2010 CUDA 5.5 VA_X Win7 64位配置

.安装CUDA5.5以及配置VS助手

1、安装之前必须确认自己电脑的GPU支持CUDA。在设备管理器中找到显示适配器(Display adapters),找到自己电脑的显卡型号,如果包含在http://www.nvidia.com/object/cuda_gpus.html的列表中,说明支持CUDA

安装CUDA之前最好检查一下自己电脑的显卡驱动版本,版本过老的话,需要更新。有时候安装完毕CUDA之后,运行6中的deviceQuery程序时会出错,请优先考虑显卡驱动的问题。

2、下载NVIDIA CUDA Toolkit http://www.nvidia.com/content/cuda/cuda-downloads.html),本人下载的是desktop版本win64

CUDA5.0以上已经将ToolKitSDK等整合在了一起,因此只需下载一个安装文件即可。

3、首先确认自己已经安装Visual Studio 2010后再安装助手Visual Assist X。这里Visual Assist X对于使用CUDA 不是必须的,但为了使程序编写更为方便,这里推荐安装。

4CUDA的默认安装目录为:C:\Program Files\NVIDIA GPUComputing Toolkit\这里推荐使用默认的安装路径,不需更改。

5、安装完成后,在系统变量环境里面会发现新添加了两个环境变量

CUDA_PATH

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5

CUDA_PATH_V5_5

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5

 

且在系统变量的path也会自动添加

C:\Program Files\NVIDIA GPU ComputingToolkit\CUDA\v5.5\bin;C:\Program Files\NVIDIA GPU ComputingToolkit\CUDA\v5.5\libnvvp;C:\Program Files (x86)\NVIDIACorporation\PhysX\Common;

 

6、此时CUDA已经安装成功。可以在DOS命令下,测试运行显示GPU硬件配置和cuda属性例子程序deviceQuery。路径在如下位置:

C:\ProgramData\NVIDIA Corporation\CUDASamples\v5.5\Bin\win32\Release

Dos下的命令提示符

dir查看文件夹下的目录

dir/a:h 查看当前目录的隐藏文件,因为ProgramData是隐藏文件。

cd .. 返回上一级文件夹, cd file 进入file 文件夹

运行bandwidthTest示例程序,结果如下:

双击桌面上的图标,运行cuda自带的例子。

7CUDA C/C++关键字及函数高亮显示

这个设置是让Visual Studio2010在编辑.cu 文件时,把.cu 文件里的C/C++语法高亮。设置方法:Visual Studio 2010 的菜单依次选“ Tools|Options|TextEditor|File Extension(工具|选项|文本编辑器|文件扩展名),在该窗口中将“Editor(编辑器)下拉框选择“Microsoft Visual C++”,在“Extension(扩展名)文本框中输入cu点击“Add(添加)按钮,重复工作把cuh添加为Visual C++类型,添加完成后点击“OK(确定)按钮,如下图所示:

为了让CUDA的关键字,如__device__dim3等的文字高亮,需按如下步骤设置:
C:\ProgramData\NVIDIA Corporation\CUDASamples\v5.5\doc\syntax_highlighting\visual_studio_8目录下的usertype.dat文件复制到C:\ProgramFiles\Microsoft Visual Studio10.0\Common7\IDE\目录下(x64Win7系统为X:\Program Files(X86)\Microsoft Visual Studio10.0\Common7\IDE\)。重启Visual Studio2010后打开.cu文件,CUDA的关键字应该变成蓝色了。

8CUDA函数高亮,及CUDA 函数输入代码提示

实现这个功能需要使用Visual Assist X,如果没有安装支持Visual Studio 2010Visual Assist X,这部分功能无法实现。这里只是为使编写代码更加方便,对CUDA程序的开发无实质性障碍。
如果已经安装VisualAssist X,可以通过以下两步实现需要的功能。
1)使Visual Assist X支持CUDA 函数高亮和代码完成
VisualStudio 2010的菜单里依次选择:“ VAssistX|Visual assistX Options|Projects|C/C++Directories”,在该界面的“Platform”下拉框中选择Custom,在“Show Directories for”下拉框中选择Other include files然后在下面的输入框里,新建、添加如下路径,如图:
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include
C:\ProgramData\NVIDIA Corporation\CUDA Samples\v5.5\common\inc

2)使Visual Assist X实现.cu 文件高亮和代码完成功能,需要编辑注册表。在修改注册表时,为避免带来不必要的错误请先关闭Visual Studio 2010。使用Win+R组合键打开运行窗口,键入入regedit命令(register edit的缩写)打开注册表,找到如下位置:HKEY_CURRENT_USER\Software\WholeTomato\Visual Assist X\VANet10。在右边找到ExtSource项目,鼠标右键选修改,在原有文字后添加如下文字:.cu;.cuh;确定后关闭注册表。重新打开Visual Studio 2010Visual Assist X便开始支持.cu .cuh 文件的语法高亮及代码完成。此时.cu文件的CUDA 函数是高亮的,使用函数名符号就会自动提示函数全称,参数类型等信息。

修改注册表时,请把vs关闭,否则修改不成功。

.创建cu文件测试示例

Visual Studio 2010菜单选择“file|new|project(文件|新建|工程),在打开的新建项目窗口的已安装的模板一栏中选择“NVIDIA|CUDA”,类型选择为“CUDA 5.5Runtime”,见下图。

名称中输入工程名后,点击确定。cuda自动提供的kernel.cu并行加法示例进行编译运行。结果如下:

在此基础上可以方便的进行cuda的代码测试。

.在已有的C++项目中添加cu文件

我们往往需要在已建成的vc项目中,加入gpu的并行算法,以提高算法的效率。在此介绍如何在已有的项目中添加cu文件和配置过程。在cudasample中也提供了具体的参考示例,路径如下:

C:\ProgramData\NVIDIACorporation\CUDA Samples\v5.5\0_Simple\cppIntegration

运行cppIntegration_vs2010.sln,查看其配置。

1) 新建一个Win32控制台项目cppcuda

2) 然后在项目中添加空白cu文件:在源文件处点击右键,添加》新建项

选择的文件类型是CPP文件,在写名称的时候可以直接写为.cu文件,也可以写成.cpp文件之后再进行重命名。此处写为add_kernel.cu.

3) 在项目名称右键选择生成自定义(B

选择CUDA 5.5.(targets,.props)

4) add_kernel.cu文件处点击右键,选择属性》配置属性》项类型下拉菜单中选择 CUDA C/C++

5)在项目》cppcuda属性页中,设置如下红色圆圈内的参数

更改配置属性》常规》字符集:

在 C/C++》常规》附加包含目录中添加绝对路径:

C:\ProgramData\NVIDIACorporation\CUDA Samples\v5.5\common\inc

C/C++》代码生成》运行库改为 多线程调试

链接器》常规》附加库目录中添加

$(CUDA_PATH_V5_5)\lib\$(Platform)

链接器》输入》附加依赖项 中输入

cudart_static.lib

6)以上配置完成之后,可以在空白的addcuda.cu开头添加如下两行代码

#include"cuda_runtime.h"

#include"device_launch_parameters.h"

7) 在cpp 与cu文件建立连接的函数定义必须用extern "C"形式开头,如

extern"C" double addnum(int *c, const int *a, constint *b, unsigned int size);

addnum这个函数具体在cu文件实现并行加法的功能,在cpp文件中调用。

8) 下面给出cppcuda具体的代码

如cppcuda.cpp:

#include"stdafx.h"extern"C" double addnum(int *c, const int *a, const int *b, unsigned intsize);int_tmain(int argc, _TCHAR* argv[])
{const int arraySize = 5;const int a[arraySize] = { 1, 2, 3, 4,5 };const int b[arraySize] = { 10, 20, 30,40, 50 };int c[arraySize] = { 0 };addnum(c, a, b, arraySize);return 0;
}如add_kernel.cu:#include"cuda_runtime.h"
#include"device_launch_parameters.h"
#include<stdio.h>cudaError_taddWithCuda(int *c, const int *a, const int *b, unsigned int size);__global__void addKernel(int *c, const int *a, const int *b)
{int i = threadIdx.x;c[i] = a[i] + b[i];
}extern"C" double addnum(int *c, const int *a, const int *b, unsigned intsize)
{cudaError_t cudaStatus = addWithCuda(c,a, b, size);if (cudaStatus != cudaSuccess) {fprintf(stderr,"addWithCuda failed!");return 1;}}cudaError_taddWithCuda(int *c, const int *a, const int *b, unsigned int size)
{int *dev_a = 0;int *dev_b = 0;int *dev_c = 0;cudaError_t cudaStatus;// Choose which GPU to run on, changethis on a multi-GPU system.cudaStatus = cudaSetDevice(0);if (cudaStatus != cudaSuccess) {fprintf(stderr,"cudaSetDevice failed!  Do you havea CUDA-capable GPU installed?");goto Error;}// Allocate GPU buffers for threevectors (two input, one output)    .cudaStatus =cudaMalloc((void**)&dev_c, size * sizeof(int));if (cudaStatus != cudaSuccess) {fprintf(stderr,"cudaMalloc failed!");goto Error;}cudaStatus =cudaMalloc((void**)&dev_a, size * sizeof(int));if (cudaStatus != cudaSuccess) {fprintf(stderr,"cudaMalloc failed!");goto Error;}cudaStatus =cudaMalloc((void**)&dev_b, size * sizeof(int));if (cudaStatus != cudaSuccess) {fprintf(stderr,"cudaMalloc failed!");goto Error;}// Copy input vectors from host memoryto GPU buffers.cudaStatus = cudaMemcpy(dev_a, a, size* sizeof(int), cudaMemcpyHostToDevice);if (cudaStatus != cudaSuccess) {fprintf(stderr,"cudaMemcpy failed!");goto Error;}cudaStatus = cudaMemcpy(dev_b, b, size* sizeof(int), cudaMemcpyHostToDevice);if (cudaStatus != cudaSuccess) {fprintf(stderr,"cudaMemcpy failed!");goto Error;}// Launch a kernel on the GPU with onethread for each element.addKernel<<<1,size>>>(dev_c, dev_a, dev_b);// Check for any errors launching thekernelcudaStatus = cudaGetLastError();if (cudaStatus != cudaSuccess) {fprintf(stderr,"addKernel launch failed: %s\n", cudaGetErrorString(cudaStatus));goto Error;}// cudaDeviceSynchronize waits for thekernel to finish, and returns// any errors encountered during thelaunch.cudaStatus = cudaDeviceSynchronize();if (cudaStatus != cudaSuccess) {fprintf(stderr,"cudaDeviceSynchronize returned error code %d after launchingaddKernel!\n", cudaStatus);goto Error;}// Copy output vector from GPU bufferto host memory.cudaStatus = cudaMemcpy(c, dev_c, size* sizeof(int), cudaMemcpyDeviceToHost);if (cudaStatus != cudaSuccess) {fprintf(stderr,"cudaMemcpy failed!");goto Error;}Error:cudaFree(dev_c);cudaFree(dev_a);cudaFree(dev_b);return cudaStatus;
}


相关文章:

SmartRoute之大规模消息转发集群实现

为什么80%的码农都做不了架构师&#xff1f;>>> 消息转发的应用场景在现实中的应用非常普遍&#xff0c;我们常用的IM工具也是其中之一&#xff1b;现有很多云平台也提供了这种基础服务&#xff0c;可以让APP更容易集成相关功能而不必投入相应的开发成本。对于实现…

unity项目警告之 LF CRLF问题

unity中创建的脚本&#xff0c;以LF结尾。 Visual studio中创建的脚本&#xff0c;以 CRLF结尾。 当我们创建一个unity脚本后&#xff0c;再用VS打开编辑保存后&#xff0c;这个文件既有LF结尾符&#xff0c;也有CRLF结尾符。 解决办法&#xff1a;更改unity的代码生成模板&…

Eigen向量化内存对齐/Eigen的SSE兼容,内存分配/EIGEN_MAKE_ALIGNED_OPERATOR_NEW

1.总结 对于基本数据类型和自定义类型&#xff0c;我们需要用预编译指令来保证栈内存的对齐&#xff0c;用重写operator new的方式保证堆内存对齐。对于嵌套的自定义类型&#xff0c;申请栈内存时会自动保证其内部数据类型的对齐&#xff0c;而申请堆内存时仍然需要重写operat…

c/c++文件遍历

//CBrowseDir.h#pragma once#include <stdlib.h> #include <direct.h> #include <string.h> #include <io.h> #include <stdio.h> #include <iostream> using namespace std; class CBrowseDir { protected: //存放初始目录的绝对…

优化应用启动时的体验

2019独角兽企业重金招聘Python工程师标准>>> 对于应用的启动时间&#xff0c;只能是尽量的避免一些耗时的、非必要性的操作在主线程中&#xff0c;这样相对减少一部分启动的耗时&#xff0c;同时在等待第一帧显示的时间里&#xff0c;可以加入一些配置用来增加用户体…

系列四、SpringMVC响应数据和结果视图

2019独角兽企业重金招聘Python工程师标准>>> 项目结构如下 一、返回值分类 一 返回字符串 Controller方法返回字符串可以指定逻辑视图的名称&#xff0c;根据视图解析器为物理视图的地址&#xff0c;根据字符串最后跳转到对应jsp页面 第一步、导入依赖坐标文件、配置…

numpy数组切片:一维/二维/数组

文章目录numpy数组切片操作一维数组&#xff08;冒号&#xff1a;&#xff09;1、一个参数&#xff1a;a[i]2、两个参数&#xff1a;ba[i:j]3、三个参数&#xff1a;格式b a[i:j:s]4、例子二维数组&#xff08;逗号&#xff0c;&#xff09;取元素 X[n0,n1]切片 X[s0:e0,s1:e1…

行列式求值、矩阵求逆

#include <iostream> #include <string> #include <assert.h> #include <malloc.h> #include <iostream> #include <stdlib.h> #include <memory.h> #include <time.h>using namespace std;//动态分配大小位size的一维数组 te…

IP 地址子网划分

1.你所选择的子网掩码将会产生多少个子网2的x次方-2(x代表网络位借用主机的位数&#xff0c;即2进制为1的部分&#xff0c;现在的网络中&#xff0c;已经不需要-2&#xff0c;已经可以全部使用&#xff0c;不过需要加上相应的配置命令&#xff0c;例如CISCO路由器需要加上ip su…

git rebase 和 git merger

& git merge 在上图中&#xff0c;每一个绿框均代表一个commit。除了c1&#xff0c;每一个commit都有一条有向边指向它在当前branch当中的上一个commit。 图中的项目&#xff0c;在c2之后就开了另外一个branch&#xff0c;名为experiment。在此之后&#xff0c;master下的修…

matplotlib绘制三维轨迹图

1. 绘制基本三维曲线 # import necessary module from mpl_toolkits.mplot3d import axes3d import matplotlib.pyplot as plt import numpy as np# load data from file # you can replace this using with open data1 np.loadtxt("./pos.txt") # print (data1) n…

求一个矩阵的最大子矩阵

#include <iostream> #include <string> #include <assert.h> #include <malloc.h> #include <iostream> #include <stdlib.h> #include <memory.h> #include <time.h> #include <limits.h>using namespace std;//动态分…

tcpdump抓包文件提取http附加资源

2019独角兽企业重金招聘Python工程师标准>>> 前面几篇文章铺垫了一大批的协议讲解&#xff0c;主要是为了提取pcap文件中http协议附加的资源。 1、解析pcap文件&#xff0c;分为文件格式头&#xff0c;后面就是数据包头和包数据了 2、分析每个包数据&#xff0c;数据…

smobiler介绍(二)

类似开发WinForm的方式&#xff0c;使用C#开发Android和IOS的移动应用&#xff1f;听起来感觉不可思议&#xff0c;那么Smobiler平台到底是如何实现的呢&#xff0c;这里给大家介绍一下。客户端Smobiler分为两种客户端&#xff0c;一种是开发版&#xff0c;一种是打包版开发版&…

Matplotlib基本用法

Matplotlib Matplotlib 是Python中类似 MATLAB 的绘图工具&#xff0c;熟悉 MATLAB 也可以很快的上手 Matplotlib。 1. 认识Matploblib 1.1 Figure 在任何绘图之前&#xff0c;我们需要一个Figure对象&#xff0c;可以理解成我们需要一张画板才能开始绘图。 import matplot…

HDU1201 18岁生日【日期计算】

18岁生日 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 32851 Accepted Submission(s): 10649Problem DescriptionGardon的18岁生日就要到了&#xff0c;他当然很开心&#xff0c;可是他突然想到一个问题&am…

TypeScript 从听说到入门(上篇)

我为什么会这样念念又不忘 / 你用什么牌的箭刺穿我心脏 我也久经沙场 / 戎马生涯 / 依然 / 被一箭刺伤 ——李荣浩《念念又不忘》 接下来我会分上、下两篇文章介绍 TypeScript。 我也是 TypeScript 初学者&#xff0c;这两篇文章是我的学习笔记&#xff0c;来源于一个系列的免费…

SLAM前端中的视觉里程计和回环检测

1. 通常的惯例是把 VSLAM 分为前端和后端。前端为视觉里程计和回环检测&#xff0c;相当于是对图像数据进行关联&#xff1b;后端是对前端输出的结果进行优化&#xff0c;利用滤波或非线性优化理论&#xff0c;得到最优的位姿估计和全局一致性地图。 1 前端&#xff1a;图像数…

粗心导致的bug

不管是调试程序还是直接看输出i都为2&#xff0c;下面是运行时输出的&#xff1a; 用vs2010以前遇到更奇葩的事&#xff0c;这次用vs2013也是遇到奇葩&#xff0c;taskNumber值为2一定&#xff0c;下面两个循环体&#xff0c;每个循环体各执行一次&#xff0c;程序输出i 2真是…

gearman中任务的优先级和返回状态

gearman中任务的优先级和返回状态 一、任务的优先级 同步阻塞调用&#xff0c;等待返回结果 doLow:最低优先 doNomal:正常优先级 doHigh:最优先执行 异步派发任务&#xff0c;不等待返回结果&#xff0c;返回任务句柄&#xff0c;通过该句柄可获取任务运行状态信息 doLowBackgr…

VMware学习使用笔记

本人在学习基础上&#xff0c;结合实际项目实现总结的笔记。以下内容都是基于VMware vSphere 6.7的官方文档中vSAN的规划和部署而来&#xff0c;网址https://docs.vmware.com/cn/VMware-vSphere/index.html。 对于ESXi系统 对于内存不足512G&#xff0c;可以从USB或Micro SD引导…

【原】Java学习笔记020 - 面向对象

1 package cn.temptation;2 3 public class Sample01 {4 public static void main(String[] args) {5 // 成员方法的参数列表&#xff1a;6 // 1、参数列表中的数据类型是值类型7 // 2、参数列表中的数据类型是引用类型8 // A&#xff1a;…

win32 wmi编程获取系统信息

//GetSysInfo.h#pragma once#include <afxtempl.h>class GetSysInfo { public:GetSysInfo(void);~GetSysInfo(void);public: /********获取操作系统版本&#xff0c;Service pack版本、系统类型************/ void GetOSVersion(CString &strOSVersion,CString &…

cmake 注意事项

1. add_subdirectory()调用 CMake将在每次add_subdirectory()调用时创建一个新的变量作用域,因此这个参数最好的用法是放在cmaklists的最后使用&#xff0c;这样的话创建的新的变量的作用范围与内存的变化就不会影响到后面的变量的使用。 查看并打印在cmake里面定义的宏在&am…

Jmeter 使用自定义变量

有些情况下比如发起测试时URL的主机名和端口需要在采样器中出现多次&#xff0c;这样就有个问题&#xff0c;当测试的主机更改时&#xff0c; 我们需要修改主机名称&#xff0c;这时就需要修改多个地方&#xff0c;如果多的情况会有遗漏。如果我们在配置脚本的时候&#xff0c;…

Kubernetes1.5源码分析(二) apiServer之资源注册

源码版本 Kubernetes v1.5.0 简介 k8s里面有各种资源&#xff0c;如Pod、Service、RC、namespaces等资源&#xff0c;用户操作的其实也就是这一大堆资源。但这些资源并不是杂乱无章的&#xff0c;使用了GroupVersion的方式组织在一起。每一种资源都属于一个Group&#xff0c;而…

opencv3 视频稳像

OpneCV3.x中提供了专门应用于视频稳像技术的模块&#xff0c;该模块包含一系列用于全局运动图像估计的函数和类。结构体videostab::RansacParams实现了RANSAC算法&#xff0c;这个算法用来实现连续帧间的运动估计。videostab::MotionEstimatorBase是基类中所有全局运动估计方法…

perf+火焰图 = 性能分析利器

perf 1. perf安装 sudo apt install linux-tools-common检查是否安装好 perf如果出现 You may need to install the following packages for this specific kernel:推荐安装可以按照提示将推荐安装包全部安装好 sudo apt-get install linux-tools-对应版本-generic linux-c…

3- MySQL数据类型

MySQL表字段类型 MySQL数据表的表示一个二维表&#xff0c;由一个或多个数据列构成。 每个数据列都有它的特定类型&#xff0c;该类型决定了MySQL如何看待该列数据&#xff0c;并且约束列存放相应类型的数据。 MySQL中的列表有三种&#xff1a;数值类&#xff0c;字符串类和日期…

AddressSanitizer+cmake

1. AddressSanitizercmake(Linux) 编译指令&#xff1a; CXXFLAGS通常需要加上 -fsanitizeaddress -fno-omit-frame-pointer #打印函数调用路径 -fsanitize-recoveraddress #AddressSanitizer遇到错误时能够继续-fsanitizeaddress-fno-omit-frame-pointer-fsanitize-rec…