GPU/CUDA
文章平均质量分 55
屠变恶龙之人
这个作者很懒,什么都没留下…
展开
-
Ubuntu下安装CUDA的最简方法
一、环境说明 系统环境Ubuntu14.04, 64位。首先在 https://developer.nvidia.com/cuda-downloads 下载CUDA7.5,依次选择的顺序如下图,下载之后(此处.run文件放在Dasktop下,当然也可自己指定)准备安装。二、安装步骤 1、按Ctrl+Alt+F1,进入tty1模式; 2、依次输入原创 2015-12-01 17:28:09 · 888 阅读 · 0 评论 -
cudaMemcpyToSymbol 和cudaMemcpy
这是今天在群里有人问了这么一个问题 cudaMemcpyToSymbol可以将数据从host拷贝到global,cudaMemcpy也是从host到>global,这种情况下二个函数有什么区别吗?和各位大佬讨论一下后,和大家分享一下~首先,学到了cudaMemcpyToSymbol竟然还有将数据从host拷贝到global的功能,以前只用过这个函数拷贝到constant转载 2017-01-03 15:34:23 · 7535 阅读 · 0 评论 -
多核系统中温度隐蔽通道的带宽优化
On the Capacity of Thermal Covert Channels in Multicores, EuroSys’16(B类), 2016年4月[1] 1. 背景ETHZurich(苏黎世联邦理工学院)的研究人员针对多核系统中的温度隐蔽通道进行了研究。由于现在处理器技术的快速发展,其散热问题非常重要。处理器通常会配备温度传感器,并利用DynmaicTh转载 2017-01-04 10:11:41 · 323 阅读 · 0 评论 -
分支的影响
同一block中的thread开始于相同的指令地址, 理论上可按不同的分支执行,实际上, 由于8个SP共用一套取指与发射单元,因此同一Warp中的线程执行的指令是相同的。 如果一个Warp中的线程分别跳转到不同的分支,则SM就需要把每一个分支的指令发射到每一个SP上, 再由SP根据线程逻辑决定需不需要执行,执行的时间是各分支的总和,极大的损耗了性能。因此尽量避免分支。原创 2016-12-27 12:09:22 · 222 阅读 · 0 评论 -
ptxas fatal : Unresolved extern function xxxx
出现这个问题。找到了原因是,在global函数中调用了__device__函数,但是这两个文件不在同一个src文件里面。http://stackoverflow.com/questions/31006581/cuda-device-unresolved-extern-functionThe issue is that you defined a __devi转载 2017-01-05 10:11:46 · 2585 阅读 · 2 评论 -
calling a __host__ function("XXX") from a __global__ function is not allowed
原因一:error : calling a __host__ function("fmod ") from a __global__ functionThis is happening because of a template argument mismatch. You are calling fmod with a floating point argument an原创 2017-01-06 09:17:02 · 8091 阅读 · 0 评论 -
共享内存与Thread的同步
在之前我们通过block,继续增大了线程的数量,结果还是比较令人满意的,但是也产生了一个新的问题,即,我们在CPU端的加和压力变得很大,所以我们想到能不能从GPU上直接完成这个工作。我们知道每个block内部的Thread之间是可以同步和通讯的,本篇我们将让每个block把每个thread的计算结果进行加和。所以本篇博客我们将研究CUDA架构中Thread另外两个非常重要的概念,共享内存Sha转载 2017-01-09 09:38:13 · 544 阅读 · 0 评论 -
bank conflict
简介 目前 CUDA 装置中,每个 multiprocessor 有 16KB 的 shared memory。Shared memory 分成 16 个 bank。如果同时每个 thread 是存取不同的 bank,就不会产生任何问题,存取shared memory 的速度和存取寄存器相同。不过,如果同时有两个(或更多个) threads 存取同一个 bank 的数据,就会发生 bank原创 2017-01-09 16:30:24 · 2465 阅读 · 0 评论 -
多显卡问题
概念目前组建多卡的技术A/N两家叫法不同,AMD方面叫做交火,NV这边叫SLI。双显卡交火是用来提升显卡效率的,要显示只能插在主显卡上。SLI的条件相对严格:1、主板要支持SLI ,有的主板只支持CF要注意,电源功率要够这点不多说了。2、需要有SLI连接器来链接SLI的显卡。3、关于那些卡可以一起SLI : 显卡核心要一样,比如580和590不能SLI.原创 2017-05-04 20:47:28 · 1472 阅读 · 0 评论 -
GPUDirect
作用 加速与网络和存储设备之间的通信 避免访问固定(pinned) CUDA主机内存时不必要的系统内存拷贝和CPU的开销 GPU之间的P2P数据访问 同一系统中的一个GPU直接访问另一个GPU使用直接的高速DMA传输 P2P的内存访问 优化了在CUDA内核中使用NUMA式访问其他的GPU内存与本GPU之间的通讯原创 2017-05-15 16:36:49 · 2521 阅读 · 0 评论 -
RDMA相关协议和通信库
虽然RDMA最早出现在InfiniBand技术中,但是在传统的网络硬件上也可实现相同机制。采用RDMA来获取高性能的协议包括Sockets Direct Protocol、SCSI RDMA Protocol(SRP)和Direct Access File System(DAFS)。采用RDMA的通信库包括Direct Access Provider Library(D转载 2017-05-18 09:04:39 · 2641 阅读 · 0 评论 -
纹理内存
定义纹理缓存是专门为那些在内存访问模式中存在大量空间局部性(Spatial Locality)的图形应用程序而设计。只读。在kernel中访问纹理存储器的操作称为纹理拾取(texture fetching)。将显存中的数据与纹理参照系关联的操作,称为将数据与纹理绑定(texture binding). 显存中可以绑定到纹理的数据有两种,分别是普通的线性存储器和cuda原创 2017-06-01 10:05:59 · 858 阅读 · 0 评论 -
Ubuntu下通过SSH远程登录服务器并运行程序的方法
1. 首先在服务器上安装ssh的服务器端。$ sudo aptitude install openssh-server2. 启动ssh-server。$ /etc/init.d/ssh restart3. 确认ssh-server已经正常工作。$ netstat -tlptcp6 0 0 *:ssh *:* LISTEN -看到上面这一行输出说明ssh-serv原创 2016-11-14 15:19:01 · 2292 阅读 · 1 评论 -
block调度
由于GPU目前在各行各业的广泛应用,无论是深度学习、大数据、云计算等都离不开GPU的并行加速,前阵子自学了Cuda-c编程,希望将来的研究工作能够用得上。 Cuda系列总共有4篇,这里主要用于记录本人学习过程中的一些问题的思考和总结,及网上汇总摘录的别人的一些总结、看法等,并不适合新手入门。如有错误,欢迎各位指正。 sm流处理器簇对blocks的调度策略 在cuda中,转载 2016-12-15 18:54:31 · 544 阅读 · 0 评论 -
deviceQuery查看属性
在CUDA安装好后可以用DeviceQuery看一下GPU的相关属性,从而对GPU有一定了解,有助于今后的CUDA编程。#include "cuda_runtime.h"#include "device_launch_parameters.h"#include#include#includeint main(){ int deviceCount; cudaGetD转载 2016-11-15 15:55:05 · 2752 阅读 · 0 评论 -
windows下远程登录服务器
1. 准备:需要安装SSH Secure Shell Client软件进行两个系统间文件的互相操作;2. 登录:安装完成后,打开软件,点击如图“Quick Connect”,按步骤输入Host Name—User Name—Password,登陆成功,完毕。3. 测试:输入如图指令,可以查看gcc版本和CUDA版本原创 2016-11-14 09:49:18 · 770 阅读 · 0 评论 -
CUDA笔记一编程模型
一、CUDA 编程模型2009-10-21 CUDA的代码分成两部分,一部分在host(CPU)上运行,是普通的C代码;另一部分在device(GPU)上运行,是并行代码,称为kernel,由nvcc进行编译。 Kernel产生的所有线程成为Grid。在并行部分结束后,程序回到串行部分即到host上运行。 在CUDA中,host和device转载 2016-04-08 22:28:13 · 337 阅读 · 0 评论 -
CUDA笔记二线程模型
一个grid中的所有线程执行相同的内核函数,通过坐标进行区分。这些线程有两级的坐标,blockId和threadId,由CUDA runtime system指定。grimDim.x标识block在x维度上的数目,gridDim.y标识block在y维度上的数目。例如,转载 2016-04-08 22:29:29 · 447 阅读 · 0 评论 -
CUDA笔记四性能
四、CUDA性能 CUDA中的block被划分成一个个的warp,在GeForce8800GTX上,一个warp有32个线程。若不够32个线程,则padding相应数目的线程。Warp中的线程ID是连续且递增的。对于二维组织的线程来说,先把threadIdx.y为0的线程按照threadIdx.x从小到大排,然后把threadIdx.y为1的线程按照threadIdx.x从小到转载 2016-04-08 22:30:53 · 687 阅读 · 0 评论 -
cuda的Pinned Memory(分页锁定内存)
当为了提高CUDA程序的主机内存和设备内存传输消耗时,可以尝试一下两种方案一:使用分页锁定内存,分页锁定内存和显存之间的拷贝速度大约是6GB/s,普通的分页内存和GPU间的速度大约是3GB/s,(另外:GPU内存间速度是30G,CPU间内存速度是10GB/s),但是这种方法会带来额外的cpu内存间的拷贝时间二:使用内存映射(Zero Copy)让GPU直接使用CPU的内存,减少主机转载 2016-04-08 16:55:13 · 910 阅读 · 0 评论 -
cuobjdump的使用
n@n:~/desktop$ nvcc stack_overflow.cun@n:~/desktop$ cuobjdump -sass a.outFatbin elf code:================arch = sm_20code version = [1,7]producer = host = linuxcompile_size = 64bit原创 2016-03-14 21:11:39 · 1280 阅读 · 0 评论 -
ubuntu查看安装的cuda toolkit自带的工具及其他安装文件
1.查看工具默认目录为:local,进入local:cd /usr/local输入命令:ls,查看该目录下的文件,可以看到安装的cuda在此处进入cuda文件:cd cuda-7.5(我的是7.5),此处为安装的东西查找安装的工具,在bin目录下,进入cuda文件所在目录,然后进入bin目录:cd bin输入命令:ls,就可以看到cuda toolkit自带转载 2016-03-14 19:55:24 · 5510 阅读 · 1 评论 -
Nsight运行程序报undefined reference to “xxx”错误的问题
在确认安装了openGL之后:1.右击程序,选择属性“properties”;2.在“Build”下选择“Settings”,在“Tool Settings”下面找到“Libraries”,最后在右端添加GL、GLU、glut就可以了。原创 2016-03-08 15:12:44 · 477 阅读 · 0 评论 -
cudaMemcpy与kernel
Memory操作cuda程序将系统区分成host和device,二者有各自的memory。kernel可以操作device memory,为了能很好的控制device端内存,CUDA提供了几个内存操作函数: 为了保证和易于学习,CUDA C 的风格跟C很接近,比如:cudaError_t cudaMalloc ( void** devPtr, size_t size转载 2016-10-12 18:19:12 · 10203 阅读 · 0 评论 -
流
并发重点在于一个极短时间段内运行多个不同的任务;并行重点在于同时运行一个任务。1. 任务并行性:是指并行执行两个或多个不同的任务,而不是在大量数据上执行同一个任务。2. 概念:CUDA流表示一个GPU操作队列,并且该队列中的操作将以指定的顺序执行。我们可以在流中添加一些操作,如核函数启动,内存复制以及事件的启动和结束等。这些操作的添加到流的顺序也是它们的执行顺序。转载 2016-10-12 18:32:14 · 295 阅读 · 0 评论 -
CUDA编程:向量加法
Hello World:#includeusing namespace std; __global__ void kernel(void){} int main(){ kernel>>; cout return 0;} 【注意】 1. 运行在GPU上的程序称为kernel函数,表示设备原创 2016-11-03 15:04:31 · 3411 阅读 · 0 评论 -
CUDA存储器模型
CUDA将CPU作为主机(Host),GPU作为设备(Device)。一个系统中可以有一个主机和多个设备。CPU负责逻辑性强的事务处理和串行计算,GPU专注于执行高度线程化的并行处理任务。它们拥有相互独立的存储器(主机端的内存和显卡端的显存)。 运行在GPU上的函数称为kernel(内核函数)。一个完整的CUDA程序是由一些列的kernel函数和主机端的串行处理步骤共同完成的。C转载 2016-11-04 12:06:59 · 291 阅读 · 0 评论 -
SM与SP
sp: 最基本的处理单元,streaming processor 最后具体的指令和任务都是在sp上处理的。GPU进行并行计算,也就是很多个sp同时做处理sm:多个sp加上其他的一些资源组成一个sm, streaming multiprocessor. 其他资源也就是存储资源,共享内存,寄储器等。warp:GPU执行程序时的调度单位,目前cuda的warp的大小为32,同在一个war转载 2016-11-08 09:41:48 · 22334 阅读 · 0 评论 -
TLB
TLB:Translation Lookaside Buffer.根据功能可以译为快表,直译可以翻译为旁路转换缓冲,也可以把它理解成页表缓冲。里面存放的是一些页表文件(虚拟地址到物理地址的转换表)。当处理 器要在主内存寻址时,不是直接在内存的物理地址里查找的,而是通过一组虚拟地址转换到主内存的物理地址,TLB就是负责将虚拟内存地址翻译成实际的物理内 存地址,而CPU寻址时会优先在TLB中进转载 2017-11-13 10:15:26 · 585 阅读 · 0 评论