主页

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的普通寄存器和指令无缝配合使用。 应用在图像处理、语音识别...

阅读更多

生产者消费者模型

简介 生产者消费者模型是一种多线程协调机制,用于解决多个线程间相互依赖的问题。其主要特征是: 有两个线程角色:生产者和消费者。 生产者仅执行产品的生产逻辑,消费者仅执行产品的消费逻辑。 生产者和消费者通过共享队列进行通信。 当队列为空时,消费者线程陷入等待;当队列为满时,生产者线程陷入等待。 实现生产者消费者模型的关键是处理队列的互斥访问和线程同步问题。一般的实现方式有: 使用 Condition 变量进行通知,配合 Mutex 锁保证互斥访问队列。 使用 Semaphore 信号量可以限制队列访问的线程数量。 使用 Monitor 对象封...

阅读更多

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() { ...

阅读更多

address saniter 的实现

引入 ASan是google提供的一个内存检测工具,(来自gpt3.5) ASan通过在编译时插入额外的代码来实现内存错误检测,并提供了相应的运行时库来捕获和报告错误。可以知道通过一下方式实现: 插桩:ASan使用编译器插桩技术,在编译时修改源代码,插入额外的代码。这些额外的代码用于跟踪内存分配、释放和访问操作,以及检测内存错误。 内存分配器:ASan使用自定义的内存分配器,用于跟踪分配的内存块,并在每个内存块之前和之后添加红区(redzone)。红区是一段未分配的内存,用于检测缓冲区溢出。 彩色标记:ASan使用彩色标记技术,将分配的内存块分为不同的颜色,并将颜色信息存储在内存块的元数据中。这样,在访问内存时,ASan可以根...

阅读更多