zoukankan      html  css  js  c++  java
  • GPU 编程相关 简要摘录

    GPU 编程可以称为异构编程,最近由于机器学习的火热,很多模型越来越依赖于GPU来进行加速运算,所以异构计算的位置越来越重要;异构编程,主要是指CPU+GPU或者CPU+其他设备(FPGA等)协同计算。当前的计算模型中,CPU主要用来进行通用计算,其更多的是注重控制,我们可以通过GPU和FPGA等做专用的计算。

    CPU负责逻辑性强的事物处理和串行计算,GPU则专注于执行高度线程化的并行处理任务(大规模计算任务)

    编程框架:

    • C++ AMP:Accelerator Massive Parallelism :C++的异构并行模型.
    • CUDA:Compute Unified Device Architecture :显卡厂商Nvidia于2007年推出的业界第一款异构并行编程框架。
    • OpenCL (Open Computing Language):业界第一个跨平台的异构编程框架。它是Apple领衔并联合Nvidia,AMD,IBM,Intel等众多厂商于2008年共同推出的一个开放标准,由单独成立的非营利性组织Khronos Group管理。与C++ AMP类似,OpenCL作为一个开放的标准,并不局限于某个特定的GPU厂商。

    三种异构编程框架,对比来看:CUDA和OPENCL 比 C++ AMP 更接近于硬件底层,所以前两者性能较好,C++ AMP 相对前两者 具有较高的易编程性;

    三种框架的选择:

    • 看重易用性:C++ AMP, Windows 平台,C++ 本身也是一个开放的标准,目前只有微软自己做了实现;
    • 看重NvidiaGPU卡上的高性能:CUDA;有大厂的直接支持,CUDA的开发环境也非常成熟,拥有很多函数库的支持;
    • 看重不同平台间的可移植性:OpenCL可能是目前最好的选择;(相对于OPENCL 你可能会听说过 OPENCV,OPENGL,OPENAL 等标准)opencl 得到了很多软硬件厂商的大力支持。

    异构计算中常见的组合:

    通用处理器对协处理器之间,主要考虑一些几个方面:协处理器能全面支持需要用到的场景关键算法(算法性能);协处理器需要有大量并行通道,每个通道支持低延时的数据处理(数据并行和低延时处理能力);和主处理器能方便得进行数据交互(接口性能较好);协处理器可以针对计算需求升级迭代(配置灵活);协处理器更低的运行成本,更小的空间占用和更简单的热处理方案(低功耗);

    • CPU+GPU
      • GPU 中,大量的硬件资源被用于逻辑运算单元,小部分用作控制电路,GPU中一个控制单元要负责好几个计算单元,其为大规模数据并行处理提供了基础;使用GPU做异构计算需要考虑GPU Memory 和 System Memory数据相关性和尽量减少异构计算过程中的控制分支;
    • CPU+FPGA
      • FPGA 优点:
        • 稳定性:驱动层控制硬件,减少了系统抢占带来的风险;
        • 性能:利用硬件并行的优势,打破了顺序执行的模式;硬件控制层面控制IO输入和输出达到了专业需求能力;
        • 维护性高:FPGA可以现场升级,无需重新设计ASIC所需要的时间和费用投入;
        • 成本:比定制化的ASIC便宜,可自定义编程使用;
    • CPU+ASIC
      • ASIC 为Application Specific Integrated Circuit, 特殊定制集成电路。编程语言越接近底层硬件,运行速度越快。
      • 性能方面:ASIC > FPGA > GPU;
      • 缺点:由于ASIC 定制化,导致价格较为高昂,定制过程漫长,而且功能一旦定制就很难再去更改;

    CPU 与 GPU 体系结构:

     CPU 是一种低延迟的设计:

    • 强大的ALU,拥有较高的时钟频率;
    • 容量较大的cache,包括L1,L2,L3三级高速缓存,现在基本上是片上cache,cache占据相当一部分片上空间;
    • CPU有复杂的控制逻辑,如:复杂的流水线(pipeline)、分支预测(branch prediction)、乱序执行(Out-of-order execution)等;
    • 这些导致了,cpu使用较少的资源用于ALU 计算单元;

     GPU是一种面向吞吐的设计:

    • GPU 有大量的ALU;
    • cache很小,缓存为thread提高服务,而不是保存后面需要访问的数据,这点和CPU不同;
    • 没有复杂的控制逻辑,没有分支预测等这些组件;
    • 于CPU对比起来,CPU擅长处理逻辑负载,串行的计算任务;而GPU擅长的是大规模的数据并行的计算任务;

    参考链接:

    http://hustcat.github.io/gpu-architecture/

    https://www.huzhenyu.me/

    https://www.cnblogs.com/biglucky/p/4223565.html

    https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html

    http://haifux.org/lectures/267/Introduction-to-GPUs.pdf (推荐)

    资源多整理自网络,保持更新,如果对您有帮助,请关注 cnblogs.com/xuyaowen

  • 相关阅读:
    47-python基础-python3-字符串-常用字符串方法(五)-rjust()-ljust()-center()
    46-python基础-python3-字符串-常用字符串方法(四)-join()-split()
    45-python基础-python3-字符串-常用字符串方法(三)-startswith()-endswith()
    44-python基础-python3-字符串-常用字符串方法(二)-isalpha()-isalnum()-isdigit()-isspace()-istitle()
    43-python基础-python3-字符串-常用字符串方法(一)-upper()-lower()-isupper()-islower()
    42-python基础-python3-字符串-原始字符串
    40-python基础-python3-字典常用方法-setdefault()
    39-python基础-python3-字典常用方法-get()
    38-python基础-python3-检查字典中是否存在键或值
    HTTP协议详解
  • 原文地址:https://www.cnblogs.com/xuyaowen/p/heterogeneous-system-architecture.html
Copyright © 2011-2022 走看看