linux板端如何查找其他用户并踢掉
fuser 命令
fuser 命令用于查找和操作正在使用指定文件或文件系统的进程。它提供了一种查找和终止进程的方式,以释放文件或文件系统资源。
fuser [options] <file or directory>
其中,options 是可选的命令选项,<file or directory> 是要查询的文件或目录的路径。
一些常用的 fuser 命令选项包括:
-k:终止正在使用文件或目录的进程。
-m:指定文件系统类型,仅查找指定类型的文件系统上的进程。
-n <namespace>:指定命名空间,仅查找指定命名空间中的进程。
-v:显示详细的进程信息。
以下是一些示例用法:
查找正在使用文件 /...
SIMD 优化
引入
接触到cv:atan2 的优化主要是SIMD,探索下SIMD优化的
SIMD介绍
SIMD 全称呼:
Single Instruction Multiple Data
单指令多数据流,可以使用一条指令同时完成多个数据的运算操作。传统的指令架构是SISD就是单指令单数据流,每条指令只能对一个数据执行操作
TODO
参考
https://www.cs.virginia.edu/~cr4bd/3330/F2018/simdref.html
https://leimao.github.io/blog/SSE-AVX-SIMD-Vectorization-Intrinsics/
https://zhuanlan.zhihu.com/p/583326378
c++ new T 和 new T() 的区别
主要区别就是 是否调用构造函数
new T:这种语法用于创建一个类型为 的对象,但不会调用默认构造函数进行初始化。对象的内存空间会被分配,但对象的成员变量不会被初始化,它们的值将是未定义的。你需要手动调用构造函数来初始化对象。
new T():这种语法用于创建一个类型为 的对象,并调用默认构造函数进行初始化。对象的内存空间会被分配,并且对象的成员变量会被默认构造函数初始化为其类型的默认值。
如果T是一个自定义类,它可能具有自己的默认构造函数和其他构造函数。如果你想确保对象的成员变量被正确初始化,可以使用 new T() 语法。但是,如果你想在创建对象后手动调用构造函数进行特定的初始化操作,可以使用 new T语法。
arm的prefetch和分支预测
prefetch
prefetch 可以把DDR内存取到cache中
分支预测
arm 自带分支预测
参考
https://zhuanlan.zhihu.com/p/22469702
https://zhuanlan.zhihu.com/p/22469702
https://wudaijun.com/2019/04/linux-perf/
arm neon指令集
arm neon 是什么
NEON是ARM架构中的一个SIMD引擎,全称为NEON Advanced SIMD,主要用于嵌入式设备中进行向量化计算,以提高计算性能。
NEON的主要特征和作用包括:
提供了128位的向量寄存器,支持并行计算。
支持多种整数和浮点数据类型,如8位/16位/32位/64位整数,以及32位和64位浮点数。
提供了丰富的指令集,可以进行向量加减乘除、逻辑、加载/存储等运算。
通过单指令多数据(SIMD)技术,可以同时处理多个数据,大大提升嵌入式设备的多媒体和信号处理能力。
可以与ARM的普通寄存器和指令无缝配合使用。
应用在图像处理、语音识别...
cpp17 新特性shared_mutex 读写锁
C++17引入了shared_mutex,可以实现读写锁
std::shared_mutex是C++17引入的一种共享互斥锁,它具有以下主要特征:
支持两种互斥的访问模式:独占(exclusive)和共享(shared)。
多个线程可以同时获得shared ownership,从而实现并发读。
但只能有一个线程可以获得exclusive ownership,从而对数据的修改是互斥的。
shared_mutex通过读写锁(shared_lock、unique_lock)进行访问控制。
std::shared_mutex适用于读多写少的场景,例如:
std::shared_mutex mutex;
// 写操作需要unique锁
void write_data() {
...
共计 188 篇文章,24 页。