• 三 GPU 并行编程的运算架构


    前言

      GPU 是如何实现并行的?它实现的方式较之 CPU 的多线程又有什么分别?本文将做一个较为细致的分析。

    GPU 并行计算架构

      GPU 并行编程的核心在于线程,一个线程就是程序中的一个单一指令流,一个个线程组合在一起就构成了并行计算网格,成为了并行的程序,下图展示了多核 CPU 与 GPU 的计算网格:

        

      二者的区别将在后面探讨。

      下图展示了一个更为细致的 GPU 并行计算架构:

      

      该图表示,计算网格由多个流处理器构成,每个流处理器又包含 n 多块。

      下面对 GPU 计算网格中的一些概念做细致分析。

    概念一:线程

      线程是 GPU 运算中的最小执行单元,线程能够完成一个最小的逻辑意义操作。

    概念二:线程束

      线程束是 GPU 中的基本执行单元。GPU 是一组 SIMD 处理器的集合,因此每个线程束中的线程是同时执行的。这个概念是为了隐藏对显存进行读写带来的延迟所引入的。

      目前英伟达公司的显卡此值为 32,不可改动,也不应该对其进行改动。

    概念三:线程块

      一个线程块包含多个线程束,在一个线程块内的所有线程,都可以使用共享内存来进行通信,同步。但一个线程块能拥有的最大线程/线程束,和显卡型号有关。

    概念四:流多处理器

      流多处理器就相当于 CPU 中的核,负责线程束的执行。同一时刻只能有一个线程束执行。

    概念五:流处理器

      流处理器只负责执行线程,结构相对简单。

    GPU 和 CPU 在并行计算方面的不同

      1. 任务数量

        CPU 适合比较少量的任务,而 GPU 则适合做大量的任务。

      2. 任务复杂度

        CPU 适合逻辑比较复杂的任务,而 GPU 则适合处理逻辑上相对简单的任务 (可用比较少的语句描述)。

      3. 线程支持方式

        由于 CPU 中线程的寄存器组是公用的,因此CPU 在切换线程的时候,会将线程的寄存器内容保存在 RAM 中,当线程再次启动的时候则会从 RAM 中恢复数据到寄存器。

        而 GPU 中的各个线程则各自拥有其自身的寄存器组,因此其切换速度会快上不少。

        当然,对于单个的线程处理能力来说,CPU 更强。

      4. 处理器分配原则

        CPU 一般是基于时间片轮转调度原则,每个线程固定地执行单个时间片;而 GPU 的策略则是在线程阻塞的时候迅速换入换出。

      5. 数据吞吐量

        GPU 中的每个流处理器就相当于一个 CPU 核,一个 GPU 一般具有 16 个流处理器,而且每个流处理器一次能计算 32 个数。

     总结

      1. 了解 CUDA 的线程模型是 GPU 并行编程的基础

      2. 根据待处理数据类型来组织线程结构是非常非常重要的,而这并不轻松,尤其是当出现了需要共享的数据时。

      

      

  • 相关阅读:
    java 3大特性
    注解@JsonIgnore和注解@JsonIgnoreProperties
    spring bean 的介绍
    Spring注解的实现原理和Spring常用注解介绍
    Spring中 @Component @Controller @Repository @Service 注解
    Java Collection集合中List,Set,Queue以及Map的使用
    Spring Security PasswordEncoder 密码校验和密码加密
    java中System.out.print()与System.out.println()与System.out.printf()的差别
    Arrays.fill 数组填充工具类
    Hashmap与Hashset的区别
  • 原文地址:https://www.cnblogs.com/scut-fm/p/3880553.html
Copyright © 2020-2023  润新知