C/C++编程
billbliss
这个作者很懒,什么都没留下…
展开
-
terminal log同时输出
指令后面加2>&1 | tee ./log.txt原创 2021-09-07 11:42:00 · 273 阅读 · 0 评论 -
[c++11]多线程编程(六)——条件变量(Condition Variable)
互斥锁std::mutex是一种最常见的线程间同步的手段,但是在有些情况下不太高效。假设想实现一个简单的消费者生产者模型,一个线程往队列中放入数据,一个线程往队列中取数据,取数据前需要判断一下队列中确实有数据,由于这个队列是线程间共享的,所以,需要使用互斥锁进行保护,一个线程在往队列添加数据的时候,另一个线程不能取,反之亦然。用互斥锁实现如下:#include <iostre...转载 2020-01-12 17:33:28 · 252 阅读 · 0 评论 -
OTSU 全局自适应阈值分割 自动二分类
OTSU 是一个自动的阈值分割主要针对全局分割,是个自适应二分类问题记T为前景与背景的分割阈值,前景点数占图像比例为ω0,平均灰度为μ0;背景点数占图像比例为ω1,平均灰度为μ1,图像的总平均灰度为μ,前景和背景图象的方差g,则ω0=N0/ M×N (1)ω1=N1/ M×N (2)N0+N1=M×N (3)ω0+ω1=1 (4)μ=ω0*μ0+ω1*μ原创 2018-01-31 20:50:48 · 979 阅读 · 0 评论 -
随机蕨(Random Ferns)
最近在做人脸对齐的时候,看到famous的文章《Face Alignment by Explicit Shape Regression》使用了随机蕨来做人脸特征点的回归预测。先回想一下随机森林。随机森林是很多棵决策树组成的,每颗决策树使用部分的训练样本以及部分的训练特征,并在此特征空间内按信息熵增益从小到大(特征区别度从大到小)来进行分支。最后的分类结果由多棵决策树共同表决,给出lable。转载 2018-01-21 16:51:48 · 1242 阅读 · 0 评论 -
并行排序 Bitonic Sort(双调排序)
双调排序是data-independent的排序, 即比较顺序与数据无关的排序方法, 特别适合做并行计算,例如用GPU、fpga来计算。1、双调序列在了解双调排序算法之前,我们先来看看什么是双调序列。 (1)先单调递增后单调递减(或者先单调递减后单调递增)的序列。(比如1 2 3 6 5 4)(2)或者循环移位之后能满足(1)的序列。(比如4 5 6 2 1 2)转载 2018-01-02 20:28:14 · 3918 阅读 · 0 评论 -
super-linear 和 sub-linear
先说一下linear的形式y = a * x + b; 则x与y呈线性变化关系同理可以扩展至sub-linear亚线性y = a * x ^ 0.5 + bsuper-linear超线性y = a * x ^ 2 + b再具体一些:如果如果随着x的增大,y的增大速度减小(一阶导数),那x与y呈亚线性。如果如果随着x的增大,y的增大速度原创 2017-12-15 19:42:43 · 4737 阅读 · 0 评论 -
c99 restrict 关键字
restrict 关键字源于Fortran是在编译优化时提示编译器这个指针对应的内存是被唯一指定指针访问的说的简单点就写个例子吧顺便做成检测对restrict的支持的测试代码int f1(int *__restrict a, int *__restrict b){ *a = 1; *b = 2; return *a + *b;}int f2(int *a原创 2017-12-07 11:18:34 · 254 阅读 · 0 评论 -
整理:一些主流的编程竞赛网站对比
今天把各个主流的编程网站仔细对比了一下,下面从各个角度对比一下这些编程竞赛网站。分类和排名网站地址类别PRATRQF主办方备注TopCoder综合633,5864167转载 2017-11-15 14:35:16 · 5527 阅读 · 0 评论 -
并行加速实战 双边滤波器
之前分析了 二维中值滤波器的并行加速由于二维中值滤波器是控制密集型的滤波器(排序操作),所以SSE加速不太明显这次选用了计算密集型的双边滤波器针对双边滤波器在5*5的滤波核下的运算速度做优化和分析以下会有主区域、全图、主循环、完整(初始化+主循环)的概念1. 由于双边滤波的滤波半径为2+1,所以不能忽略图像四周边界的区域了。所以,以下会对主区原创 2017-11-03 18:09:49 · 2356 阅读 · 0 评论 -
SSE设计简介
SSE程序设计详细介绍包含的头文件:所有的SSE指令函数和__m128数据类型都在xmmintrin.h文件中定义:#include 因为程序中用到的SSE处理器指令是由编译器决定,所以它并没有相关的.lib库文件。数据分组(Data Alignment)由SSE指令处理的每一个浮点数数组必须把其中需要处理的数每16个字节(128位二进制)分为一组。一个静态数组(sta原创 2017-11-09 19:06:24 · 666 阅读 · 0 评论 -
SSE设计简介2
(1)MMX指令集首先要提到MMX指令集,MMX指令集是在SSE之前的,后来的SSE指令集覆盖了MMX指令集的内容,现在的大多数CPU也都支持SSE指令集了,SSE指令集之后还有SSE2、SSE3、SSE4等,最新的Intel处理器支持AVX指令集。(2)SIMDsingle instruction multiple data,单指令流多数据流,也就是说一次运算指令可以执行多个数据流,转载 2017-11-09 19:58:06 · 336 阅读 · 0 评论 -
SSE加速实战之 二阶范数计算
这里使用了纯C,SSE c++加速版本,SSE 汇编加速版本测试求二维向量二阶范数的计算:平方和求平方根结果使用纯C反而更快环境WIN10 + VS2013结果是arrayCalcCPP 0.040msarrayCalcSSE 0.212msarrayCalcSSEASM 0.225msvoid arrayCalcCPP(F32 *p1, F32 *p2,原创 2017-11-09 19:13:25 · 1232 阅读 · 0 评论 -
neon指令速查
以下是neon的指令速查包含部分的neon和SSE的对应关系#ifndef __ARM_NEON__#error You must enable NEON instructions (e.g. -mfloat-abi=softfp -mfpu=neon) to use arm_neon.h#endif/*(1)、正常指令:生成大小相同且类型通常与操作数向量相同的结果向量;转载 2017-11-09 11:54:00 · 8175 阅读 · 0 评论 -
并行加速实战 二维中值滤波器
中值滤波器使用了快速3x3中值滤波器 数据类型16U摘要我们以下将使用1. SIMD: SSE, AVX2. multiThread: openmp, std::thread3. SIMD + multiThread: AVX + openmp4. data: 分行并行加速,分块儿并行加速先给出宏定义的操作#define med_op(a,b,t原创 2017-09-29 09:59:44 · 2940 阅读 · 2 评论 -
SIMD头文件 SSE-AVX neon
根据SIMD头文件的层次关系如下#include //MMX #include //SSE(include mmintrin.h) #include //SSE2(include xmmintrin.h) #include //SSE3(include emmintrin.h) #include //SSSE3(include pmmintrin.h) #inclu原创 2017-09-28 19:00:57 · 1993 阅读 · 0 评论 -
并行编程平台及语言
OpenCL: cpu(thread, SMID) gpu dspCUDA: nvidia gpuOpenGL:gpuOpenMP:cpu(thread) using "pragma"OpenACC:cpu gpu using "pragma"C++ AMP:gpu (implemented on DirectX 11)OpenHMPP:hardware accelerat原创 2017-12-29 10:34:19 · 1650 阅读 · 0 评论 -
vscode 中增加文件后缀类型的支持: 设置cpp支持.cu等后缀
在settings.json中增加设置"files.associations": { "*.tpp": "cpp", "*.cu": "cpp", "*.tcu": "cpp" }原创 2018-09-19 16:36:46 · 20702 阅读 · 0 评论 -
vscode debug and edit 快捷键
General Command palette: F1 Debug Continue / Pause: F5 Step Over: F10 Step Into: F11 Step Out: Shift+F11 Restart: Ctrl+Shift+F5 Stop: Shift+F5Break pointInsert Breakpoint: F9 Conditi...原创 2018-09-19 11:28:39 · 3692 阅读 · 0 评论 -
vscode workspace from Cmake
从CMAKE自动生成工程并导入vscode主要的命令为CMake:Configure 相当于cmake-gui中做的configure和generate两个功能CMake:Build将生成的工程编译,相当于做makeCMake: Clean清理工程,相当于cmake cleanCMake: Run做单元测试 窗口下的几个属性是按键,分别可以调整:Se...原创 2018-09-18 22:28:50 · 1913 阅读 · 0 评论 -
vscode on ubuntu
下面我们来详细说一下,在Ubuntu上面的配置过程。打开 vscode之后,一. 先安装C/C++C插件Open VS Code. Click the Extensions View icon on the Sidebar. Search for c++. Click Install, then click Reload.二. 配置自动补全按F1或Ctrl+Shift...原创 2018-09-18 20:23:18 · 908 阅读 · 1 评论 -
Leetcode notes
// vectorvector<int> vec_s32(len); // alloc with lengthvector<int> vec_s32(len, 0); // alloc with length, valuevec_s32.push_back(10); // push_backsort(nums.begin(), nums....原创 2018-06-21 17:39:50 · 424 阅读 · 0 评论 -
ISP
ISP是Image Signal Processor的缩写,全称是影像处理器。在相机成像的整个环节中,它负责接收感光元件(Sensor)的原始信号数据,可以理解为整个相机拍照、录像的第一步处理流程,对图像质量起着非常重要的作用。 ISP的功能比较杂,基本上跟图像效果有关的它都有份。它内部包含多个图像算法处理模块,其中比较有代表性的是:扣暗电流(去掉底电流噪声),线性化(解决数据非线性问题),sh...转载 2018-03-22 09:57:15 · 1031 阅读 · 0 评论 -
VS下配置boost
访问boost官网http://www.boost.org/users/download/建议下载二进制版本,这样不用编译在页面中选择 Third Party DownloadsWindows Binaries链接地址 https://dl.bintray.com/boostorg/release/1.66.0/binaries/在安装完原创 2018-02-23 15:57:36 · 2007 阅读 · 0 评论 -
qt 安装配置
QT 安装包下载需要注册,比较不方便,可以直接连他的FTP地址下载:http://ftp.vim.org/languages/qt/archive/qt/原创 2018-03-15 20:15:18 · 241 阅读 · 0 评论 -
C语言 数据对齐/内存对齐
在c语言中数据对齐有两种方式位于堆中和栈中:malloc 和 初始化直接分配对于内存对齐有相对应的方式栈的内存对齐有两种:基于Visual C和GCC的#define MY_MALLOC malloc#define MY_FREE(p) if (p != NULL) { free(p); p = NULL;}//MSVC原创 2018-01-30 16:15:16 · 945 阅读 · 0 评论 -
git 笔记
使用git clone 最常用的指令git 带有其他链接的资源$ git clone --recursive https://XXX/resoure.git或者$ git clone https://XXX/resoure.git$ cd XXX-master$ git submodule update --init原创 2018-01-30 13:46:36 · 192 阅读 · 0 评论 -
Mingw 以及cmake 的联合使用
mingw有很多种安装版本这里推荐使用TDM-GCC 可以支持32和64位的方式安装方便,环境变量也能自动设置(所以安装完需要重启)http://tdm-gcc.tdragon.net/下面介绍mingw和cmake项目的使用在项目中会新建build目录,并生成编译的工程这里先写一个命令行中用VS生成的方式 cmake在安装了VS的环境下默认使用VS生成工程mkdir buildvscd bui...原创 2018-02-10 11:16:09 · 1004 阅读 · 0 评论 -
vs2013 error LNK1120 LNK2019
今天使用了vs2013新建了一个工程结果发现编译的时候,总是有两个错误LNK1120 和 LNK2019最后发现了原因,在此记录一下。新建项目工程的时候,如果选择了空项目则会在编译的时候出现以上报错。解决办法:找到自己的项目,右键->属性->配置属性->链接器->系统->子系统。应为窗口,更改为控制台。转载 2018-01-10 17:07:05 · 1461 阅读 · 0 评论 -
Tracking-Learning-Detection
Tracking-Learning-Detection(TLD)是Zdenek Kalal提出的一种对视频中单个物体长时间跟踪的算法。我主要会根据他在2010年发表的论文《Tracking-Learning-Detection》来分析TLD算法的原理。该项目的首页中有几段视频展示了TLD实时跟踪的效果和性能,其中的两个视频可以在这里下载:similar objects,human face。作转载 2017-09-26 15:27:29 · 459 阅读 · 0 评论 -
build opencv viz module 配置VTK路径
以下是官方给出的编译步骤Build OpenCV with VTK.1. set WITH_VTK= On in CMake-Gui2. set VTK_DIR = path-to-build-directory-of-VTK3. compile OpenCV这里有个注意点:set VTK_DIR = path-to-build-directory-of-V原创 2017-08-02 23:08:19 · 2840 阅读 · 0 评论 -
opencv 3.0 windows 计时函数 timer
计时函数1. 纯C 高精度(100ns)测量慢2.纯C 低精度(1ms)测量快3.C++ OPENCV测试 高精度原创 2015-01-17 11:14:39 · 2328 阅读 · 0 评论 -
c++ 继承 + 构造、析构函数
#include#includeusing namespace std;//class Date; //提前申明类//class Time; //提前申明类class Time{public: Time(){hour=0;min=0;sec=0;} //默认赋初始值 Time(int h,int m,int s):hour(h),min(m),sec(s){}原创 2015-02-25 22:29:30 · 538 阅读 · 0 评论 -
c++ 多重继承 + 虚基类
teacher_cadre(老师兼干部) /|\ /|\ | |teacher cadre /|\ /|\ | | person#include#includeusing namespace std;class Person{public: Person(string name,int age,原创 2015-02-25 22:27:42 · 452 阅读 · 0 评论 -
c++ 字符串与整型转换 sstream
#include #include #include using namespace std;int main(){ int i = 10; stringstream stream; string str; stream << i; stream >> str; std::cout << str << std::endl; stream.clear(); //在进行多原创 2015-02-25 22:33:09 · 734 阅读 · 0 评论 -
c++ 任意数据类型转换 sstream
#ifndef _MyType_h_#define _MyType_h_#include #include #include using namespace std;templateextern void all2str(string & result, const in_value& t);templateextern out_type all2all(const i原创 2015-02-25 22:31:18 · 652 阅读 · 0 评论 -
c++ 构造函数重定义 + 运算符重载、流重载
#includeusing namespace std;class Complex{public: //构造函数的重载 Complex(){real=0;imag=0;} //默认的初始化 Complex(double r){real=r;imag=0;} //缺省的初始化 Complex(double r,double i){real=r原创 2015-02-25 22:28:55 · 2367 阅读 · 0 评论 -
c++ 纯虚函数+动态、静态关联
#includeusing namespace std;class Shape{public: virtual double area() const{return 0.0;} //虚函数 面积 virtual double volume() const{return 0.0;} //虚函数 体积 virtual void shape_name() const=0; //纯虚函原创 2015-02-25 22:27:00 · 867 阅读 · 0 评论 -
c++ 文本或二进制输出 fstream
#include #include using namespace std;int main(){ ofstream file1; char str1[]="Hello world"; char num[1]={1}; file1.open("D:\\vc_tmp\\test.dat"); //文本写入 file1<<str1<<endl; int i=100原创 2015-02-25 22:32:51 · 806 阅读 · 0 评论 -
指针转换 和 指针在函数迭代中的传递
将char指针video_buffer(加偏移)指向的数据以int形式读出U32 tmp_buf;U08 *video_buffer; tmp_buf = *((U32 *)(video_buffer + offset)); 将char指针video_buffer(加偏移)指向的数据以int指针形式读出U32 *tmp_buf;U08 *video_buffer原创 2015-01-15 10:21:48 · 680 阅读 · 0 评论 -
OpenCL + VS2010
配置过程参考了http://blog.csdn.net/mengfanteng/article/details/23531549 例子程序main.cpp #include #include #include #define MEM_SIZE (128) #define MAX_SOURCE_SIZE (0x100000)转载 2015-01-15 17:05:14 · 674 阅读 · 0 评论