存储器模型有:
•Register
•Local
•shared
•Global
•Constant
•Texture
•Host memory
寄存器与Local memory
•对每个线程来说,寄存器都是线程私有的--这与CPU中一样。如果寄存器被消耗完,数据将被存储在本地存储器(localmemory)。
•Localmemory对每个线程也是私有的,但是localmemory中的数据是被保存在显存中,而不是片内的寄存器或者缓存中,因此速度很慢。
•线程的输入和中间输出变量将被保存在寄存器或者本地存储器中。
Shared memory
•用于线程间通信的共享存储器。共享存储器是可以被同一block中的所有thread访问的可读写存储器。
•访问共享存储器几乎和访问寄存器一样快速,是实现线程间通信的延迟最小的方法。
•共享存储器可以实现许多不同的功能,如用于保存共用的计数器(例如计算循环次数)或者block的公用结果。
共享存储器(Shared Memory)
•设置于SM内部
•由一个线程块内部全部线程共享
–完全由软件控制
–访问一个地址只需要1个时钟周期
constant memory和texture memory
•基于GPU图形计算的专用单元发展而来的高速只读缓存
•速度与命中率有关,不命中时将进行对显存的访问
•常量存储器空间较小(只有64k),支持随机访问。从host端只写,从device端只读
•纹理存储器尺寸则大得多,并且支持二维寻址(一个数据的“上下左右”的数据都能被读入缓存),适合实现图像处理算法。
全局存储器
•使用的是普通的显存,无缓存,可读写,速度慢
•整个网格中的任意线程都能读写全局存储器的任意位置,并且既可以从CPU访问,也可以从GPU访问。
各种存储器的延迟
•register: 1 周期
•shared memory: 1 周期(无bank conflict)——16 周期(发生16路bank conflict)
•texture memory: 1 周期(命中)——数百周期(不命中)
•constant memory: 1周期(命中)——数百周期(不命中)
•Global/ local memory: 数百周期
各存储器大小
•每个SM中有64K或者32K的寄存器,寄存器的最小单位是32bit的register file
•每个SM中有16K~64K shared memory
•一共可以声明64K的constant memory,但每个SM的cache序列只有8K
•可以声明很大的texture memory,但是实际上的texture cache序列为每SM 6-8K
使用存储器时可能出现的问题:
•致命问题:无法产生正确结果
•多个block访问global同一块,以及block内thread间线程通信时的数据一致性问题
•Texture的工作模式设置错误
•效率问题:大大增加访存延迟
•Shared bank conflict问题
•Global 合并访问问题
多线程有什么好处?提高CPU的利用率,更好地利用系统资源,使用Monitor类可以同步静态/实例化的方法的全部代码或者部分代码段,使用不同的同步类创建自己的同步机制。多线程指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程提升整体处理性能。多线程是指程序中包含多个执行流,即...
Step1:在界面主函数的构造函数中初始化多线程 auto mythread = new QThread(); //新建connect(mythread , &QThread::finished, mythread, &QObject::deleteLater);//线程运行结束后释放内存object1->moveToThread...
一、thread的基本用法
参见C++使用thread类多线程编程 。
二、类外使用多线程,访问类的成员
这几种方式,新建线程都是在类外,然后通过把友元函数或者成员函数作为thread参数。
#include
本博文是根据中科大信息学院谭立湘老师的课件加上自己的理解整理出来的 ************************************************************************************ NVIDIA在2007年推出CUDA这个统一计算架构 CUDA的基本思想是支持大量的线程级并...
一、parallel communication patterns 并行通信模式 Map:映射,在特定的位置读取和写入。 Gather:收集,从多个不同的位置读入,写入一个位置。 Scatter:分发,写入多个位置。 Transpose转置 结构数组缩写为AOS,数组结构缩写为SOA 转置运算是指任务重新排序内存中的数...