CUDA编程——Memory Coalescing

CUDA编程——Memory Coalescing


1 GPU总线寻址介绍

假定X是一个指向整数(32位整数)数组的指针,数组的首地址为0x00001232。一个线程要访问元素X[0],

int tmp = X[0];

假定memory总线宽度为256位,因为基于字节地址的总线要访问memeory,必须和总线宽度对齐,也就是说按必须32字节对齐来访问memory,比如访问0x00000000,0x00000020,0x00000040,…等,所以我们要得到地址0x00001232中的数据,比如访问地址0x00001220,这时,它会同时得到0x00001220到 0x0000123F 的所有数据。只是对我们来说,只有一个32位整数有用,所以有用的数据是4个字节,其它28的字节的数据都被浪费了,白白消耗了带宽。


2 合并内存访问

为了利用总线带宽,GPU通常把多个线程的访存合并到较少的内存请求中去。假定多个线程访问32个字节以内的地址,它们的访问可以通过一个memory request完成,这样可以大大提高带宽利用率,在专业术语描述中这样的合并访问称作coalescing。

例如上面16个线程访问地址0x00001232 到 0x00001272,我们只需要3次memory requst。


3 Bank Conflicts

对Nvidia GPUs来说,local memory是由banks组成的,每个bank是32bit,可视化图如下。bank是实际存储单元。每个bank在一次访存中,可以被取址一次。并行访问相同的bank,将导致访存串行(bank conflicts)。

Bank    |      1      |      2      |      3      |...
Address |  0  1  2  3 |  4  5  6  7 |  8  9 10 11 |...
Address | 64 65 66 67 | 68 69 70 71 | 72 73 74 75 |...

CUDA编程中,一个half-warp(16个threads)访问连续的32bit地址,不会有bank conflicts。一个例外情况是broadcast,如果所有thread访问同一个地址,内存只会被读一次,并broadcast到所有threads。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: C# 中的 null coalescing 操作符(??)用于检查一个值是否为 null,如果是,则返回默认值;否则返回该值本身。它的语法为: ``` value = expression1 ?? expression2; ``` 其中,如果 expression1 不为 null,则 value 等于 expression1;否则 value 等于 expression2。 例如,假设有如下代码: ``` string str1 = null; string str2 = "hello"; string str3 = str1 ?? str2; ``` 则 str3 的值为 "hello",因为 str1 为 null,而 str2 不为 null。如果 str1 不为 null,则 str3 的值就是 str1 的值。 ### 回答2: c是英文字母表中的第三个字母,也是拉丁字母表中的一个字母。在英语中,它通常发音为/k/音。在中文中,c通常用作外来词中的一个拼音字母,表示/k/的发音。例如,中国人将"Coca-Cola"音译为"可口可乐"。 此外,C也是数学中常见的符号之一。它可以代表圆的周长、复数中的虚数单位以及某些曲线的常数。在计算机科学中,C是一种编程语言的名称,它是一种通用的高级编程语言,广泛应用于软件开发领域。 "c"还可以表示一些其他的词,如"Celsius"(摄氏度)、"century"(世纪)和"car"(汽车)等。在音乐中,C代表一个音,具体的音高取决于所用的调音系统。 总而言之,c是一个常见的字母,它在不同的领域中有着不同的用途和含义。无论是作为字母表中的一个字母还是作为一种编程语言的名称,c都在人类的日常生活中起着重要的作用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值