CUDA
-牧野-
这个作者很懒,什么都没留下…
展开
-
VS2015编译环境下CUDA安装配置
CUDA下载CUDA是NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题,CUDA只支持NVIDIA自家的显卡,过旧的版本型号也不被支持。下载地址:https://developer.nvidia.com/cuda-downloads 最新版本是8.0.44,注意根据自己的系统选择合适的版本:双击安装包,弹出对话框,选择合适的路径:原创 2017-01-06 00:14:46 · 21273 阅读 · 2 评论 -
tensorflow中使用tf.ConfigProto()配置Session运行参数&&GPU设备指定
tf.ConfigProto()函数用在创建session的时候,用来对session进行参数配置: config = tf.ConfigProto(allow_soft_placement=True, allow_soft_placement=True)config.gpu_options.per_process_gpu_memory_fraction = 0.4 #占用40...原创 2018-01-18 21:08:36 · 71482 阅读 · 11 评论 -
CUDA+OpenCV 绘制朱利亚(Julia)集合图形
Julia集中的元素都是经过简单的迭代计算得到的,很适合用CUDA进行加速。对一个600*600的图像,需要进行360000次迭代计算,所以在CUDA中创建了600*600个线程块(block),每个线程块包含1个线程,并行执行360000次运行,图像的创建和显示通过OpenCV实现:#include "cuda_runtime.h"#include using namespac原创 2017-02-03 21:42:07 · 2845 阅读 · 3 评论 -
CUDA多个流的使用
CUDA中使用多个流并行执行数据复制和核函数运算可以进一步提高计算性能。以下程序使用2个流执行运算:#include "cuda_runtime.h" #include #include #include #define N (1024*1024) #define FULL_DATA_SIZE N*20 __global__ voi原创 2017-02-14 23:10:38 · 10159 阅读 · 4 评论 -
CUDA流(Stream)
CUDA流表示一个GPU操作队列,该队列中的操作将以添加到流中的先后顺序而依次执行。可以将一个流看做是GPU上的一个任务,不同任务可以并行执行。使用CUDA流,首先要选择一个支持设备重叠(Device Overlap)功能的设备,支持设备重叠功能的GPU能够在执行一个CUDA核函数的同时,还能在主机和设备之间执行复制数据操作。支持重叠功能的设备的这一特性很重要,可以在一定程度上提升GPU程序的原创 2017-02-14 22:56:49 · 27753 阅读 · 7 评论 -
CUDA页锁定内存(Pinned Memory)
对CUDA架构而言,主机端的内存被分为两种,一种是可分页内存(pageable memroy)和页锁定内存(page-lock或 pinned)。可分页内存是由操作系统API malloc()在主机上分配的,页锁定内存是由CUDA函数cudaHostAlloc()在主机内存上分配的,页锁定内存的重要属性是主机的操作系统将不会对这块内存进行分页和交换操作,确保该内存始终驻留在物理内存中。GPU知原创 2017-02-12 16:07:07 · 17586 阅读 · 4 评论 -
CUDA atomic原子操作
CUDA的原子操作可以理解为对一个变量进行“读取-修改-写入”这三个操作的一个最小单位的执行过程,这个执行过程不能够再分解为更小的部分,在它执行过程中,不允许其他并行线程对该变量进行读取和写入的操作。基于这个机制,原子操作实现了对在多个线程间共享的变量的互斥保护,确保任何一次对变量的操作的结果的正确性。原子操作确保了在多个并行线程间共享的内存的读写保护,每次只能有一个线程对该变量进行读原创 2017-02-09 23:09:19 · 28652 阅读 · 0 评论 -
CUDA+OpenGL混合编程
CUDA+OpenGL混合编程示例:#include #include #include "GL\glew.h" #include "GL\glut.h" #include #include #include #define GET_PROC_ADDRESS(str) wglGetProcAddress(str) #define DIM 512原创 2017-02-07 22:49:25 · 5035 阅读 · 0 评论 -
CUDA二维纹理内存+OpenCV图像滤波
CUDA和OpenCV混合编程,使用CUDA的纹理内存,实现图像的二值化以及滤波功能。#include #include #include using namespace cv;int width = 512;int height = 512;// 2维纹理texture texRef;// 核函数__global__ void transformKerne原创 2017-02-08 21:04:09 · 4000 阅读 · 2 评论 -
CUDA一维纹理内存
和常量内存一样,纹理内存是另一种类型的只读内存,使用纹理内存能够减少内存流量,提升运算性能。相关介绍参见: http://blog.csdn.net/linj_m/article/details/415225731. 位置:设备内存2. 目的:能够减少对内存的请求并提供高效的内存带宽。是专门为那些在内存访问模式中存在大量空间局部性的图形应用程序设计,意味着一个线程读取的位置可能与邻原创 2017-02-06 23:07:19 · 1770 阅读 · 2 评论 -
CUDA查询和选取设备信息
CUDA查询设备信息CUDA C中的cudaGetDeviceProperties函数可以很方便的获取到设备的信息,函数原型是:cudaError_t CUDARTAPI cudaGetDeviceProperties(struct cudaDeviceProp *prop, int device);第二个参数device是从0开始的设备的编号。第一个参数prop指向的是一个cudaDeviceP...原创 2017-01-16 23:21:58 · 17820 阅读 · 5 评论 -
详解第一个CUDA程序kernel.cu
CUDA是一个基于NVIDIA GPU的并行计算平台和编程模型,通过调用CUDA提供的API,可以开发高性能的并行程序。CUDA安装好之后,会自动配置好VS编译环境,按照UCDA模板新建一个工程“Hello CUDA”:建好之后,发现该工程下已经存在一个项目 kernel.cu。这个是CUDA编程的入门示例,实现的功能是两个整型数组相加,代码如下:#include "cud原创 2017-01-15 06:52:20 · 19708 阅读 · 3 评论 -
CUDA中的常量内存__constant__
GPU包含数百个数学计算单元,具有强大的处理运算能力,可以强大到计算速率高于输入数据的速率,即充分利用带宽,满负荷向GPU传输数据还不够它计算的。CUDA C除全局内存和共享内存外,还支持常量内存,常量内存用于保存在核函数执行期间不会发生变化的数据,使用常量内存在一些情况下,能有效减少内存带宽,降低GPU运算单元的空闲等待。使用常量内存提升性能使用常量内存可以提升运算性能的原创 2017-02-06 19:21:51 · 14379 阅读 · 2 评论 -
CUDA线程协作之共享存储器“__shared__”&&“__syncthreads()”
在GPU并行编程中,一般情况下,各个处理器都需要了解其他处理器的执行状态,在各个并行副本之间进行通信和协作,这涉及到不同线程间的通信机制和并行执行线程的同步机制。共享内存“__share__”CUDA中的线程协作主要是通过共享内存实现的。使用关键字“__share__”声明共享变量,将使这个变量驻留在共享内存中,该变量具有以下特征:位于线程块的共享存储器空间原创 2017-02-05 12:29:42 · 7979 阅读 · 0 评论 -
CUDA中block和thread的合理划分配置
CUDA并行编程的基本思路是把一个很大的任务划分成N个简单重复的操作,创建N个线程分别执行执行,每个网格(Grid)可以最多创建65535个线程块,每个线程块(Block)一般最多可以创建512个并行线程,在第一个CUDA程序中对核函数的调用是:addKernel>>(dev_c, dev_a, dev_b);这里的>>运算符内是核函数的执行参数,告诉编译器运行时如何启动核函数,用于说明内原创 2017-02-04 00:11:39 · 33652 阅读 · 6 评论 -
CUDA软件架构—网格(Grid)、线程块(Block)和线程(Thread)的组织关系以及线程索引的计算公式
网格(Grid)、线程块(Block)和线程(Thread)的组织关系CUDA的软件架构由网格(Grid)、线程块(Block)和线程(Thread)组成,相当于把GPU上的计算单元分为若干(2~3)个网格,每个网格内包含若干(65535)个线程块,每个线程块包含若干(512)个线程,三者的关系如下图:Thread,block,grid是CUDA编程上的概念,为了方便程序员软件原创 2017-02-04 23:36:53 · 48702 阅读 · 7 评论 -
显卡、显卡驱动、显存、GPU、CUDA、cuDNN
显卡Video card,Graphics card,又叫显示接口卡,是一个硬件概念(相似的还有网卡),执行计算机到显示设备的数模信号转换任务,安装在计算机的主板上,将计算机的数字信号转换成模拟信号让显示器显示出来。显卡是计算机的标配之一,计算机要显示图像就必须安装显卡。普通计算机的显卡一般是集成在主板上的。显卡驱动显卡驱动是显卡跟计算机连接的桥梁,可以让计算机识别到GPU硬件,是必须正确安装...原创 2018-03-07 13:09:05 · 2403 阅读 · 0 评论