[CUDA]随笔一

news/2025/3/21 15:06:27/

简介

一、 CUDA是什么

CUDA是一种编程语言,全称"Compute Unified Device Architecture",简称"CUDA",中文翻译为计算统一设备架构编程语言.
其出现是为了从串行编程转向并行编程,我们通常使用的线程操作都是利用CPU去进行并行操作,而CUDA是面向GPU进行编程,GPU相比于CPU能够实现更大批量的并行处理,图形化处理单元(Graphice Processor Unit, GPU)就是为高速图形处理而设计的,具有天然的并行性.CUDA采用一种简单的数据并行模型,再结合编程模型,从而操纵复杂的图形基元,无论是之前的CPU的多线程编程还是将要学习GPU编程,其目的都是为了提供对大量数据的并行处理,通过并行处理不断减少对大量数据的处理时间,已达到更好的用户体验。
CUDA不需要程序员对于图形和图形基元有更深的了解,使GPU看起来与其他编程设备一样.
计算机的发展趋势是异构计算-人们视图通过将中央处理器(CPU)和图形处理器(GPU)技术混合在一起来实现高性能计算.
下面为了解CPU的一些硬件知识。

二、寄存器和cache的定义

寄存器是位于CPU内部的一组用于临时存储数据的存储器件,用来加快CPU对数据的处理速度。Cache是位于CPU和主存储器之间的一个高速缓存,用于加速对主存中数据的访问。

三、寄存器和cache的容量

寄存器通常有几十个到上百个,而cache的容量则通常在数十KB到数MB不等。

四、寄存器和cache的速度

寄存器是CPU内部的存储器件,速度非常快,可以在一个时钟周期内完成读写操作;而cache的速度比主存快很多,但比起寄存器还是慢了很多。

五、寄存器和cache的作用

寄存器的主要作用是为CPU提供更快速度的数据暂存区域,可以减少CPU与主存的数据传输,提升CPU的效率。而cache的主要作用是缓存主存中的数据,避免重复从主存中读取数据,从而加快CPU对数据的处理速度。

l六、关于cache

在一些复杂的处理器中cache分为多层:当有多级缓存时CPU读取数据的顺序为:
如果数据不在以及缓存中则处理器向二级或三级缓存中发出读取请求,如果所有缓存中都没有数据,则需要从主存(通常说的内存)中读取.一级缓存的工作速度通常能达到或接近CPU的处理速度,如果工作都在缓存中执行,就很有可能接近CPU的全速运行,但是各级缓存的大小和速度都是不一样的,一级缓存大小通常只有16k或者32k大小,二级缓存就更慢些,空间大概256k,三级缓存既要大得多,通常有几兆字节大小,但比二级缓存要慢得多.
实际的程序中循环程序经常会比较大,缓存往往放不下,所以尽管设置了缓存,处理器仍然会因为收到内存吞吐率或带宽的限制无法发回其具有的处理能力.

七、连接机技术

个人理解是将很多个cpu连接在一起处理一个任务,还有一些其他的技术,连接机采用的是单指令多数据型并行处理.这个技术先定义好一个数据范围,然后让处理器在这个数据范围内进行某种操作,连接机技术会使用成千上万个处理器,各个处理器之间的同步和通信将是很大的问题.

八、Cell处理器

它的思想是用一个常规处理器作为监管处理器(PPC),该处理器与大量的高速流处理器(SPE)相连.常规处理器担任与流处理器和外部世界的接口,流处理器在常规处理器管理下处理数据集.Cell处理器的编程,需要写一个子啊PPC上运行的程序,对程序要求比较高,必须从程序和数据两个方面明确管理多个SPE,以及在PPC上运行的串行程序,由于具有和相应处理器直接对话的能力,所以很多问题可以拆分成一系列简单的步骤来实现PPC可以取一段待处理的数据将它分成多份分配给多个SPE处理,每个SPE所做的处理都想同,然后所有SPE完成工作后,PPC再从每个SPE核取回处理后的数据,然后将所有数据在内存中组合起来.Cell被设计为以组的方式工作,与连接机的设计相同.
当分组中的所有按照串行形式连接,将整个任务拆分成多个小任务分配给多个SPE处理,因为SPE只负责指定的小部分任务所有会很快处理完,类似流水线作业,会受到带宽有,数据传递到下一阶段的开销问题,并最终受到最慢的那个处理,最终受到最慢的处理步骤的限制.

九、应用程序中的并行类型

分为任务并行和数据并行:
任务并行:当许多任务或函数可以独立的大规模的并行执行时这就是任务并行,重点在于利用多核系统对任务进行分配.
数据并行:可以同时处理许多数据.数据并行的重点在于利用多核系统进行数据分配.
CUDA适合解决数据并行计算问题.
数据并行程序设计第一步是对数据进行划分:
块划分:一组连续的数据被分到一个块内,每个数据块以任意次序被安排给一个线程,线程在同一时间只处理一个数据块.
周期划分:更少的数据被分到一个数据块内,相邻的线程处理相邻的数据块,每个线程可以处理多个数据块,为一个待处理的线程选择一个新的块,就意味着要跳过和现有线程一样多的数据块

十、根据指令和数据进入CPU的方式和对计算机架构进行分类

单指令单数据(SISD):传统计算机,串行架构,单核心,任何时间点一个指令流处理一个数据流
单指令多数据(SIMD)一种并行架构类型,多个核心,任何时间点所有核心只有一个指令流处理不同的数据流
多指令单数据(MISD):每个核心通过多个指令流处理同一个数据流.
多指令多数据(MIMD)并行架构,多个核心使用多个指令刘来异步处理多个数据流

十一、计算机架构根据内存组织方式进行划分

分布式内存的多节点系统:大型计算引擎是由许多网络连接的处理器构成,处理期间通过网络通信,有自己的本地内存,通常叫做集群.
共享内存的多处理器系统:大小在双处理器到几十或几百个处理器之间,这些处理器要么与同一个物理内存相关联,要么共用一个低延迟的链路

十二、GPU核心和CPU核心

CPU核心比较重,用来处理比较复杂的控制逻辑,以优化串行程序执行.
GPU核心较轻,用于优化具有简单控制逻辑的数据并行任务,注重并行程序的吞吐量.
异构架构一个典型的异构计算节点包括两个多核CPU插槽和两个或多个众核GPU.GPU不是一个独立运行的平台二十CPU的协处理器,因此,GPU必须通过PCle总线和CPU的主机相连来进行操作.CPU的位置叫主机端GPU的位置叫设备端

十三、异构应用

包括主机代码和设备代码
主机代码在CPU上运行,设备代码在GPU上运行.

十四、GPU容量的两个重要特征

CUDA核心数量,内存大小

十五、两种不同指标评估GPU的性能

峰值计算性能,内存带宽

十六、两个方面区分CPU和GPU应用的范围

并行级,数据规模
如果一个问题有较小的数据规模,复杂的控制逻辑或很少的并行性,最好选择CPU处理,因为它有处理复杂逻辑和指令级并行性的能力,如果该问题包含较大规模的待处理数据并表现出大量的数据并行性,那么使用GPU是最好的选择.
为了获得最佳性能,可以同事使用CPU和GPU执行应用程序,在CPU上执行串行部分或任务并行部分,在GPU上执行数据密集并行部分

十七、CUDA一种异构计算平台

CUDA是一种通用的并行计算平台和编程模型,利用NVIDIAGPU中的并行计算引擎能更有效解决复杂的计算问题,通过使用CUDA可以像在CPU上那样通过GPU来进行计算.

十八、CUDA提供了两层API来管理GPU设备和组织线程

CUDA驱动API:一种低级API,相对来说较难编程,但对于GPU设备使用提供了更多的控制
CUDA运行时API一种高级API在驱动API的上层实现,每个运行时AI函数都被分解为更多传给驱动API的基本运算
运行时API和驱动API之间没有明显的性能差异,在设备端,内核是如何使用内存以及你是如何组织线程的,对性能有更显著的影响
这两种API是相互排斥的必须使用两者之一,从两者中混合函数调用是不可能的

十九、CUDA编程结构

一个典型的CUDA编程结构包括5个主要步骤:
1.分配GPU内存
2.从CPU内存中拷贝数据到GPU内存
3.调用CUDA内核函数来完成程序指定的运算
4.将数据从GPU拷回CPU内存
5.释放GPU内存控件


http://www.ppmy.cn/news/846565.html

相关文章

【在互联网中保护自己】

近日,某高校毕业生在校期间窃取学校内网数据,收集全校学生个人隐私信息的新闻引发了人们对互联网生活中个人信息安全问题的再度关注。在大数据时代,算法分发带来了隐私侵犯,在享受消费生活等便捷权利的同时,似乎又有不…

汉仪字体mac版 v2014.7

汉仪字体是目前国内最优秀的中文字体之一,现在针对苹果mac系统推出了 汉仪字体mac版 ,该字体库内含汉仪菱心体简、汉仪秀英体简、汉仪大黑简、汉仪中黑简、汉仪综艺体简等多款常用的中文字体,能够适用于mac电脑中绝大部分的软件&#xff0c…

好租写字楼字体加密

好租写字楼字体加密反爬破解 前面说到一篇字体加密文章,https://blog.csdn.net/weixin_38927522/article/details/119385859 你说巧不巧,工作中又遇到一个字体加密的反爬。 基本思路:常见的字体加密解决方案就是通过 下载字体进行关系映射…

Spring源码系列-第2章-后置工厂处理器和Bean生命周期

第2章-后置工厂处理器和Bean生命周期 后置工厂处理器属于后置处理器,后置处理器是Spring最核心的部分,Spring几乎所有的附加功能全由它完成。 什么是BeanPostProcessor? public interface BeanPostProcessor {/*** Apply this {code BeanPos…

python装饰器在接口自动化测试中的应用

目录 装饰器 函数的一些特性 简单的装饰器 语法糖 带参数的装饰器 装饰器也是可以接收参数的 类装饰器 装饰器在接口自动化测试项目中应用 在讲解装饰器在接口自动化测试项目的应用之前,我们先来介绍一下python装饰器到底是个什么 装饰器 说装饰器就不得不…

Qt应用程序中的 QApplication

Qt应用程序中的 QApplication QApplication类是一个Qt框架中核心的应用程序类,它提供了管理应用程序的框架、事件循环和系统级配置的基础。在本文中,我们将详细介绍QApplication类的功能和应用场景。 创建 QApplication 对象 通常,我们在主…

cimoc 最新版_cimoc1.6.1版本下载-cimoc1.6.1最新版_5577安卓网

cimoc1.6.1版本下载,这是一款资源超级丰富的漫画软件,平台上的漫画全部支持免费观看,且更新速度极快,使用这款软件,用户永远不会出现漫荒的尴尬情况,喜欢的用户快来下载试试吧! 【软件详情】 Ci…

linux进程管理2

1.后台运行作业 [rootlly ~]# sleep 100& [2] 5611 [rootlly ~]# sleep 1000& [3] 5612 [rootlly ~]# ps -ef|grep sleep root 5608 5577 0 13:32 pts/0 00:00:00 sleep 1000 root 5611 5577 0 13:33 pts/0 00:00:00 sleep 100 root 56…