麦博士 的blog

GPU学习笔记

Graphics Processing Unit(GPU),即可编程图形处理单元, 通常也称之为可编程图形硬件。

由于 GPU 具有高并行结构(highly parallel structure),所以 GPU 在处理图形数据和复杂算法方面拥有比 CPU 更高的效率。图 1 GPU VS CPU 展示了 GPU 和 CPU 在结构上的差异,CPU 大部分面积为控制器和寄存器,与之相比,GPU 拥有更多的 ALU(Arithmetic Logic Unit,逻辑运算单元)用于数据处理,而非数据高速缓存和流控制,这样的结构适合对密集型数据进行并行处理。CPU 执行计算任务时,一个时刻只处理一个数据,不存在真正意义上的并行,而 GPU 具有多个处理器核,在一个时刻可以并行处理多个数据。

GPU学习笔记

iOS构建流畅的交互界面--CPU,GPU资源消耗的原因和解决方案

CPU资源消耗的原因和解决方案

对象创建

轻量对象代替重量对象
* 不需要响应触摸事件的控件:CALayer显示
* 对象不涉及UI操作,则尽量放到后台线程创建
* 包含有CALayer的控件只能在主线程创建和操作
* 通过Storyboard 创建视图对象时,其资源消耗会比直接通过代码创建对象要大非常多,在性能敏感的界面里,storyboard不是一个好的技术选择
* 尽量推迟对象创建的时间,并把对象的创建分散到多个任务中去。
* 对象的复用代价比释放,创建新对象要小,这类对象应当尽量放到一个缓存池里复用

对象调整

* CALayer:CALayer内部并没有属性,当调用属性方法时,它内部是通过运行时resolveInstanceMethod为对象临时添加一个方法,并把对应属性值保存到内部的一个Dictionary里,同时还会通知delegate,创建动画等等,非常消耗资源。
* UIView的关于显示相关的属性(frame/bound/transform)等实际上都是CALayer属性映射来的,所以对UIView的这些属性进行调整时,消耗的资源要远大于一般的属性,所以,尽量减少不必要的属性修改

GPU渲染之OpenGL的GPU管线

GPU渲染流水线,是硬件真正体现渲染概念的操作过程,也是最终将图元画到2D屏幕上的阶段。GPU管线涵盖了渲染流程的几何阶段和光栅化阶段,但对开发者而言,只有对顶点和片段着色器有可编程控制权,其他一律不可编程。如下图:

GPU渲染之OpenGL的GPU管线

简单总结GPU管线,这阶段中主要是对图元进行操作。首先,将由应用阶段加载到显存中的顶点数据(由drawCall指定后)作为输入传递给顶点着色器。接着,顶点着色器首先对图元的每个顶点设置模型视图变换及投影变换(即右乘MVP矩阵),然后将变换后的顶点按照摄像机视椎体定义(即透视投影,或正投影)进行裁剪,将不在视野内的顶点去掉并剔除某些三角面片。最后到几何阶段的屏幕映射,负责把修改过的图元的坐标转换到屏幕坐标系中(即投影到屏幕上)。

强制GPU渲染有什么作用?好处坏处是什么?

从安卓4.0开始,系统设置中的开发者选项里多了一项功能--强制GPU渲染,那么这项功能的具体作用是什么呢?下面由小编带大家了解一下。

所谓GPU,就是图形处理器的缩写,相当于PC中的显卡,相信大多数朋友都应该知道这一点,而从PC的情况来看,显卡的性能是可以决定游戏运行的流畅度以及运行品质的,这样的道理放在手机中也是一样的。

手机中的GPU也是为了对图形、图像处理而存在的,所谓强制渲染,就是hwa(hard ware acceleration硬件加速)的一种,其存在的意义就是为了分担CPU的负担,其原理是通过GPU对软件图形图像的处理来减轻CPU的负担,从而使应用软件能够以更快的速度被处理,以达到提速的目的。对于普通的玩家来说,强制GPU渲染是一把双刃剑,有利有弊。

强制GPU渲染有什么作用?好处坏处是什么?

学习shader之前必须知道的东西——渲染管线

所谓GPU的渲染管线,听起来好像很高深的样子,其实我们可以把它理解为一个流程,就是我们告诉GPU一堆数据,最后得出来一副二维图像,而这些数据就包括了”视点、三维物体、光源、照明模型、纹理”等元素。
在各种图形学的书中,渲染管线主要分为三个阶段:应用程序阶段、几何阶段、光栅阶段。

1、应用程序阶段

这个阶段相对比较好理解,就比如我们在Unity里开发了一个游戏,其实很多底层的东西Unity都帮我们实现好了,例如碰撞检测、视锥剪裁等等,这个阶段主要是和CPU、内存打交道,在把该计算的都计算完以后,在这个阶段的末端,这些计算好的数据(顶点坐标、法向量、纹理坐标、纹理)就会通过数据总线传给图形硬件,作为我们进一步处理的源数据。

2、几何阶段

主要负责顶点坐标变换、光照、裁剪、投影以及屏幕映射,改阶段基于GPU进行运算,在该阶段的末端得到了经过变换和投影之后的顶点坐标、颜色、以及纹理坐标。简而言之,几何阶段的主要工作就是“变换三维顶点坐标”和“光照计算”。

线程通信与进程通信的区别

每个进程有自己的地址空间。两个进程中的地址即使值相同,实际指向的位置也不同。进程间通信一般通过操作系统的公共区进行。

同一进程中的线程因属同一地址空间,可直接通信。

不仅是系统内部独立运行的实体,而且是独立竞争资源的实体。

线程也被称为轻权进程,同一进程的线程共享全局变量和内存,使得线程之间共享数据很容易也很方便,但会带来某些共享数据的互斥问题。

许多程序为了提高效率也都是用了线程来编写。

父子进程的派生是非常昂贵的,而且父子进程的通讯需要ipc或者其他方法来实现,比较麻烦。而线程的创建就花费少得多,并且同一进程内的线程共享全局存储区,所以通讯方便。

线程的缺点也是由它的优点造成的,主要是同步,异步和互斥的问题,值得在使用的时候小心设计。

只有进程间需要通信,同一进程的线程share地址空间,没有通信的必要,但要做好同步/互斥mutex,保护共享的全局变量。线程拥有自己的栈。同步/互斥是原语primitives.

而进程间通信无论是信号,管道pipe还是共享内存都是由操作系统保证的,是系统调用.

线程间通信:由于多线程共享地址空间和数据空间,所以多个线程间的通信是一个线程的数据可以直接提供给其他线程使用,而不必通过操作系统(也就是内核的调度)。

认识cpu、核与线程

CPU与核心

物理核

• 物理核数量=cpu数(机子上装的cpu的数量)*每个cpu的核心数

虚拟核

• 所谓的4核8线程,4核指的是物理核心。通过超线程技术,用一个物理核模拟两个虚拟核,每个核两个线程,总数为8线程。
• 在操作系统看来是8个核,但是实际上是4个物理核。
• 通过超线程技术可以实现单个物理核实现线程级别的并行计算,但是比不上性能两个物理核。

单核cpu和多核cpu

• 都是一个cpu,不同的是每个cpu上的核心数
• 多核cpu是多个单核cpu的替代方案,多核cpu减小了体积,同时也减少了功耗
• 一个核心只能同时执行一个线程

进程和线程

理解

• 进程是操作系统进行资源(包括cpu、内存、磁盘IO等)分配的最小单位
• 线程是cpu调度和分配的基本单位

关于CPU Cache -- 程序猿需要知道的那些事

本文将介绍一些作为程序猿或者IT从业者应该知道的CPU Cache相关的知识

作者:卢钧轶(cenalulu)
本文原文地址: http://cenalulu.github.io/linux/all-about-cpu-cache/

先来看一张本文所有概念的一个思维导图

关于CPU Cache -- 程序猿需要知道的那些事

为什么要有CPU Cache

基础知识:线程,进程。多进程,多线程。并发,并行的区别

一、线程与进程

1.概念

线程:是程序执行流的最小单元,是系统独立调度和分配CPU(独立运行)的基本单位。

进程:是资源分配的基本单位。一个进程包括多个线程。

2.区别:

1.线程与资源分配无关,它属于某一个进程,并与进程内的其他线程一起共享进程的资源。

2.每个进程都有自己一套独立的资源(数据),供其内的所有线程共享。

3.不论是大小,开销线程要更“轻量级”

4.一个进程内的线程通信比进程之间的通信更快速,有效。(因为共享变量)

二、多线程与多进程

多线程:同一时刻执行多个线程。如,用浏览器一边下载,一边听歌,一边看视频,一边看网页......

进程和线程有什么关系?它们的区别又是什么?

1.定义

进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。

线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。

2.关系

一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行.

相对进程而言,线程是一个更加接近于执行体的概念,它可以与同进程中的其他线程共享数据,但拥有自己的栈空间,拥有独立的执行序列。

3.区别

同步内容
--电子创新网--
粤ICP备12070055号