CUDA入门2——获取显卡参数
来源:互联网 发布:linux创建新用户并授权 编辑:程序博客网 时间:2024/06/05 16:52
1 创建CUDA头文件
#ifndef _CUDAINPUT_H_#define _CUDAINPUT_H_#include "cuda_runtime.h"#include "device_launch_parameters.h"#include <stdio.h>typedef enum { CI_OK, CI_ERROR}CI_RESULT;class input_engine {public: CI_RESULT initCUDA();private: char* err_str;};#endif // !_CUDA_H_
1.1 #ifndef/#define/#endif
这是为了防止该头文件被重复引用,具体内容可见《#ifndef/#define/#endif使用详解》。
1.2 创建状态枚举
typedef enum { CI_OK, CI_ERROR}CI_RESULT;
这是和公司图像大神学的编程规范,用来简化代码的return,个人感觉很有效果。
1.3 创建接口
CI_RESULT initCUDA();
其具体实现接下来说明。另外这里有Char*类型,是为具体实现中的printf()使用。stdio.h头文件与printf()有关。
2 创建CUDA文件
#include "Cuda.cuh"CI_RESULT input_engine::initCUDA() { int count; cudaGetDeviceCount(&count); if (count <= 0) { sprintf(err_str, "error: there is no cuda capable device;\n"); return CI_ERROR; } cudaDeviceProp prop; //获得显卡状态 for (int i = 0; i < count; i++) { cudaGetDeviceProperties(&prop, i); if (prop.major >= 1) { printf("\n********************************************\n"); printf("--> CUDA device %d/%d:\n", i + 1, count); printf(" --> Identfy: %s\n", prop.name); printf(" --> Host Memory: %d\n", prop.canMapHostMemory); printf(" --> Clock Rate: %d\n", prop.clockRate); printf(" --> Compute Mode: %d\n", prop.computeMode); printf(" --> Device OverLap: %d\n", prop.deviceOverlap); printf(" --> Integrated: %d\n", prop.integrated); printf(" --> Kernel Exec Timeout Enabled : %d\n", prop.kernelExecTimeoutEnabled); printf(" --> Max Grid Size: %d*%d*%d\n", prop.maxGridSize[0], prop.maxGridSize[1], prop.maxGridSize[2]); printf(" --> Max Threads Dim: %d*%d*%d\n", prop.maxThreadsDim[0], prop.maxThreadsDim[1], prop.maxThreadsDim[2]); printf(" --> Max Threads per Block: %d\n", prop.maxThreadsPerBlock); printf(" --> Maximum Pitch:%u MB\n", prop.memPitch / 1024 / 1024); printf(" --> Number of Multiprocessors : %d\n", prop.multiProcessorCount); printf(" --> 32bit Refisters Availble per Block:%d\n", prop.regsPerBlock); printf(" --> Shared Memory Acailbale per Block: %d KB\n", prop.sharedMemPerBlock); printf(" --> Alignment Requirement for Textures: %d\n", prop.textureAlignment); printf(" --> Constant memory Acvailable: %u KB\n", prop.totalConstMem / 1024); printf(" --> Global Memory Available:%u MB\n", prop.totalGlobalMem / 1024 / 1024); printf(" --> Warp Size: %d Threads\n", prop.warpSize); printf(" --> Cuda compute capability: %d.%d\n", prop.major, prop.minor); printf("\n********************************************\n"); } if (prop.major < 3) { sprintf(err_str, "error: this program requires at last CUDA capability 3.0;\n"); return CI_ERROR; } if (cudaSetDevice(0) != cudaSuccess) { sprintf(err_str, "error: Can not set CUDA device;\n"); return CI_ERROR; } return CI_OK; }}
2.1 包含头文件
#include "Cuda.cuh"
2.2 接口的具体实现
这里需要注意的是默认使用第一个显卡,如果是多显卡的话需要做额外的处理。
3 添加C++文件
#include "Cuda.cuh"#include <conio.h>void printf_usage(){ printf("\n**********************************************\n"); printf("q: quit\n"); printf("**********************************************\n");}int main() { input_engine cudainput; cudainput.initCUDA(); printf_usage();START: if ('q' != _getch()) { goto START; } return 0;}
3.1 包含头文件
#include "Cuda.cuh"#include <conio.h>
conio.h与下文_getch()方法有关。
3.2 添加程序入口
int main() { input_engine cudainput; cudainput.initCUDA(); return 0;}
这时候如果直接运行程序会出现窗口一闪而过的情况。就需要一种方法让窗口一直显示,直到触发某件事再退出。
3.3 添加显示窗口方法
START: if ('q' != _getch()) { goto START; }
这里意思是如果键盘按下去的不是Q,就去执行START,结果就是这个方法被循环执行,实现显示窗口的功能。而printf_usage()方法是为了给用户提示。
至此,运行就可以获取显卡详细信息。
OK。
阅读全文
0 0
- CUDA入门2——获取显卡参数
- CUDA——GPU参数获取
- CUDA编程——打印显卡属性
- CUDA显卡运算编程菜鸟入门指南1——Hello world
- 通过CUDA 代码了解自己的显卡的参数
- Cuda 学习教程二:GeForce GTX 950M 显卡参数
- 电脑参数——显卡篇
- cuda入门——结合opncv和cuda编程(2)
- CUDA之——显卡驱动自动中断服务并恢复问题解决
- 【ubuntu14.04配置caffe】一——双显卡安装NVIDIA驱动以及cuda和cudnn
- Ubuntu——Nvidia显卡驱动、cuda的一些常用操作
- CUDA 多显卡支持
- CUDA入门3.2——使用CUDA实现鱼眼转全景图(CUDA环节)
- CUDA之——入门程序
- 显卡参数
- Revit二次开发入门——获取和修改元素参数
- Node入门学习——获取POST请求的参数
- 如何使用CUDA 显卡编程
- LINUX中swap与windows中虚拟内存区别
- JS 中 DateTime日期时间及方法函数
- iOS系统弹框封装 一句代码实现中间和底部弹框
- 04基本命令
- JDK1.7.0_80的安装与配置
- CUDA入门2——获取显卡参数
- boost库之socket 非阻塞/缓冲区大小等属性设置
- 使用Python脚本实现360加固后一键V2签名和Walle打出渠道包
- 商城项目分解-登录
- Hadoop集群搭建(HDFS和Yarn集群)
- Java for循环的几种用法
- Greenplum通过gp_dist_random('gp_id') 在所有节点调用某个函数
- On Reading this Text
- Spark注册UDF函数,用于DataFrame DSL or SQL