CPU/显卡GPU/CUDA/内存/缓存/SDK/API/DLL【转载整理】

CPU/显卡GPU/CUDA/内存/缓存【转载整理】

原博地址:CUDA-从入门到放弃

1.CPU:

  (1)CPU简介:

         电子计算机的三大核心部件为:CPU、内部存储器和输入输出设备。

         CPU是一块超大规模的集成电路,是一台计算机的运算核心(Core)和控制核心( Control Unit)。它的功能主要是解释计算机指令以及处理计算机软件中的数据。

         CPU的结构主要包括:运算器、控制单元、寄存器、高速缓存器和它们之间通讯的数据、控制及状态的总线。

         CPU遵循的是冯诺依曼架构,其核心就是:存储程序,顺序执行。一条指令在CPU中执行的过程是这样的:

             1)读取到指令后,通过指令总线送到控制器中进行译码,并发出相应的操作控制信号;

             2)然后运算器(绿色区域)按照操作指令对数据进行计算;

             3)并通过数据总线将得到的数据存入数据缓存器。

  (2)GPU的诞生:

          因为CPU的架构中需要大量的空间去放置存储单元和控制单元,相比之下计算单元只占据了很小的一部分,所以它在大规模并行计算能力上极受限制,而更擅长于逻辑控制。CPU遵循顺序执行,难以满足对更大规模与更快处理速度的需求。

          因此将多个处理器放在同一块芯片上,提高了计算效率,GPU便由此诞生了。

 

2.显卡/GPU/CUDA:

  (1)显卡简介:

           显卡全称显示接口卡,又称显示适配器,是计算机最基本配置、最重要的配件之一。就像电脑联网需要网卡,主机里的数据要显示在屏幕上就需要显卡,因此,显卡是电脑进行数模信号转换的设备,承担输出显示图形的任务,显卡接在电脑主板上将电脑的数字信号转换成模拟信号让显示器显示出来。

           原始的显卡一般都是集成在主板上,只完成最基本的信号输出工作,并不用来处理数据。显卡也分为独立显卡和集成显卡。

  (2)GPU简介:

          随着显卡的迅速发展出现了GPU的概念,GPU是显卡上的一块芯片,就像CPU是主板上的一块芯片。

          GPU的构成相对简单,有数量众多的计算单元和超长的流水线,特别适合处理大量的类型统一的数据以及计算量大但没有技术含量的重复运算。

          GPU无法单独工作,必须由CPU进行控制调用才能工作。CPU可单独作用,处理复杂的逻辑运算和不同的数据类型,但当需要大量的处理类型统一的数据时,则可调用GPU进行并行计算。

         GPU经过了以下几个阶段的发展:

               1)仅用于图形渲染,此功能是GPU的初衷,这一点从它的名字就可以看出:Graphic Processing Unit,图形处理单元;

               2)把浮点运算包装成图形渲染任务,交给GPU来做,这样做有一个缺点,就是必须有一定的图形学知识,否则不知道如何包装浮点运算。

               3)提出CUDA概念,使不需要图形学知识也可以应用GPU进行运算。

  (3)CUDA简介:

          CUDA是NVIDIA推出的只能用于自家GPU的并行计算框架,只有安装这个框架才能够进行复杂的并行计算。主流的深度学习框架也都是基于CUDA进行GPU并行加速的。还有一个cudnn是针对深度卷积神经网络的加速库。

          CUDA在软件方面组成有:一个CUDA库、一个应用程序编程接口(API)及其运行库(Runtime)、两个较高级别的通用数学库(CUFFT和CUBLAS)。CUDA改进了的读写灵活性,使得GPU与CPU的机制相吻合;另一方面,CUDA提供了片上共享内存,使得线程之间可以共享数据,应用程序可以利用共享内存来减少DRAM的数。

  (4)CUDA计算能力的含义:

           体现GPU计算能力的两个重要特征:

               1)CUDA核的个数;

               2)存储器大小。

           描述GPU性能的两个重要指标:

               1)计算性能峰值;

               2)存储器带宽。

 

3.内存和缓存:

  (1)内存简介:

          内存是由内存芯片、电路板、金手指等部分组成的。内存的作用是用于暂时存放CPU中的运算数据,以及与硬盘等外部存储器交换的数据,只要计算机在运行中,CPU就会把需要运算的数据调到内存中进行运算,当运算完成后CPU再将结果传送出来,内存的运行决定了计算机的稳定运行。

          内存是计算机中重要的部件之一,计算机中所有程序的运行都是在内存中进行的,因此内存的性能对计算机的影响非常大。

  (2)缓存简介:

          显存,也被叫做帧缓存,它的作用是用来存储显卡芯片处理过或者即将提取的渲染数据。如同计算机的内存一样,显存是用来存储要处理的图形信息的部件。

 

4.SDK/API/DLL:

  (1)SDK:

          SDK中文可译为“软件开发工具包”。

          SDK是一个覆盖面很广的名词,辅助开发某一类软件的相关文档、范例和工具的集合都可以叫做SDK。通俗来说是指由第三方服务商提供的实现软件产品某项功能的工具包,在编辑器里敲代码的时候它会自动补全代码、自动检查错误。

          通常SDK是由专业性质的公司提供专业服务的集合,比如提供安卓开发工具、或者基于硬件开发的服务等;也有针对某项软件功能的SDK,如推送技术、图像识别技术、移动支付技术、语音识别分析技术等,开发者不需要再对产品的每个功能进行开发,选择合适稳定的SDK服务并花费很少的精力就可以在产品中集成某项功能。

  (2)API:

          API中文可译为“应用程序编程接口”。

          API是一些预先定义的函数,是操作系统留给应用程序的一个调用接口,应用程序通过调用操作系统的 API 而使操作系统去执行应用程序的命令(动作)。

          通常指的Windows API DOSAPI是系统程序的一部分,它们与系统一同被载入内存并且可以通过中断矢量表找到它们的入口。

  (3DLL

          DLL中文译为“动态链接库”。

          DLL文件内含有一些资源以及可执行代码等,在windows环境下含有大量 .dll格式的文件,这些文件其实也是一种可执行文件格式,但与 .exe 文件不同的是.dll文件不能直接执行,它们通常由 .exe 在执行时装入。动态链接库在操作系统的底层直接与硬件打交道,应用程序通过引用DLL里的函数可以实现程序和硬件的链接,这样避免了程序和硬件直接连接,提高了应用程序的可靠性和稳定性。

  (4)API与DLL的关联和区别:

          1)关联:

                API 函数封装在各个 DLL 文件里,DLL是API的载体,但API并不一定全用DLL实现,也可能是SYS(内核)、DRV(驱动)、OCX(控件)、LIB(静态库)或其它实现,所以DLL只是API实现的其中一种方式。

                DLL里面包含大量的API函数,API函数的代码就包含在DLL中,而API函数只是DLL的一部分。

          2)区别:

                API是函数,可以是动态的也可以是静态,但主要是静态的;而DLL是动态的。静态链接发生在形成可执行程序前,而动态链接的进行则发生在程序执行时。

                API作为操作系统提供开发应用程序的接口函数,它的实现与具体的操作系统有关;而DLL的实现与语言无关。

  (5)SDK与API的关联和区别:

          1)关联:

            API通常是SDK的一部分,可以把SDK想象成一个虚拟的程序包,在这个程序包中有一份做好的软件功能,这份程序包几乎是全封闭的只有一个小小接口可以联通外界,这个接口就是API。SDK配备API接口,可以对接外部系统实现二次开发。

          2)区别:

                a.API是一个有特定功能的函数;而SDK是一个多功能集成的工具包;

                b.API是数据接口,SDK相当于开发集成工具环境,要在SDK环境下调用API;

                c.API接口对接过程中需要的环境需要自己提供,SDK不仅提供开发环境还提供很多API。

 

5.参考资料:

  (1)https://www.jianshu.com/p/8bcf60b9b050

  (2)https://www.jianshu.com/p/34a504af8d51

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章