cuda shader
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了cuda shader相关的知识,希望对你有一定的参考价值。
Nvidia CUDA(计算统一设备体系结构)是一种专用的编程模型和并行计算平台。每个Nvidia GPU都包含CUDA内核。CUDA使得人们可以用GPU中的许多计算核心来执行通用数学计算。
大多数情况下,统一着色体系结构硬件由一系列计算单元和某种形式的动态调度 / 负载平衡系统组成,以确保所有计算单元保持尽可能频繁地工作。
NVIDIA GPU中相当于“ CPU内核”(OpenCL中定义为计算单元)的是SM流多处理器。每个流多处理器有一个包含8个流处理器的向量单元。SP是NVIDIA所称的“ CUDA核心”,尽管由于这些SM是SIMD架构而颇具误导性。
cuda shader
比如GTX 260有24个SM,每个SM有8个SP芯片上,总共有192个SP,NVIDIA将其称为192个cuda内核。从OpenCL的角度来看,从SM的数量来看,有24个计算单元。
“ cuda core”是向量单元内部的一个ALU。
NVIDIA将单个SP称为单个处理核心。 它具有两个ALU和一个FPU的完全流水线结构,是面向单一问题的有序微处理器。SP没有任何缓存,将大部分时间都花在处理像素或顶点数据上,因此除了处理大量的数学运算外,它在其他任何方面都不是特别出色。
cuda shader
CUDA内核是类似于计算机中处理器的并行处理器,可以是双核或四核处理器。但是,Nvidia GPU可能具有数千个内核。这些内核负责各种任务,这些任务允许内核的数量直接与GPU的速度和功能相关。
由于CUDA内核负责处理通过GPU传输的所有数据,因此,在加载人物和风景时,这些内核可以处理图形之类的事情。
计算单元是GPU核心,而不是着色器或cuda核心。可用openCL查询。所谓的着色器或CUDA内核只是GPU内核的一部分,它不能独立运行,而是依靠GPU内核进行操作。例如,给一个数组乘以另一个数组,GPU核心将接收它并划分元素以提供给每个着色器(cuda核心)以执行工作。因此,着色器(CUDA核心)只是处理器的一个组成部分。
GPU由一堆处理器内核组成,这些处理器内核在计算机术语中称为计算单元。每个核心/计算单元都有一堆着色器,TMU和ROP。
在GPU中,包含了着色器的一个核心被称为cuda核心,Cuda核心是着色器,流处理器是着色器。
自从GPU使用统一的体系结构以来,GPU内核包含更多通用单元。 这些单元通常称为着色器。 每个着色器基本上就像较大的处理器中的某种微型处理器部分(例如x86 CPU中的SSE单元)一样,可以执行某些任务,而不是全部。
GPU具有内核,内核本身具有许多着色器。每个GPU内核都包含一个解码器,用于解码内核本身的指令。 然后根据工作本身将工作负载发送到核心中的各个不同单元。 每个GPU内核均包含着色器(nvidia称其为cuda内核,AMD称其为流处理器),TMU,ROP,并且在某些GPU中还具有其他单元。 每个单元对图形都有贡献,因此在特定图形设置下具有更多特定单元的GPU更快。
着色器如何映射到实际的GPU硬件?
着色器程序与GPU内核之间是否存在一对一的关系?那么,顶点着色器程序是否在一个内核上运行,而片段着色器在另一个内核上运行?然后,数据是否从顶点着色器核心传递到片段着色器核心?还是GPU上的每个内核都负责所有着色器和整个图形管线?
确切的关系取决于卡和驱动程序。着色器程序从通用形式(例如OpenGL或DirectX)转换为卡可以直接运行的形式,类似于对使用字节码的Java等语言的即时编译。
因此,这种关系取决于程序和卡的性质。如果程序又大又复杂,则卡可能需要分配多个内核,但是单个内核很可能在多个流处理器上运行着色器的许多实例。
现代卡是动态分配工作的,因此很少有1:1关系。每个内核具有多个流处理器,因此如果它们不太复杂,则可以同时处理多个着色器。
以上是关于cuda shader的主要内容,如果未能解决你的问题,请参考以下文章