IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> CUDA复制测试 -> 正文阅读

[Python知识库]CUDA复制测试

??这里主要是测试了内存数据读写操作的几种方式,记录了一些测试结果,对于二维数组(10244)(1024*4)。

  • (1)二维线程格,每个线程对应一个元素。
  • (2)转换为int2类型,线程宽度减半。
  • (3)线程宽度和高度减半,单个线程操作邻近的4个元素。
  • (4)线程宽度和高度减四分之一,单个线程操作邻近的16个元素。
  • (5)线程宽度和高度减半,单个线程操作完一个元素后,跨区域循环。
  • (6)为单个线程处理16个元素,采用表面引用。
  • (7)为单个线程处理64*64个元素,采用表面引用。
  • (8)跨区域循环,单线程处理16个元素,采用设备内存。
  • (9)跨区域循环,单线程处理16个元素,采用表面引用。
  • (10)跨区域循环,单线程处理64*64元素,采用表面引用。
  • (11)跨区域循环,单线程处理64*64元素,采用设备内存。
  • (12)跨区域循环,单线程处理2*2元素,采用表面引用。
  • (13)单线程处理单个元素,采用表面引用。
序号
(1)123.38129.02129.22295.72304.6261.97
(2)48.1154.8267.93306.24305.16305.50
(3)24.3122.4029.42393.10394.25386.28
(4)6.325.856.02485.72469.24467.52
(5)24.7122.2022.27385.06356.74365.97
(6)6.305.825.81845.41815.74811.05
(7)0.5960.5920.6013046.63056.92988.5
(8)5.865.905.80356.65355.79357.08
(9)5.845.886.06207.64207.91217.58
(10)0.5920.6520.543240.72240.63240.23
(11)0.5800.5900.591433.59430.95431.52
(12)22.5721.6522.33205.68206.82207.69
(13)91.3689.3789.07208.97209.02208.97

??在上面测试结果中,第一个和第二个的读取速度数据中,int2类型的速度是int类型的速度的大约两倍,这是来自于内存事务的合并。为了达到读写数据时的最佳性能,CUDA内核必须执行内存事务合并处理。任何不满足合并所需的全套标准的内存事务称为“未合并的”,未合并内存事务的性能惩罚由2~8倍不等,在最近的硬件上,合并内存事务对性能的影响显著减少。
??事务在每一个线程束的基础上被合并,为了由束执行内存读写事务的合并,一些简化的标准必须要满足。

  • 字至少为32位,读写字节或16位字的事务总是非合并的。
  • 束上的线程访问的地址是连续并递增的(即,依线程ID偏移)。
  • 束的基地址(束中第一个线程访问的地址)需要对齐。
字大小对齐
8位未合并
16位未合并
32位64字节
64位128字节
128位256字节
template<class T, const int n>
__global__ void GlobalWrites(T *out, T value, size_t N){
    size_t i;
    for(i = n*blockIdx.x*blockDim.x+threadIdx.x;
        i < N-n*blockDim.x*gridDim.x;
        i += n*blockDim.x*gridDim.x){
        for(int j = 0; j < n; j++){
            size_t index = i+j*blockDim.x;
            out[index] = value;
        }
    }
    // to avoid the (index<N) conditional in the inner loop,
    // we left off some work at the end
    for(int j = 0; j < n; j++){
        size_t index = i+j*blockDim.x;
        if(index < N) out[index] = value;
    }
}
  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-08-08 11:17:17  更:2021-08-08 11:18:52 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/17 10:03:02-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码