zoukankan      html  css  js  c++  java
  • GPGPU-Sim研究(一)-深入掌握GPGPU的工作原理

      有兴趣阅读本博客的人,相信你已经对CUDA、GPU并行编程有了基本的了解,如果您不了解的话,请移步百度。同时,本博客系列内的一些对词语的翻译大部分来源于网上,可能会表达的不准确,所以强烈建议阅读原版文档!

      作为本研究的第一个阶段,也是相当苦逼的一个阶段,就是你需要明白各种概念,而且是比较深入的明白。

      这个阶段的主要工作便是阅读NVIDIA自己出的一个文档-《CUDA_C_Best_Practices_Guide》,这份资料的内容与题目相同,是对CUDA C优化编程的一个比较系统的介绍,内容比《CUDA C Programming Guide》更高一层,如果你没有阅读过《CUDA C Programming Guide》的话,建议先读一下,再阅读《CUDA_C_Best_Practices_Guide》。

      阅读英文文档对我这样的英语渣渣真是异常的煎熬,当时花了我大约三个周的时间才看完。我放在百度云里的文档里有一些当时跟我一块做的一个学弟的一些笔记。下面是我看完问完学长后所做的一些比较粗糙的笔记,希望对大家有帮助。

      

    Chapter 3 Getting Started
    三种方式
    第一种并行库
    第二种并行化编译器
    第三种用代码实现并行
    
    Chapter 4 Getting the Right Answer
    本章探讨的问题可能会影响返回的数据点,以适当的解决方案
    对于浮点精度问题,单精度和双精度,浮点运算不满足结合律
    在正常coding中,
    float a1 = 0.2;  // 会有warning
    float a1 = 0.2f;
    
    Chapter 5 Performance Metrics (性能指标)
    利用Timing对程序进行计时以判断性能
    对程序进行计时时,如果用cpu端的函数测试时间,则需要同步,用GPU端的函数则不需要同步
    在device端涉及到异步copy和执行的问题
    影响程序运行时间的最大因素是 Bandwidth ,可以理解为host端与 device 端之间拷贝数据的 speed
    每一块机器上都有理论带宽计算,但是兽兽种种因素影响,有效带宽需要我们自己测试出来并且往往比理论带宽低
    
    Chapter 6 Memory Optimizations(内存优化)
    基础概念:
    一个显卡中会有多个SM(Streaming Multiprocessor),每个SM中有多个SP(Streaming Processor),一个SM会负责多个ThreadBlock(线程块)的计算任务,一般为 8 个,每一个 SP 一个时刻负责一个Thread
    Stream:流(Stream)是一系列顺序执行的命令,流之间相对无序或并发的执行他们的命令。
    Warp:warp是SM调度和执行的基础概念
    这可以说是在GPU与CPU的区别最大的名词。
    CPU为单指令单执行的典型,但是GPU为多指令多执行的典型
    在SM中,有一种单位叫做warp,一个SM有多个warp,每个warp中一般有32个线程,每一个线程都有自己的寄存器内存和local memory,一个warp中的线程是同时执行的,也就是当进行并行计算时,线程数尽量为32的倍数,如果线程数不上32的倍数的话;加入是1,则warp会生成一个掩码,当一个指令控制器对一个warp单位的线程发送指令时,32个线程中只有一个线程在真正执行,其他31个 进程会进入静默状态。
    换句话说,可以用一个非常多的核的CPU来模拟GPU的并行计算
    
    Pinned Memory or Page-locked Memory
    在计算机中,虚拟内存的概念在内存短缺时,CPU将一些内存存到本地的硬盘内,当需要这块“内存空间”时,再将其替换到内存中,借此“扩大”内存,而Pinned Memory特制那些不会被替换的内存单元。
    
    Zero Copy (零拷贝)
    直接表现:device 端直接访问 host端内存,即device端的指针直接映射到host端,但是这样做必然会降低运算速率,但在特定条件下copy速率比较好
    特定一:集成显卡
    特定二:GPU端在计算中只读取一次数据并且整个device端计算在整个程序计算中占小部分
    
    虚拟统一寻址:能够为 主系统内存和显卡内存提供一个合并的存储器地址空间,让并行编程变得更快,更easy,但是也需要device端和host端之间的内存copy

      

      上述笔记可能会有一些地方理解的不对,还望各位大大指点!

    这两篇博客的内容跟《CUDA_C_Best_Practices_Guide》的内容有一些是相关的,是阅读英文文档的时候偷懒搜的中文博客。

    推荐CUDA程序优化的15个策略-IT168 技术开发专区

    基于CUDA的GPU优化建议_heco_新浪博客

    本文引用地址:http://www.cnblogs.com/LitLeo/p/3516374.html

  • 相关阅读:
    性能测试应用领域
    性能测试---不同视角看性能和相关术语
    Jmeter(二十五)Jmeter之系统函数
    Jmeter(二十四)Jmeter-Question之“加密请求参数”
    Web应用层协议---HTTP
    协议栈CheckList
    数据报表类(BI)项目测试应该如何去啃?
    #单元测试#以karma+mocha+chai 为测试框架的Vue webpack项目(二)
    解决未安装unit测试和jest的Vue项目运行karma start时的错误
    npm run dev运行Vue项目报错:Node Sass does not yet support your current environment
  • 原文地址:https://www.cnblogs.com/LitLeo/p/3516374.html
Copyright © 2011-2022 走看看