随笔分类 - CPU指令集
摘要:指令集中的函数有要求内存对齐的版本,如 _mm256_stream_si256 也有不要求内存对齐的版本,如 _mm256_storeu_si256 内存对齐的版本效率更高,若使用该版本,申请空间必须内存对齐。new不保证内存对齐,推荐用 _aligned_malloc 和 _aligned_fre
阅读全文
摘要:#include <intrin.h> //for sse #include <string.h> //for memcpy enum BayerFormat { bayerRG, bayerGR, bayerBG, bayerGB }; enum Mirror { mirrorNo, //不镜像
阅读全文
摘要:阈值分割,得到二值图,高于阈值的为255 __m256i 阈值= _mm256_set1_epi8(阈值); __m256i 图像1= _mm256_subs_epu8(原图像, 阈值); //低于阈值的都为0 __m256i 二值图 = _mm256_cmpeq_epi8(图像1, _mm256_
阅读全文
摘要:需求1:在高帧率场景下,一般拿到的是bayer格式数据。图像处理时,一般会先插值成rgb,再拆分为单通道。如果可以直接bayer中抽出r、g、b,那效率将大大提升。 需求2:抽取的单通道直接是镜像的 注意:抽取后r、g、b尺寸是原来的一半,没有做插值(插值只会让数据量变大,并没有引入有效信息) 效果
阅读全文
摘要:需求:在高帧率场景下,一般拿到的是bayer格式数据。图像处理时,一般会先插值成rgb,再拆分为单通道。如果可以直接bayer中抽出r、g、b,那效率将大大提升。 注意:抽取后r、g、b尺寸是原来的一半,没有做插值(插值只会让数据量变大,并没有引入有效信息) 效果:CPU指令集优化后,速度是传统算法
阅读全文
摘要:在看内存中数据时,VS2015打断点碰到了数据读入不正确的问题 uint8_t uint8_array[32] = { 00, 07, 04, 04, 02, 03, 06, 02, 02, 05, 04, 02, 06, 05, 04, 03, 00, 07, 04, 05, 00, 02, 00
阅读全文
摘要:为抽取bayer格式图像的r\g\b做准备,_mm256_shuffle_epi8不能按_mm_shuffle_epi8理解,前者是前后一半分开处理,后者是全部一起处理。 #include <iostream> #include <intrin.h> int main() { uint8_t uin
阅读全文
摘要:加法、减法和乘法等算术运算,位运算指令、比较指令、加载存储指令、类型转换指令等 位运算指令,【算法随记七】巧用SIMD指令实现急速的字节流按位反转算法。_wx61234e53ee589的技术博客_51CTO博客 shuffle系列指令,_mm_shuffle_epi8-CSDN博客 permute系
阅读全文
摘要:每次偏移 int索引*scale 个字节,每次取4字节。注意int索引是倒序的,如__m128i vindex有4个int索引,先取最后一个索引。 举例: __m128i _mm_i32gather_epi32 (int const* base_addr, __m128i vindex, const
阅读全文
摘要:可以模仿其中源码,通过指令集封装出适合自己的函数。 Simd库是一个免费的开源图像处理和机器学习库,专为C和C++程序员设计。 它为图像处理提供了许多有用的高性能算法,例如:像素格式转换,图像缩放和过滤,从图像中提取统计信息,运动检测,对象检测(HAAR和LBP分类器级联)和分类,神经网络。 官网
阅读全文
摘要:C++使用CPU指令集,可以引入头文件 #include <intrin.h> 包含了所有指令集。 部分具体的指令集头文件如下: <xmmintrin.h> //包含SSE库 <emmintrin.h> //包含SSE2库 <pmmintrin.h> //包含SSE3库 CPU指令集发展从MMX,到
阅读全文
摘要:Intel查看cpu型号支持的指令集 第六代智能英特尔® 酷睿™ i7 处理器 (intel.com) 运算函数 Intel® Intrinsics Guide
阅读全文