2021年10月31日
GCC 支持在C/C++代码中嵌入汇编代码,这些汇编代码被称作GCC Inline ASM——GCC内联汇编。这是一个非常有用的功能,有利于我们将一些C/C++语法无法表达指令直接潜入C/C++代码中,另外也允许我们直接写 C/C++代码中使用汇编编写简洁高效的代码。
1.基本内联汇编 GCC中基本的内联汇编非常易懂,我们先来看两个简单的例子:
__asm__("movl %esp,%eax"); // 看起来很熟悉吧! 或者是
__asm__("movl $1,%eax // SYS_exitxor %ebx,%ebxint $0x80"); 或
__asm__("movl $1,%eax/r/t" /"xor %ebx,%ebx/r/t" /"int $0x80" /); 2.基本内联汇编的格式 __asm__ __volatile__("Instruction List"); 1、asm __asm__是GCC关键字asm的宏定义:
#define __asm__ asm __asm__或asm用来声明一个内联汇编表达式,所以任何一个内联汇编表达式都是以它开头的,是必不可少的。
2、Instruction List Instruction List是汇编指令序列。它可以是空的,比如:__asm__ __volatile__(""); 或 __asm__ (""); 都是完全合法的内联汇编表达式,只不过这两条语句没有什么意义。
但并非所有Instruction List为空的内联汇编表达式都是没有意义的,比如: __asm__ ("":::"memory"); 就非常有意义,它向GCC声明:“我对内存作了改动”,GCC在编译的时候,会将此因素考虑进去。
我们看一看下面这个例子:
$ cat example1.c int main(int __argc, char* __argv[]) { int* __p = (int*)__argc; (*__p) = 9999; //__asm__("":::"memory"); if ((*__p) == 9999) { return 5; } return (*__p); } 在这段代码中,那条内联汇编是被注释掉的。在这条内联汇编之前,内存指针__p所指向的内存被赋值为9999,随即在内联汇编之后,一条if语句判断__p 所指向的内存与9999是否相等。很明显,它们是相等的。GCC在优化编译的时候能够很聪明的发现这一点。我们使用下面的命令行对其进行编译:……
阅读全文
2020年9月3日
六步法 import train, test 网络结构 model=tf.keras.models.Sequential # 搭建网络结构 class MyModel(Model) model = MyModel model.compile # 配置训练优化器,损失函数 model.fit # 输入特征,batch, epoch model.summary 网络结构 拉直层 tf.keras.layers.Flatten()
全连接层 tf.keras.layers.Dense(神经元个数, activation="激活函数", kernel_regularizer="正则化")
卷积层 tf.keras.layers.Conv2D(filters=卷积核个数, kernel_size=卷积核尺寸, strides=卷积步长, padding="valid" or "same")
LSTM层 tf.keras.layers.LSTM()
训练方法 model.compile(optimizer=优化器, loss=损失函数, metrics=["准确率"])
Optimizer sgd adagrad adadelta adam loss Metrics 训练过程 model.fit(训练集的输入特征, 训练集的标签, batch_size=, epochs=, validation_data=(测试集的输入特征, 测试集的标签), validation_split=从训练集划分多少比例分给测试集, validation_freq=多少次epoch测试一次)
……
阅读全文
2020年9月3日
CNN 输入特征图的深度(channel数),决定了当前层卷积核的深度; 当前层卷积核的个数,决定了当前层输出特征图的深度; tf.keras.layers.Conv2D(
kernel_size=卷积核尺寸,
strides=滑动补偿,
padding="same" or "valid",
activation="relu" or "sigmoid" or "tanh" or "softmax",
input_shape=(高, 宽, 通道数)
)
批标准化(Batch Normalization, BN) 池化 池化用于减少特征数据量,最大值池化可提取图片纹理,均值池化可保留背景特征。
舍弃 Dropout 训练时,一定概率随机舍弃神经元。网络使用时,恢复神经元。
卷积神经网络结构 卷积:特征提取器,CBAPD(Convolutinoal, BN, Activation, Pooling, Dropout)……
阅读全文
2020年3月1日
Weak Reference WeakHashMap ……
阅读全文
2020年2月16日
这货不支持proxy,也是醉了,这让人咋用啊。……
阅读全文
2020年2月16日
Google推出的将机器学习/深度学习进行产品化的框架,主要是其中类似tensorflow中图编辑模式。但我们只是看中了人家训练好的手部跟踪的demo。
使用bazel编译系统,但bazel这坑货又不支持proxy。那就需要搞明白所有的编译规则,然后把包挨个离线下下来,然后使用local_repo的方式进行编译。……
阅读全文
2020年2月1日
x86寄存器分类 8个通用寄存器 均为32位。
EAX
累加寄存器(Accumulator Register)。
EBX
基地址寄存器(Base Register)。
ECX
计数寄存器(Count Register)。
EDX
数据寄存器(Data Register)。
ESI
EDI
源/目标索引寄存器(Source/Destination Index Register)
ESP
基指针寄存器(Base Pointer Register)
EBP
堆栈指针寄存器(Stack Pointer Register)
6个段寄存器 段寄存器均为16位。
CS
指向代码段的段选择符,与EIP寄存器联合构成指令地址。
DS
ES
FS
GS
指向数据段。
SS
指向栈段的段选择符。
5个控制寄存器 均为32位。……
阅读全文
2020年1月27日
dumpsys dumpsys input 获取linux事件 getevent -lr ……
阅读全文
2020年1月10日
dumpsys dumpsys input 获取linux事件 getevent -lr ……
阅读全文