归档

2024

CUDA与Triton

6 分钟阅读

并行计算术语 并行计算术语 名词 全称 注解 SI Single Instruction 指单一指令,一个时钟执行单一指令。即便多个处理单元,也执行一样的指令。 SD Single Data 指单一数据,一个时钟一条数据。即便多个处理单元,也使用相同的数据。 MI Multiple Instruction 指多指令,不同处理单元处理不同的指令。 MD Multiple Data 指多数据,不同的处理单元处理不同的数据。 SISD Single Instruction, Single Data 串行计算,传统单核芯片属于该类 SIMD Single Instruction, Multiple Data 单指令多数据流,典型的可以支持向量计算,对不同的数据使用相同的指令。一般现代CPU都会支持SIMD指令。 MISD Multiple Instruction, Single Data 多指令单数据流,几乎不存在这样的架构 MIMD Multiple Instruction, Multiple Data 多指令多数据流。多核处理器都是属于这个范畴 SIMT Single Instruction Multiple Threads 单指令多线程,每个线程处理相同的指令和不同的数据。可以认为是SIMD的升级版,个人理解它们的区别在于:SIMD的数据必须是向量形式的数据,SIMT的数据则没有形式的要求。所以SIMT可以更加灵活。现代GPU一般都是SIMT。 SPMD Simple Program, Multiple Data 单程序多数据,一种编程概念,用于数据并行的应用。一般MIMD或者SIMT,可以支持SPMD

返回顶部 ↑

2021

编辑ONNX模型

1 分钟阅读

概述 概述 onnx模型编辑方法有2种: onnx-graphsurgeon : 手工编辑onnx模型 onnx-modifier : 图形化编辑onnx模型 虽然onnx-modifier有图形界面编辑onnx,但是实际用起来问题特别多。onnx-graphsurgeon用起来更加强大,简洁。 安装方法如下: pip install onnx_graphsurgeon --index-url https://pypi.ngc.nvidia.com 也可以源码编译安装: make build pip install onnx_graphsurgeon/dist/onnx_graphsurgeon-*-py2.py3-none-any.whl

FasterRCNN

1 分钟阅读

概述 概述 源码: Torch Faster RCNN 论文地址:Faster R-CNN

各NN框架的MLIR

24 分钟阅读

ONNX MLIR ONNX MLIR 官网介绍:http://onnx.ai/onnx-mlir 论文:Compiling ONNX Neural Network Models Using MLIR github地址:onnx mlir docker下载:docker pull onnxmlirczar/onnx-mlir:amd64 转换工具 ## EmitONNXBasic 会生成.mlir文件(含文本形式的weight)和.tmp文件(不含weight) docker/onnx-mlir.py --EmitONNXBasic xxx.onnx

MLIR技术细节整理

59 分钟阅读

MLIR 编译方法 MLIR MLIR: Multi-Level Intermediate Representation,主要设计者来自Google的Chris Lattner 论文MLIR: A Compiler Infrastructure for the End of Moore’s Law 官网介绍:https://mlir.llvm.org 编译方法 git clone https://github.com/llvm/llvm-project.git mkdir llvm-project/build cd llvm-project/build cmake -G Ninja ../llvm \ -DLLVM_ENABLE_PROJECTS=mlir \ -DLLVM_BUILD_EXAMPLES=ON \ -DLLVM_TARGETS_TO_BUILD="X86;NVPTX;AMDGPU" \ -DCMAKE_BUILD_TYPE=Release \ -DLLVM_ENABLE_ASSERTIONS=ON \ # -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DLLVM_ENABLE_LLD=ON cmake --build . --target check-mlir

LLVM积累

10 分钟阅读

RTTI 官网介绍:llvm github源码:llvm-project RTTI 阅读:How to set up LLVM-style RTTI for your class hierarchy llvm有这些RTTI接口可以使用isa<>、dyn_cast<>、cast<>等等。 使用这些接口,父类和子列有这些要求: 父类:定义Kind枚举,且构造函数用Kind做入参 子列:构造函数指定kind,且定义classof接口 使用时如果入参可能是空指针,则需要调用dyn_cast_or_null<>转换。

Pytorch

3 分钟阅读

概述 概述 帮助文档 pip install torch, pip install torchvision, pip install onnx, pip install onnxruntime

Resize

5 分钟阅读

概述 概述 ONNX操作描述:Resize 参考代码:resize.py 坐标转换模式: half_pixel、align_corners、asymmetric、pytorch_half_pixel、tf_crop_and_resize 插值模式: linear、nearest、cubic 本文以 $ A[h_a, w_a] $ resize to $ B[h_b, w_b] $举例。

YOLO网络

5 分钟阅读

概述 概述 官网:YOLO: Real-Time Object Detection 论文地址:YOLO v1 2016 、YOLO v2 2017、YOLO v3 2018、YOLO v4 2020、YOLO v5 待更新

BERT

3 分钟阅读

概述 概述 BERT: Bidirectional Encoder Representation from Transformers 论文地址[2019]:BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding 对应github代码:github-bert BERT分为 两个阶段: Pre-training:利用无标记语料预训练模型 Fine-tuning: 使用预训练的模型,对已经标记的语料根据实际的任务进行训练

Transformer

4 分钟阅读

概述 概述 论文地址[2017]:Attention Is All You Need 核心运算:$ Attention(Q,K,V) = softmax(\frac{QK^T}{\sqrt{d_k}})V $ 描述:查询(Query)到键值(Key-Value)的映射

ONNX

5 分钟阅读

概述 概述 ONNX,Open Neural Network Exchange。由于神经网络架构很多,如caffe、tensorflow、pytorch、mxnet等等,模型结构各式各样,onnx旨在将模型结构统一起来。 官方代码:ONNX 算子操作:Operators 环境要求:pip install onnx onnxruntime onnx-simplifier netron

常见神经网络特征

2 分钟阅读

VGG16 VGG16 13层卷积+3层全连接,穿插pooling和relu 其中卷积的kernel均采用3x3

统计距离

5 分钟阅读

熵 信息量 信息熵 熵 Entropy, [ˈentrəpi], 熵,无序状态 信息量 信息不确定性越大,信息量越大。 假定X是随机事件集合,其中$ p(x_0) $表示事件$ x_0 $的概率,那么事件$ x_0 $的信息量定义为 $ h(x_0) = - \log_2p(x_0) $。 信息熵 [H(X) = -\sum^{n}_{i=1}{p(x_i)log_2p(x_i)}] 信息熵用来衡量事物的不确定性,信息熵越大,事物越具有不确定性。

浮点型存储格式

2 分钟阅读

FP32 FP32 float共32bit:1bit符号位,8bit指数位,23bit底数位。如下表示: S E8 M23 浮点与二进制转换公式如下: $ Y = (-1)^{s} \times 2^{e} \times m,其中m = 1.M23,e = E8 - 127 $

返回顶部 ↑

2020

RNN/LSTM/GRU

10 分钟阅读

RNN RNN RNN:Recurrent Neural Networks,循环神经网络,能够应用于空间或时间先后相关的场景,比如文字解析、语音识别。 RNN模型结构简单描述,如下图: 其中X0、X1、……、Xt,可以理解成多个输入,或者对单个输入拆分成的多个输入,比如一张图片的多个字符拆分、语音的拆分等等;h0、h1、…、ht可以理解成多个输出,通常也可能最终被concat到一起,做为一个输入。 上图是单向的,也就是h1会受h0的影响,h2会受h1、h0的影响,…,但反过来不会。RNN网络也会有双向的情况,使前后互相影响。

Macbook操作

1 分钟阅读

快捷键 快捷键 文本 文件 其他 Command-C 拷贝Command-V 粘贴Command-X 剪切Command-Z 撤销Command-A 全选command-S 保存Command-F 查找 Command <- 删除文件Command c 拷贝文件Command v 粘贴文件Command option v 移动文件 Command Shift 4 选取截图Command Shift 3 全屏截图Control 空格 切换输入法

时间复杂度

少于 1 分钟阅读

概述 概述 时间复杂度通常用大O符号表示,不考虑低阶项和系数,主要考察算法中元素个数N趋于无穷时的情况。 另外时间复杂度也有最好情况表示Ω,和平均情况表示Θ。大O是最坏情况表示。

SSD网络

4 分钟阅读

概述 概述 目标检测目前主要有种方法: two-stage: R-CNN和Faster R-CNN系列为代表,先生成region proposal(预选框),再经过CNN网络进行分类 one-stage: ssd和yolo为代表,边提取特征边分类 论文地址[2016]:SSD: Single Shot MultiBox Detector

quantization int8

6 分钟阅读

算法 8-bit 与float转换 threshold per-axis 与 per-tensor 算法 8-bit 与float转换 [real_value = (int8_value - zero_point)\times scale] 简写为:$ r = S(q-Z) $ int8_value的weight范围是[-127, 127],zero_point为0;activations/inputs范围是[-128, 127],zero_point范围是[-128, 127] threshold threshold理解为某个tensor的元素最大值,则: [Y = F(X) \text{(float运算)} => y = f(x) \text{(int8运算)}] 其中 $ x = X \times \frac{128}{threshold_x}, Y = y \times \frac{threshold_y}{128} $ per-axis 与 per-tensor per-axis,表示某个维度每一片都有一个scale和zero_point,比如per-channel表示每个channel都有一个scale和zero_point per-tensor,表示整个tensor用一个scale和zero_point

常见算子操作

14 分钟阅读

激活函数 Relu LeakyRelu 激活函数 Relu [f(x) = \begin{cases} x,\quad & if & x \ge 0 0,\quad & if & x \lt 0 \end{cases}] LeakyRelu [f(x) = \begin{cases} x,\quad & if & x \ge 0 x \times negative_slope,\quad & if &x \lt 0 \end{cases}]

Numpy

6 分钟阅读

概述 ndarray 概述 Numpy, Numerical Python, 读作Num Pie 导入import numpy as np ndarray N维数据对象,成员: data,内存地址 shape,各个维度大小的元组 dtype,元素类型 size,元素个数 ndim,维度的数量 strides,各个维度步进字节大小的元组 T,ndarray,对象的转置 flags, 各种属性标志 其他

python

9 分钟阅读

执行方式 注释 执行方式 直接执行,python test.py 交互执行,ipython 注释 #!/usr/bin/python3 # 单行注释 print("hello,world") ''' 多行注释 用\实现多行语句,[]{}()中不需要\ ''' a = 1 + 2 + \ 3 + 4 b = ['a','b', 'c','d']

返回顶部 ↑

2019

python调试

1 分钟阅读

python调试 方式一:import pdb python调试 方式一:import pdb import pdb pdb.set_trace() #运行到这里会自动暂停

Markdown

6 分钟阅读

特殊符号 Latex公式 希腊字母 关系运算符 集合运算符 对数运算符 三角运算符 微积分运算符 逻辑运算符 戴帽符号 Mermaid绘图 Jekyll-spaceship 特殊符号 上标:2<sup>n</sup>,效果2n 小标:log<sub>n</sub>,效果logn HTML中的特殊符号 Latex公式 来源:Cmd Markdown公式指导手册 希腊字母 对于大写希腊字母与现有字母相同的,直接输入大写字母即可。 输入 显示 输入 显示 输入 显示 输入 显示 \alpha $\alpha$ A $A$ \beta $\beta$ B $B$ \gamma $\gamma$ \Gamma $\Gamma$ \delta $\delta$ \Delta $\Delta$ \epsilon $\epsilon$ E $E$ \zeta $\zeta$ Z $Z$ \eta $\eta$ H $H$ \theta $\theta$ \Theta $\Theta$ \iota $\iota$ I $I$ \kappa $\kappa$ K $K$ \lambda $\lambda$ \Lambda $\Lambda$ \mu $\mu$ M $M$ \nu $\nu$ N $N$ \xi $\xi$ \Xi $\Xi$ o $o$ O $O$ \pi $\pi$ \Pi $\Pi$ \rho $\rho$ P $P$ \sigma $\sigma$ \Sigma $\Sigma$ \tau $\tau$ T $T$ \upsilon $\upsilon$ \Upsilon $\Upsilon$ \phi $\phi$ \Phi $\Phi$ \chi $\chi$ X $X$ \psi $\psi$ \Psi $\Psi$ \omega $\omega$ \Omega $\Omega$ 关系运算符 输入 显示 输入 显示 输入 显示 输入 显示 \pm $\pm$ \times $\times$ \div $\div$ \mid $\mid$ \nmid $\nmid$ \cdot $\cdot$ \circ $\circ$ \ast $\ast$ \bigodot $\bigodot$ \bigotimes $\bigotimes$ \bigoplus $\bigoplus$ \leq $\leq$ \geq $\geq$ \neq $\neq$ \approx $\approx$ \equiv $\equiv$ \sum $\sum$ \prod $\prod$ \coprod $\coprod$ \backslash $\backslash$ 集合运算符 输入 显示 输入 显示 输入 显示 \emptyset $\emptyset$ \in $\in$ \notin $\notin$ \subset $\subset$ \supset $\supset$ \subseteq $\subseteq$ \supseteq $\supseteq$ \cap $\cap$ \cup $\cup$ \vee $\vee$ \wedge $\wedge$ \uplus $\uplus$ \top $\top$ \bot $\bot$ \complement $\complement$ 对数运算符 输入 显示 输入 显示 输入 显示 \log $\log$ \lg $\lg$ \ln $\ln$ 三角运算符 输入 显示 输入 显示 输入 显示 \backsim $\backsim$ \cong $\cong$ \angle A $\angle A$ \sin $\sin$ \cos $\cos$ \tan $\tan$ \csc $\csc$ \sec $\sec$ \cot $\cot$ 微积分运算符 输入 显示 输入 显示 输入 显示 \int $\int$ \iint $\iint$ \iiint $\iiint$ \partial $\partial$ \oint $\oint$ \prime $\prime$ \lim $\lim$ \infty $\infty$ \nabla $\nabla$ 逻辑运算符 输入 显示 输入 显示 输入 显示 \because $\because$ \therefore $\therefore$ \neg $\neg$ \forall $\forall$ \exists $\exists$ \not\subset $\not\subset$ \not< $\not<$ \not> $\not>$ \not= $\not=$ 戴帽符号 输入 显示 输入 显示 输入 显示 \hat{xy} $\hat{xy}$ \widehat{xyz} $\widehat{xyz}$ \bar{y} $\bar{y}$ \tilde{xy} $\tilde{xy}$ \widetilde{xyz} $\widetilde{xyz}$ \acute{y} $\acute{y}$ \breve{y} $\breve{y}$ \check{y} $\check{y}$ \grave{y} $\grave{y}$ \dot{x} $\dot{x}$ \ddot{x} $\ddot{x}$ \dddot{x} $\dddot{x}$ Mermaid绘图 Markdown中使用mermaid画流程图 Mermaid Jekyll-spaceship Jekyll-spaceship

CMAKE与Ninja

少于 1 分钟阅读

简介 简介 Ninja原意是忍者,Google在编译chrome项目时本来用make方式,但是非常费时间;于是实现Ninja,取代make,加快编译构建。 Ninja官网:Ninja

Linux Event Tracing

3 分钟阅读

Tracepoints添加 1. 添加头文件 Tracepoints添加 参考 Tracepoints 1. 添加头文件 include/trace/events/sample.h #undef TRACE_SYSTEM #define TRACE_SYSTEM sample #if !defined(_TRACE_SUBSYS_H) || defined(TRACE_HEADER_MULTI_READ) #define _TRACE_SUBSYS_H #include <linux/tracepoint.h> DECLARE_TRACE(sample_event, TP_PROTO(int firstarg, struct task_struct *p), TP_ARGS(firstarg, p)); #endif /* _TRACE_SUBSYS_H */ /* This part must be outside protection */ #include <trace/define_trace.h>

卷积运算

7 分钟阅读

基本概念 基本概念 基本卷积形式如下(NHWC格式): 输入为[1,32,32,3],filter为[10, 5, 5, 3],输出为[1, 28, 28, 10]

tensorflow:添加新OP和新设备

13 分钟阅读

REGISTER_OP,注册一个OP,其实也是声明一个OP REGISTER_KERNEL_BUILDER,注册一个Kernel,其实就是对OP的实现 REGISTER_LOCAL_DEVICE_FACTORY,添加设备工厂

vim操作积累

少于 1 分钟阅读

vim控制 vim控制 dd 剪切光标所在行 yy 拷贝光标所在行 p 粘贴到光标所在行 u 撤销上一次操作 ctrl+u 恢复撤销

FlatBuffers反射

9 分钟阅读

概述 概述 基本有三种方式: unpack和pack,可以对某个成员进行操作,可以在多个flatbuffers局部拷贝的时候用到。 parser方式,在做成员细致的修正的时候可以用到 reflection,不推荐使用。

学习整理:梯度下降(Gradient Descent)

少于 1 分钟阅读

概念 参考链接:Intro to optimization in deep learning: Gradient Descent 概念 只有2个权值的情况下,理想的损失函数模型如下:

返回顶部 ↑

2018

caffe源码阅读

7 分钟阅读

一、caffe::Net 1、NetParameter定义 一、caffe::Net 1、NetParameter定义 其中DEPRECATED已经去除 message NetParameter { optional string name = 1; // consider giving the network a name optional bool force_backward = 5 [default = false]; optional NetState state = 6; optional bool debug_info = 7 [default = false]; repeated LayerParameter layer = 100; // ID 100 so layers are printed last. }

VMware使用

少于 1 分钟阅读

一、如何扩展磁盘容量 一、如何扩展磁盘容量 在虚拟机系统下电后,选择编辑虚拟机设置->硬盘->扩展 启动虚拟机系统后执行sudo gparted,然后进行配置 1)linux-swap配置为swap off,然后delete 2)extended区域delete 3)ext4区域resize,预留4GB空间 4)unallocated区域,new->Extended Partition,然后再new->linux-swap 5)选√ 6)linux-swap区域选为swap on,然后记录下linux-swap区域的uuid sudo gedit /etc/fstab,替换swap的uuid 执行sudo swapoff -a,sudo swapon -a 执行reboot,重启系统

序列化之FlatBuffers

7 分钟阅读

一、基本说明 一、基本说明 源码:FlatBuffers 指南:FlatBuffers Programmer’s Guide 结构定义文件为.fbs,注释使用//,可以使用include "my.fbs"嵌套包含文件 可以理解为轻量级的protobuf,不会依赖library,但是编码会复杂一些 FlatBuffers的特点是先构造成员,再构造父结点;与protobuf相反

tensorflow的模型设计

3 分钟阅读

一、简单模型设计 一、简单模型设计 如下模型( 参见:神经网络反向推导 )

tensorflow的基础使用

18 分钟阅读

一、图 graph 一、图 graph tensorflow是基于graph的并行计算架构。graph是静态的,构建gragh并不会运行。需要启动一个session,运行graph。比如a=(b+c)*(c+2) 的graph如下:(其中b+c 和 c+2是并行的)

Dockerfile的使用

6 分钟阅读

指令说明 FROM 指令说明 FROM 制定所创建镜像的基础镜像,如果本地不存在,则默认会去Docker Hub下载指定镜像。格式为FROM<image>,或FROM<image>:<tag>,或FROM<image>@<digest>。 注意:任何Dockerfile中的第一条指令必须为FROM指令,并且,如果在同一个Dockerfile中创建多个镜像,可以使用多个FROM指令(每个镜像一次)。比如: FROM centos FROM centos:latest

docker的使用

8 分钟阅读

一、安装和配置 一、安装和配置 安装docker sudo apt-get install docker-io 配置用户组 sudo usermod -aG docker USER_NAME :避免每次使用特权身份,重新登录生效 查看docker信息 docker info 启动和关闭docker服务 sudo service docker restart : 重启docker服务 sudo service docker stop : 关闭docker服务

caffe如何使用训练好的模型

7 分钟阅读

一、需要的文件 一、需要的文件 经过caffe训练后,通常需要使用4种文件: 模型配置文件,比如lenet.prototxt,内容类似如下: name: "LeNet" layer { name: "data" type: "Input" top: "data" input_param { shape: { dim: 64 dim: 1 dim: 28 dim: 28 } } } layer { name: "conv1" type: "Convolution" bottom: "data" top: "conv1" ...... 注意它与lenet_train.prototxt的区别,主要是输入替换,和weight_filler和bias_filler删除等 模型文件,比如lenet_10000.caffemodel 均值文件,比如mean.binaryproto 标签文件,比如name.labels,内容如下: thing matter object atmospheric phenomenon body part body of water head hair ......

caffe如何解析数据库

9 分钟阅读

一、convert_imageset 一、convert_imageset 使用caffe中的convert_imageset工具可以将原始图片转换成LevelDB或者Lmdb格式。转换方法如下: $ convert_imageset [FLAGS] ROOTFOLDER/ LISTFILE DB_NAME

caffe的基础使用

6 分钟阅读

一、环境搭建 1、安装依赖库 一、环境搭建 1、安装依赖库 $ sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler $ sudo apt-get install --no-install-recommends libboost-all-dev $ sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev $ sudo apt-get install libatlas-base-dev $ sudo apt-get install python-dev

序列化之protobuf

7 分钟阅读

一、基本说明 一、基本说明 源码:protobuf 指南:Protocol Buffer Basics: C++ 结构定义文件为.proto,可以使用import包含另一个.proto文件,注释使用// 配置文件为.prototxt, 根据.proto的结构配置数据信息

Linux常用命令

5 分钟阅读

快捷键 快捷键 在命令行下已经输入一串命令下的快捷操作: ctrl+c: 中断输入,另起一行 ctrl+u: 删除光标以前的字符 ctrl+k: 删除光标后以后的字符 ctrl+a: 移动光标至头部 ctrl+e: 移动光标至尾部 ctrl+l: 清屏 ctrl+r: 搜索历史命令

Linux Device Driver

10 分钟阅读

设备驱动模型 设备驱动模型 由描述设备相关的结构与描述驱动相关的结构组成。如usb总线有usb_device和usb_driver,dts描述设备有platform_device和platform_driver 通常device由总线或者kernel生成,然后由相应的driver与其绑定 设备抽象结构体strcut device(include/linux/device.h),具体设备都会包含一个struct device成员,如usb_device定义如下: // include\linux\usb.h struct usb_device { int devnum; ...... struct device dev; ...... 驱动抽象结构体struct device_driver(include/linux/device.h) class用于对设备进行分类管理

学习整理:uboot its文件

3 分钟阅读

ITS: image tree source,使用mkimage和dtc工具可以将.its和对应的image文件打包成itb文件。该文件可以下载到memory中,用bootm执行。 参考链接: https://github.com/wowotechX/u-boot/tree/x_integration/doc/uImage.FIT http://www.wowotech.net/u-boot/fit_image_overview.html

学习整理:ARM Linux设备树(DTS)

2 分钟阅读

DTS: Device Tree Source,以文本形式描述DeviceTree 通常所在目录kernel/arch/arm/boot/dts dtc工具将test.dts文件,生成test.dtb文件;fdtdump工具可以将test.dtb文件,解析成test.dts文件 参考链接:https://elinux.org/Device_Tree_Usage

学习整理:arm-trusted-firmware

10 分钟阅读

资源说明 本文以AArch64为准,内容以翻译原文为主。 资源说明 源码地址:arm-trusted-firmware 使用说明:user-guide 框架流程:firmware-design

Ubuntu下的文件共享(tftp/nfs)

2 分钟阅读

tftp 服务器端 tftp 服务器端 sudo apt-get install tftpd-hpa,安装tftpd-hpa sudo vim /etc/default/tftpd-hpa,配置tftp目录 # /etc/default/tftpd-hpa TFTP_USERNAME="tftp" TFTP_ADDRESS=":69" TFTP_DIRECTORY="tftp根目录" #服务器目录,需要设置权限为777,chomd 777 TFTP_OPTIONS="-l -c -s" # l表示listen模式,c可以创建新文件,s不需要指定路径 sudo service tftpd-hpa restart ,启动tftp服务 service tftpd-hpa status,查看服务状态

Linux Driver的安装和卸载

3 分钟阅读

ko文件的安装与卸载 安装 ko文件的安装与卸载 安装 # 将ko文件拷贝到目录 target_folder="/lib/modules/$(uname -r)/kernel/drivers/test" mkdir -p -m 755 $target_folder cp test.ko $target_folder -f # 更新和加载模块 depmod -a modprobe test # 设备Driver安装完成后会更新/lib/modules/$(uname -r)/module.alias文件, # 该文件保证设备与driver的安装关系,当系统重启后,如果存在该设备,driver则被自动加载

概率论基础

4 分钟阅读

基本概念 基本概念 样本空间:随机试验E的所有可能结果组成的集合,记为S 样本点:样本空间的元素,即随机试验E的每个结果 随机事件:样本空间的子集,简称事件 不可能事件:每次试验都不会发生的事件,记为∅ 必然事件:S是自身的子集,必然发生

readelf与objdump

14 分钟阅读

readelf 查看头信息(-h) readelf 查看头信息(-h) $ readelf -h mytest ELF Header: Magic: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 Class: ELF64 Data: 2's complement, little endian Version: 1 (current) OS/ABI: UNIX - System V ABI Version: 0 Type: EXEC (Executable file) Machine: Advanced Micro Devices X86-64 Version: 0x1 Entry point address: 0x400790 Start of program headers: 64 (bytes into file) ......

Bash shell脚本

13 分钟阅读

通用说明 通用说明 注释用# 标头用#!表明解释器 #!/bin/bash echo "Hello world" 用;号可以将多行语句写一行,可以不用空格 a=10;b=20;c=30 内部执行命令如下: `expr 1 + 1` #数学运算 $(expr 1 + 1) #同上

微积分基础

9 分钟阅读

导数 导数定义 导数 导数定义 [f’(x) = \lim_{\Delta{x}->0}\frac{f(x+\Delta{x})- f(x)}{\Delta{x}} = \lim_{x->x_0}\frac{f(x)-f(x_0)}{x-x_0}] [f’(x)也常表示为:\frac{\alpha y}{\alpha x} 或者 \frac{\Delta y}{\Delta x} 或者 \frac{d y}{d x}] 意义: 可以代表曲线y=f(x)在某点的切线斜率 可以反映y在x的某点上的变化率 可以表示运动曲线s=f(t)在t的某点上的速率

VSCODE C/C++配置

4 分钟阅读

常用操作 常用操作 F1: 选择和执行命令 CTRL+SHIFT+I: 格式化排版代码 CTRL+P: 搜索文件名 CTRL+S: 保存修改 CTRL+鼠标左键: 跳转到定义处 CTRL+ALT+减号: 返回上一处 文件单击:预览,注意标签名是斜体字;预览会覆盖上一次预览 文件双击:打开,注意标签名是正体字;会从新标签打开

CMAKE的使用

5 分钟阅读

最简单方式 最简单方式 新建hello.cpp源码文件,如下 #include<stdio.h> int main() { printf("hello world\n"); } 新建CMakeLists.txt,内容如下 add_executable(hello hello.cpp) 执行mkdir build && cd build && cmake .. 执行make,生成hello

gcc参数选项整理

3 分钟阅读

参数 -o 输出文件名 -E 输出预处理文件 参数 -o 输出文件名 gcc test.c -o test 将gcc的处理结果输出到test文件中。本例中输出可执行文件。 -E 输出预处理文件 gcc -E test.c -o test.i 将预处理输出到test.i文件中。在大型项目中,可能各个宏的值不容易从代码里面直接看出来,通过-E参数,可以全部展开。

返回顶部 ↑

2017

Ruby元编程

11 分钟阅读

eval函数 eval函数 该函数将字符串解析成代码,如下示例 传入变量字符串,解析成变量 test = "abc" puts eval("test") #打印abc puts eval("0x12") #打印18

Linux下磁盘分析

20 分钟阅读

一、基本介绍 磁盘信息查看 一、基本介绍 磁盘信息查看 df -h:磁盘空间信息 [root@localhost ~]# df -h 文件系统 容量 已用 可用 已用% 挂载点 /dev/mapper/rhel-root 17G 7.7G 9.2G 46% / devtmpfs 896M 0 896M 0% /dev tmpfs 912M 144K 912M 1% /dev/shm tmpfs 912M 17M 895M 2% /run tmpfs 912M 0 912M 0% /sys/fs/cgroup /dev/sda2 1014M 165M 850M 17% /boot /dev/sda1 200M 9.5M 191M 5% /boot/efi tmpfs 183M 20K 183M 1% /run/user/0

硬盘SMART检测参数详解[转]

14 分钟阅读

一、SMART概述 一、SMART概述 要说Linux用户最不愿意看到的事情,莫过于在毫无警告的情况下发现硬盘崩溃了。诸如RAID的备份和存储技术可以在任何时候帮用户恢复数据,但为预防硬件崩溃造成数据丢失所花费的代价却是相当可观的,特别是在用户从来没有提前考虑过在这些情况下的应对措施时。 硬盘的故障一般分为两种:可预测的(predictable)和不可预测的(unpredictable)。后者偶而会发生,也没有办法去预防它,例如芯片突然失效,机械撞击等。但像电机轴承磨损、盘片磁介质性能下降等都属于可预测的情况,可以在在几天甚至几星期前就发现这种不正常的现象。 对于可预测的情况,如果能通过磁盘监控技术,通过测量硬盘的几个重要的安全参数和评估他们的情况,然后由监控软件得出两种结果:“硬盘安全”或“不久后会发生故障”。那么在发生故障前,至少有足够的时间让使用者把重要资料转移到其它储存设备上。 最早期的硬盘监控技术起源于1992年,IBM在AS/400计算机的IBM 0662 SCSI 2代硬盘驱动器中使用了后来被命名为Predictive Failure Analysis(故障预警分析技术)的监控技术,它是通过在固件中测量几个重要的硬盘安全参数和评估他们的情况,然后由监控软件得出两种结果:“硬盘安全”或“不久后会发生故障”。

字符编码转换iconv

8 分钟阅读

iconv命令可以将一种已知的字符集文件转换成另一种已知的字符集文件。它的作用是在多种国际编码格式之间进行文本内码的转换。iconv基于GPL公开源代码,是GNU项目的一部分。 官网地址

Git Hook实践

2 分钟阅读

钩子脚本路径 钩子脚本路径 钩子存放路径:.git/hooks/ 该路径会有如下文件: post-update.sample pre-rebase.sample pre-applypatch.sample applypatch-msg.sample pre-commit.sample prepare-commit-msg.sample commit-msg.sample pre-push.sample pre-receive.sample update.sample 以上是钩子脚本的样板,可以用作参照,尤其传入参数。 将.sample去掉后,便是对应的钩子脚本。

配置Linux的yum源(RHEL7.3 x64为例)

1 分钟阅读

1. 下载yum的安装包 主要以RHEL7.3 64位为例,源是163源。 1. 下载yum的安装包 登录http://mirrors.163.com/centos/,找到对应的版本yum的Packages文件并下载下来,比如如下命令获取 wget http://mirrors.163.com/centos/7.3.1611/os/x86_64/Packages/yum-3.4.3-150.el7.centos.noarch.rpm wget http://mirrors.163.com/centos/7.3.1611/os/x86_64/Packages/yum-plugin-fastestmirror-1.1.31-40.el7.noarch.rpm wget http://mirrors.163.com/centos/7.3.1611/os/x86_64/Packages/yum-metadata-parser-1.1.4-10.el7.x86_64.rpm

配置ubuntu的源

5 分钟阅读

1. 源地址 清华源 以ubuntu 16.04为例 1. 源地址 清华源 # deb cdrom:[Ubuntu 16.04 LTS _Xenial Xerus_ - Release amd64 (20160420.1)]/ xenial main restricted deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial main restricted deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates main restricted deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial universe deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates universe deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial multiverse deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates multiverse deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security main restricted deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security universe deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security multiverse

Linux Yum命令整理

1 分钟阅读

查找和显示 yum info package1 显示安装包信息package1 yum list 显示所有已经安装和可以安装的程序包 yum list package1 显示指定程序包安装情况package1 yum groupinfo group1 显示程序组group1信息 yum search string 根据关键字string查找安装包 yum deplist package1 查看程序package1依赖情况

Sed的使用

2 分钟阅读

选项说明 选项说明 -n : 使用安静模式,只有被处理的行才会显示出来,通常与p一起用 -i : 将修改回写到文件中 -r : 支持扩展的正则表达式,使用正则时最好带上,并且对表达式用’’

返回顶部 ↑

2015

Swift学习之高级运算符

4 分钟阅读

语法 语法 public class SomePublicClass {} internal class SomeInternalClass {} private class SomePrivateClass {} public var somePublicVariable = 0 internal let someInternalConstant = 0 private func somePrivateFunction() {} public class SomePublicClass { // 显式的 public 类 public var somePublicProperty = 0 // 显式的 public 类成员 var someInternalProperty = 0 // 隐式的 internal 类成员 private func somePrivateMethod() {} // 显式的 private 类成员 } class SomeInternalClass { // 隐式的 internal 类 var someInternalProperty = 0 // 隐式的 internal 类成员 private func somePrivateMethod() {} // 显式的 private 类成员 } private class SomePrivateClass { // 显式的 private 类 var somePrivateProperty = 0 // 隐式的 private 类成员 func somePrivateMethod() {} // 隐式的 private 类成员 }

Swift学习之访问控制

4 分钟阅读

语法 语法 public class SomePublicClass {} internal class SomeInternalClass {} private class SomePrivateClass {} public var somePublicVariable = 0 internal let someInternalConstant = 0 private func somePrivateFunction() {} public class SomePublicClass { // 显式的 public 类 public var somePublicProperty = 0 // 显式的 public 类成员 var someInternalProperty = 0 // 隐式的 internal 类成员 private func somePrivateMethod() {} // 显式的 private 类成员 } class SomeInternalClass { // 隐式的 internal 类 var someInternalProperty = 0 // 隐式的 internal 类成员 private func somePrivateMethod() {} // 显式的 private 类成员 } private class SomePrivateClass { // 显式的 private 类 var somePrivateProperty = 0 // 隐式的 private 类成员 func somePrivateMethod() {} // 隐式的 private 类成员 }

Swift学习之泛型

5 分钟阅读

定义<T> 泛型函数 定义<T> 通过<T>表示通用类型,避免重复代码,可以按照C++泛型来理解。其中可以是T,或任何大写开头的命名。 泛型函数 语法参考下例: func swapTwoValues<T>(inout a: T, inout _ b: T) { let temporaryA = a a = b b = temporaryA } var someInt = 3 var anotherInt = 107 swapTwoValues(&someInt, &anotherInt) var someString = "hello" var anotherString = "world" swapTwoValues(&someString, &anotherString)

Swift学习之协议protocol

5 分钟阅读

定义 定义 定义类、结构体、枚举类型必须实现的属性或方法,语法如下: protocol SomeProtocol { // 协议内容 } //遵从多种协议 struct SomeStructure: FirstProtocol, AnotherProtocol { // 结构体内容 } //类可以继承父类且遵从多种协议 class SomeClass: SomeSuperClass, FirstProtocol{ // 类的内容 }

Swift学习之扩展extension

6 分钟阅读

定义 定义 向已有类、结构体、枚举类型、协议类型添加新功能,语法如下: extension SomeType { // 加到SomeType的新功能 }

Swift学习之类的构造和析构

13 分钟阅读

构造函数init 基本可以按照C++理解 构造函数init class、struct、enum都可以有构造函数 基本可以按照C++理解 init可以有多个参数,或无参数; init() { // 在此处执⾏构造过程 } 举例如下: struct Fahrenheit { var temperature: Double init() { temperature = 32.0 } } var f = Fahrenheit()

Swift学习之类与结构体

12 分钟阅读

定义 定义 基本可以按照C++理解 //成员必须有默认值,要么直接赋值,要么构建函数中赋初值; //常量成员只能初始化一次,同上 struct Resolution { var width = 0 var height = 0 } class VideoMode { var resolution = Resolution() var interlaced = false var frameRate = 0.0 var name: String? } let someResolution = Resolution() let someVideoMode = VideoMode() print("The width of someResolution is \(someResolution.width)") print("The width of someVideoMode is \(someVideoMode.resolution.width)")

Swift学习之细小规则整理(未完)

少于 1 分钟阅读

大小写 大小写 类型的定义用UpperCamelCase,其余全用lowerCamelCase。 类型定义包括: 基础类型如Int/String/Set等等 enum定义的枚举类型,包括其成员(?为何成员也看做是类型) enum CompassPoint {case North,South,East,West} struct和class定义的结构体和类 class SomeClass {} struct SomeStructure {}

Swift学习之枚举

6 分钟阅读

定义与调用 定义与调用 枚举概念类似C语言,语法不同,而且可以不用定义类型(C语言为int型),举例如下: enum CompassPoint { case North case South case East case West }

Swift学习之函数与闭包

11 分钟阅读

函数的定义 函数的定义 关键字func,以sayHello(_:)函数为例,注意参数和返回值的写法 func sayHello(personName: String) -> String { let greeting = "Hello, " + personName + "!" return greeting }

Swift学习之控制语句

6 分钟阅读

for-in循环 for-in循环 1.for-in循环可以遍历的对象:区间、数组(Array)、字典(Dictionary)、集合(Set) for index in 1...5 { println("\(index) times 5 is \(index * 5)") }

Swift学习之基础类型

6 分钟阅读

整型-Int 整型-Int Int与UInt,其中Int是默认且推荐类型,具体长度根据编译器决定 Int8与UInt8,Int16与UInt16,Int32与UInt32,Int64与UInt64 17 //类型为Int UInt(17) //类型为UInt 0b10001 //二进制,类型为Int 0o21 //八进制,类型为Int 0x11 //十六进制,类型为Int Int8.max //Int8类型属性max,最大值127 Int8.min //Int8类型属性min,最小值-128

Swift学习之变量与常量的定义

1 分钟阅读

变量常量定义 变量常量定义 var today:Int = 5 let week:Int = 7 1.var是变量关键字,today是变量名,Int是变量类型,5是初始值。 2.let是常量关键字,所以week初始化后不能修改 3.左值或者右值可以推导时类型可以省略,该句等价于var today = 5和let week = 7 4.如果一条语句结尾换行则不用带上分号 5.必须赋初值

GDB使用整理

1 分钟阅读

一、使用方法 一、使用方法 gcc编译带上-g选项,如gcc -g test.c -o test 跟踪调试,如gdb test

23种设计模式回顾整理(未完)

1 分钟阅读

基本原则 基本原则 开闭原则:对扩展开发,对修改关闭。将变化部分抽象。 里氏代换原则:类可行则子类也可行。继承复用。 合成复用原则:少用继承,多用合成。 依赖倒转原则:高层模块不依赖低层模块,细节依赖抽象。

Ruby学习整理

8 分钟阅读

执行方式 执行方式 单行执行:ruby -e 'print "hello,world"' 交互方式:irb;使用exit退出 文件方式:ruby test.rb

Ruby基本数据类型

6 分钟阅读

数字 Ruby数据类型有:字符串、数字、数组、区间、散列、正则表达式。 数字 数字 描述 1_345 1345 1e3 1000.0 1.0e3 1000.0 012 10(八进制) 0x12 18(十六进制) 0b11 3(二进制) 2.to_s "2"

Git学习整理

15 分钟阅读

环境配置 环境配置 配置邮箱和用户名: git config --global user.email "you@example.com" git config --global user.name "Your Name" (查看配置:git config --global -l)

读《如何阅读一本书》

少于 1 分钟阅读

很久以前就读过 《如何阅读一本书》,当时读完就觉得真是受益匪浅。由于内容很多,为了能够完全掌握书中的内容,也为了以后不会忘书中的教诲,专门将全书的主要内容画了一个框架图,总结了下来。每每读一本书时,便先温习一遍这个框架图。久而久之,自我感觉对书籍的掌控能力提升了。

返回顶部 ↑

2010

UEFI Application入门

4 分钟阅读

本文最初是2010-11-18发表于BiosRen论坛, 现在挪到本人自己的域名博客 本文说明:关于UEFI Application编写及测试,论坛里的很多帖子及其回复都有说过,过程并不复杂,但是如果不知道的话可能也会像我一样折腾很久很久的时间。自然很多弟兄都已经轻车熟路了,写本文希望对不知道的弟兄做一个引导作用。我觉得先了解Application,再来学习UEFI是很有帮助的,可以写写小程序来亲身体会像Service或者Protocol的运作。小弟我还是一如既往的唠唠叨叨的写的很长,希望已经把关键地方都说明白了。 一.环境配置 1.VS2008 为避免一些奇怪的问题,切记完整安装,我的是安装的默认路径。

UEFI Handle的来龙去脉

4 分钟阅读

一、一些概念的理解 本文最初是2010-11-18发表于BiosRen论坛, 现在挪到本人自己的域名博客 本文说明:本人刚学习UEFI不久,写该文一是为了将学到的东西做一个规范化的总结,二是为了给初学UEFI的兄弟起到借鉴作用。同样地,错误的地方肯定很多,还望能得到各位弟兄指正。要理解本文,您至少应该是读过UEFI Spec,不然请先阅读UEFI Spec。 一、一些概念的理解 UEFI中会有很多抽象概念,像service、protocol、handle等等,如果将这些抽象的概念放到实际的代码中理解的话,会有更清晰地认识,有了清晰的认识之后再把它们作为抽象来理解,就遂心应手的多了。

地址空间布局总结

1 分钟阅读

本文最初是2010-11-09发表于BiosRen论坛, 现在挪到本人自己的域名博客 七月注册本论坛以来,从论坛里受益颇多。非常感谢biosren。本来没有什么技术是难学的,只是缺乏好的学习途径,biosren就是一条学习bios的良好途径。 另外我非常感谢LightSeed的“肢解BIOS 系列”,它为像我这样的新人提供了循序渐进的道路。我很希望自己也能够起到这样的作用。 本文说明:本人也只是刚入门,写该文一方面为了总结刚学到的知识,另一方面希望能够为其他兄弟们起到借鉴作用。大部分内容都是从spec中获取的,但spec上有些没有的内容就是凭借自己的经验和猜测了,所以错误的地方肯定不在少数。若有发现,请您指正。要阅读本文,您可能需要一份intel北桥的datasheet或者spec,基本上随便从intel官网上下载一份北桥datasheet就行了,比如说这份Intel(R) 4 Series Chipset Family Datasheet。要验证一些内容,您可能需要用到RW软件。

SMBus读取从设备数据总结

3 分钟阅读

本文最初是2010-11-18发表于BiosRen论坛,现在挪到本人自己的域名博客 说明:本人刚入门,写该文只是为了总结刚学到的知识。全部内容都是经过实践得出来的。但实践上的结果并不能反映理论上的正确。所以若有不对的地方还请指正。另外本文也借鉴了LightSeed前辈(http://www.biosren.com/thread-1075-1-1.html)的相关文章。 要阅读本文,您可能需要ICH9 spec。要实践本文,您需要纯DOS环境,RU软件或者ADU软件。 本打算贴上图片说明问题,但是不知道怎么贴图片,所以就都改用文字描述了。

返回顶部 ↑

2009

MFC 自定义简单的工具栏类

2 分钟阅读

本文最初是2009-04-28发表于CSDN,当时正在用MFC乐此不疲地写各种Windows的小应用。如今出来工作很多年了,几乎很少用到MFC的东西,而且在移动互联网时代的到来,MFC也跟着落伍了。再来回看当时做的事情,真是微不足道,人果真要把时间花在那些亘久不变的事物上。

返回顶部 ↑

2000

返回顶部 ↑