阶段
应用程序阶段
几何阶段
光栅化阶段
应用程序阶段
通过软件的方式来实现的阶段(其他阶段全部或者部分建立在硬件基础之上)
可以并行在 CPU 上执行,超标量体系结构,同一阶段同一时间做不同的几件事情。
包含碰撞检测、加速算法、输入检测、动画、力反馈、纹理动画、变换仿真、几何变形等。(视锥体裁剪等加速算法)
主要任务为:将需要在屏幕上显示出来的几何体(图元)输入到绘制管线的下一阶段。
几何阶段
模型视点变换
顶点着色
投影
裁剪
屏幕映射
光栅化阶段
即给每个像素进行正确的配色,以便正确的绘制整幅图像。
三角形设定(Triangle Setup)
三角形遍历 (Triangle ...
反射|注解|泛型反射反射:解决运行期间对某个未知实例,进行调用其方法。反射是一种专门为静态语言(编译时变量的数据类型即可确定的语言,要求使用变量之前必须声明数据类型。如c++、Java、C#等)提供的技术,用于在程序运行时动态的改变程序的状态和行为。运行时,对于任意一个类或对象,都能够调用它的任意字段和方法。
Java 类的成员包括:属性字段、构造函数、方法。
反射API与Java的以上成员相关:
获取 Class 对象的三种方式:
1234567// 1.通过字符串获取Class对象,这个字符串必须带上完整路径名Class s1 = Class.forName("com.test.r...
Android LearningAndroid系统架构
Linux 内核层
为Android设备多种硬件提供底层的驱动及电源等管理。
系统运行库
通过C/C++库为Android系统提供主要的特性支持。如 OpenGL ES库和 Webkit浏览器内核。
应用框架层
提供构建应用程序时可能用到各种API。
应用层
安装使用的软件。
项目目录资源res下
drawable :存放图片
mipmap:存放应用图标
values:存放字符串、样式、颜色配置
layout:存放布局文件
build.gradle最外层的为项目配置:
1234567891011// Top-leve...
Thread
程序指令能被单独操作的最小序列单位
拥有自己的寄存器,PC(program counter,程序计数器),SP(stack pointer 栈计数器)
Process
进程被执行的实例
一个进程有多个线程
大部分为单线程
Parallel computing
在一个或多个CPU执行
多线程(内存共享
多进程(内存独立
多线程
1234567891011121314151617#include <iostream>#include <thread>using namespace std;int a = 1;void run(){...
C++ 智能指针
C++指针支持使用 和 运算符动态分配和释放newdelete对象。 这些运算符为来自称为“自由存储”的池中的对象分配内存。 运算符 new 调用特殊函数 operator new,运算符 delete 调用特殊函数 operator delete。
C++ 智能指针思路类似于在语言(如 C#)中创建对象的过程:创建对象后让系统负责在正确的时间将其删除。 不同之处在于,单独的垃圾回收器不在后台运行;按照标准 C++ 范围规则对内存进行管理,以使运行时环境更快速更有效。
实际的C++开发过程中存在程序崩溃、程序运行所需内存越来越多的问题等,主要原因有:
内存资源已经释...
以一个 OpenGL 程序为例:
1234567//文件目录./├── CMakeLists.txt├── build├── lib│ └── glad.c└── main.cpp
CMakeLists.txt文件:
1234567891011121314151617181920212223242526272829303132333435363738# cmake的版本号cmake_minimum_required(VERSION 3.17)# project 的名字project(OpenglDemo)# C++ versionset(CMAKE_CXX_STANDARD 14)#...
LeetCode OWNTIPS
Type
C++
Java
array
T dirs[n]
T[] dirs = new T[n]
dynamic array
vector\
ArrayList\
list
list\
LinkedList\
OrderedSet \ OrderedMap
set\, map\
TreeSet\, TreeMap\
HashSet \ HashMap
unordered_set\, unordered_map\
HashSet\, HashMap\
heap
priority_queue\
PriorityQueue...
安装基础及概念安装:
GO 安装官网:https://golang.org/dl/
GO 的三个环境变量重要概念:
GOROOT:GO语言安装目录
GOPATH:若干自定义的工作空间,也就是传统的工作区 (Workspace)
GOBIN:GO 程序生成的可执行文件路径
HelloWorld
go run helloworld.go 命令
编译模式:
在源码目录下进行 go install
会自动生成 bin 文件夹,里面会有编译的 hello 可执行程序
go 编译程序时,会自动在 GOROOT/src 文件夹下 或者在 GOPATH/src文件夹下程序包里自动寻找 main ...
ListNode递归反转反转一个链表(用递归的方式):
1234567ListNode reverse(ListNode head){ if(head.next == null) return head; ListNode last = reverse(head.next); head.next.next = head; head.next = null; return last;}
关键的重点在于:ListNode last = reverse(head.next),此句在于将 head 之后的链表进行反转,反转之后,head 仍然指向 head 之后的第...
本文内容参考自 「高翔-SLAM14讲」
Slam: Simultaneous localization and mapping 同时定位🌧️地图构建,概念为希望机器人从未知环境的未知地点出发,在运动过程中通过重复观测到的地图特征(如墙角,柱子)定位自身的位置和姿态,再根据自身位置增量式的构建地图,从而同时定位和地图构建的目的。
SLAM发展上世纪80年代SLAM概念的提出,从早期的声呐,到后来的2D/3D激光雷达,再到单目、双目、RGBD、ToF等各种相机,以及与惯性测量单元IMU等传感器的融合;SLAM的算法也从开始的基于滤波器的方法(EKF、PF等)向基于优化的方法转变,技术框架...
深度学习技术与理论一、简答题(50 分)。 1、Sigmoid, Tanh, Relu 这三个激活函数有什么缺点和不足?有哪些最新改进的激活函数?(10 分)
激活函数
公式
缺点
优点
sigmoid
$\sigma(x) = 1/(1+e^{-x})$
1. 由于其软饱和性,会有梯度消失弥散问题,导致训练出现问题2. 不是关于原点对称3. 计算 exp 较为耗时
1. 函数输出映射在(0,1)之间,单调连续,输出范围有限,优化稳定,可以用作输出层2. 求导容易
Tanh
$tanh(x) = 2\sigma(2x)-1$
梯度弥散没有解决
1. 解决了原点对称的问...
git 记要
git add , git checkoutgit add 后修改文件,可以再使用 git checkout 使得 work dir 返回到 stage 区的刚刚 git add 的状态
保存 git commit -m ’xxx’ , git commit —amend将 stage 区文件提交到 history 区,进入history 后的修改将永远不会丢失。
反悔之小悔 git resetgit reset a.txt 可以将已经使用 git add 命令将其添加到 stage 区的 a.txt 还原到 work dir。
从 work dir 区提交到 histo...
OS-Learning: Linux Homebrew准备工作程序编译过程
gcc helloworld.c -E -o helloworld.i 预处理:加入头文件,替换宏。
gcc helloworld.c -s -c helloworld.s 编译:包含预处理,将 C 程序转换成汇编程序
gcc helloworld.c -c helloworld.o 汇编:将汇编程序转换成可链接的二进制程序
gcc helloworld.c -o helloworld 链接:包含了以上的所有操作,直接将可链接的二进制程序和其他别的库链接在一起,形成可执行的程序文件。
PC OS 引导流程
P...
Dynamic Programming Analysis
CUDA 编程现代 CPU 架构和性能优化CPU的概念:
执行指令,处理数据的器件——完成基本的逻辑和算术指令
增加了复杂的接口
内存接口
外部设备接口
包含大量静晶体管
桌面应用
轻量级进程,少量线程
分之和交互操作
大量存储器访问
用于数值运算的指令很少
CPU结构图
取指 译码 执行 访问 写回
流水线
利用指令级的并行
极大的减小时钟周期
但是增加了延迟和芯片面积
分支预测猜测下一条指令
基于过去的分支记录
如:基于全局记录的两层预测
现代预测器准确度大于 90%
提升性能以及能量效率
但是会导致面积增加和延迟
提升 IPC (instructions c...
滑动窗口需要注意的主要步骤
移动 right 时扩大窗口,需要更新哪些数据
什么条件下,窗口应该暂停扩大,开始缩小窗口
移动 left 时缩小窗口,需要更新哪些数据
需要的结果是在哪个地方进行更新,是在扩大窗口时,还是缩小窗口时进行更新。
窗口右端不断向前,直到包含所有的所需元素
(注意,刚刚直到包含所有元素就是窗口开始缩小的条件)。
然后窗口左端开始向前(即进行了窗口的缩小),直到开始不包含所有元素(比如ABC,就少了 A,窗口中只包含了BC)
然后窗口右边再次向右前进,重复上述过程。
最后返回最小的窗口即可(在这里,可以得出,在缩小窗口之前通常需要进行预备份上一次的最...