关于共享存储器使用的问题

celloasleep 2011-06-10 10:18:57
我在XP上用VS开发CUDA程序,使用了cuda_vs_wizard.
定义了两个位于共享存储器中的数组变量,一个用来存放系数,另一个用来归约。
第一个数组中的数据经过一些计算后将结果存入第二个数组,并进行归约算法求和。
但后来发现,第一个数组的大小会影响后面归约算法的执行时间。
当共享数组总大小小于4096 float时(即不到16KB时),程序执行时间最少;当第一个数组大小等于或超过4096 float时(即超过16KB时),程序执行时间就开始增加。

难道kernel的执行时间与共享存储器的大小有关吗???求解。。。

==============================================================================

Fermi白皮书上说Fermi中每个BLOCK共有64KB的共享内存,而可以将它们配置成48 KB的共享内存+16KB的一级缓存 或者是 16 KB 的共享内存+ 48KB 的一级缓存。
请问,具体怎么配置呢?共享内存和L1 cache有什么区别吗?

我使用的视频卡是GTX465, 通过DeviceQuery得到的结果是:
Total amount of shared memory per block : 49152 bytes
这意味着465中共享存储器默认的配置是 48KB的共享内存+16KB的一级缓存吗?
那这16KB的一级缓存如何使用呢?
...全文
193 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
linscs 2011-08-15
  • 打赏
  • 举报
回复
一般是共享存储器使用越多,程序执行时间越长。因为一个SM中活动块使用的共享存储器不能超过SM自身的限制(一般是16KB),block中使用的共享存储器越多,一个SM中能共存的的活动block就越少,这样就不能很好的隐藏延迟
celloasleep 2011-06-10
  • 打赏
  • 举报
回复
楼上冒似没有理解我的意思,既然有48K 的共享内存,那为什么我只用其中的16K时,归约算法的执行时间最短呢,而当使用的共享存储器大小超过16K时,归约执行时间就成倍上升了。
这使我想到,这16K和超过16K的部分是否属于同一类型的共享内存?
linxxx3 2011-06-10
  • 打赏
  • 举报
回复
默认的配置就是16K L1 cache + 48K shared mem,想要另外一种配置可以查看programming guide,好像中文版都有了。
16K的L1 cache是给程序使用的数据缓存,程序员是看不到的。
lz需要处理更大规模的数据应该考虑分批加载到shared mem中
《计算机操作系统》可作为计算机硬件和软件以及计算机通信专业的本科生教材,也可作为从事计算机及通信工作的相关科技人员的参考书。 目录 第一章 操作系统引论 1.1 操作系统的目标和作用 1 1.1.1 操作系统的目标 1 1.1.2 操作系统的作用 2 1.1.3 推动操作系统发展的主要动力 4 1.2 操作系统的发展过程 5 1.2.1 无操作系统的计算机系统 5 1.2.2 单道批处理系统 6 1.2.3 多道批处理系统 7 1.2.4 分时系统 9 1.2.5 实时系统 11 1.2.6 微机操作系统的发展 12 1.3 操作系统的基本特性 14 1.3.1 并发性 14 1.3.2 共享性 15 1.3.3 虚拟技术 16 1.3.4 异步性 17 1.4 操作系统的主要功能 18 1.4.1 处理机管理功能 18 1.4.2 存储器管理功能 19 1.4.3 设备管理功能 21 1.4.4 文件管理功能 21 1.4.5 操作系统与用户之间的接口 22 1.5 OS结构设计 24 1.5.1 传统的操作系统结构 24 1.5.2 客户/服务器模式 26 1.5.3 面向对象的程序设计 27 1.5.4 微内核OS结构 29 习题 33 第二章 进 程 管 理 2.1 进程的基本概念 34 2.1.1 程序的顺序执行及其特征 34 2.1.2 前趋图 35 2.1.3 程序的并发执行及其特征 36 2.1.4 进程的特征与状态 37 2.1.5 进程控制块 41 2.2 进程控制 43 2.2.1 进程的创建 43 2.2.2 进程的终止 45 2.2.3 进程的阻塞与唤醒 46 2.2.4 进程的挂起与激活 47 2.3 进程同步 47 2.3.1 进程同步的基本概念 47 2.3.2 信号量机制 50 2.3.3 信号量的应用 53 2.3.4 管程机制 55 2.4 经典进程的同步问题 58 2.4.1 生产者—消费者问题 58 2.4.2 哲学家进餐问题 61 2.4.3 读者—写者问题 63 2.5 进程通信 65 2.5.1 进程通信的类型 65 2.5.2 消息传递通信的实现方法 66 2.5.3 消息传递系统实现中的若干问题 68 2.5.4 消息缓冲队列通信机制 69 2.6 线程 71 2.6.1 线程的基本概念 72 2.6.2 线程间的同步和通信 75 2.6.3 线程的实现方式 77 2.6.4 线程的实现 78 习题 81 第三章 处理机调度与死锁 3.1 处理机调度的层次 84 3.1.1 高级调度 84 3.1.2 低级调度 86 3.1.3 中级调度 87 3.2 调度队列模型和调度准则 88 3.2.1 调度队列模型 88 3.2.2 选择调度方式和调度算法的若干准则 90 3.3 调度算法 91 3.3.1 先来先服务和短作业(进程)优先调度算法 91 3.3.2 高优先权优先调度算法 93 3.3.3 基于时间片的轮转调度算法 95 3.4 实时调度 97 3.4.1 实现实时调度的基本条件 97 3.4.2 实时调度算法的分类 99 3.4.3 常用的几种实时调度算法 100 3.5 产生死锁的原因和必要条件 103 3.5.1 产生死锁的原因 103 3.5.2 产生死锁的必要条件 105 3.5.3 处理死锁的基本方法 105 3.6 预防死锁的方法 106 3.6.1 预防死锁 106 3.6.2 系统安全状态 107 3.6.3 利用银行家算法避免死锁 108 3.7 死锁的检测与解除 111 3.7.1 死锁的检测 111 3.7.2 死锁的解除 113 习题 114 第四章 存 储 器 管 理 4.1 存储器的层次结构 116 4.1.1 多级存储器结构 116 4.1.2 主存储器与寄存器 117 4.1.3 高速缓存和磁盘缓存 117 4.2 程序的装入和链接 118 4.2.1 程序的装入 118 4.2.2 程序的链接 120 4.3 连续分配方式 121 4.3.1 单一连续分配 121 4.3.2 固定分区分配 122 4.3.3 动态分区分配 123 4.3.4 伙伴系统 126 4.3.5 哈希算法 126 4.3.6 可重定位分区分配 127 4.3.7 对换 129 4.4 基本分页存储管理方式 130 4.4.1 页面与页表 130 4.4.2 地址变换机构 131 4.4.3 两级和多级页表 133 4.5 基本分段存储管理方

231

社区成员

发帖
与我相关
我的任务
社区描述
CUDA on Windows XP
社区管理员
  • CUDA on Windows XP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧