在编译C++代码的时候,我们有时需要比较一下不同编译器之间优化性能的差异,因此需要在Clang与GCC之间进行切换,用来比较最后的实际效果。
在Ubuntu 16.04系统上使用如下命令进行切换
|
1 2 |
$ sudo apt-get install clang $ sudo update-alternatives --config c++ |
在编译C++代码的时候,我们有时需要比较一下不同编译器之间优化性能的差异,因此需要在Clang与GCC之间进行切换,用来比较最后的实际效果。
在Ubuntu 16.04系统上使用如下命令进行切换
|
1 2 |
$ sudo apt-get install clang $ sudo update-alternatives --config c++ |
最近在研究如何提高C++程序的性能,Google开源的TCMalloc,在C++小对象频繁创建销毁的处理上拥有非常大的优势。
在Ubuntu 16.04上使用如下命令安装最新的TCMalloc
|
1 |
$ sudo apt-get install google-perftools |
对于已经编译好的程序,可以使用如下命令,让程序加载TCMalloc来大致测试一下程序性能的提升
|
1 |
$ LD_PRELOAD="/usr/lib/libtcmalloc.so.4" |
目前,perf是Linux系统上最全面最方便的一个性能检测工具。由Linux内核携带并且同步更新。
Ubuntu 16.04系统上需要执行如下命令安装:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# 常规内核使用 #sudo apt-get install linux-tools-generic # 低延时内核使用 #sudo apt-get install linux-tools-lowlatency # 因此我们根据内核自动选择安装 $ sudo apt-get install linux-tools-`uname -r | cut -d- -f1-2`-`uname -r | cut -d- -f3` $ sudo apt-get install linux-tools-common #解决报错"Kernel address maps (/proc/{kallsyms,modules}) were restricted. Check /proc/sys/kernel/kptr_restrict before running 'perf record'". $ sudo sh -c " echo 0 > /proc/sys/kernel/kptr_restrict" |
使用方法如下(gcc编译时最好使用-g参数,生成符号,方便调试):
|
1 2 3 4 5 6 |
#生成性能日志文件,默认生成 perf.data $ sudo perf record -e cpu-clock -g ./hello #解析性能日志 $ perf report -g -i perf.data |
软件的性能是软件质量的重要考察点,不论是在线服务程序还是离线程序,甚至是终端应用,性能都是用户体验的关键。这里说的性能重大的范畴来讲包括了性能和稳定性两个方面,我们在做软件测试的时候也是要重点测试版本的性能表现和稳定性的。对于软件测试过程中发现的性能问题,如何定位有很多的方法。基本的方法可能是开发者对代码进行review,或者是使用一些工具对代码进行性能分析。常见的性能分析工具有哪些呢?以下两篇文章做了详细的总结:
gprof是可用于Linux C++代码性能分析工具之一。
继续阅读Linux C++程序进行性能分析工具gprof使用入门
Ubuntu 16.04下使用GCC5,CUDA 7.5编译Caffe时候报告如下错误:
|
1 |
/usr/lib/gcc/x86_64-linux-gnu/5/include/mwaitxintrin.h(42): error: identifier "__builtin_ia32_mwaitx" is undefined |
目前比较好的解决方法是在编译的时候增加_MWAITXINTRIN_H_INCLUDED宏。
如果使用cmake来编译代码,则只需要在CMakeLists.txt中增加如下语句即可
|
1 |
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_MWAITXINTRIN_H_INCLUDED") |
skipfish是Google的工程师MIchal Zalewski开发的一款网站安全检测工具,它完全实现了全自动化操作,不需要人工干预.
在Ubuntu 16.04上使用skipfish是比较简单的,使用如下命令安装
|
1 |
$ sudo apt-get install skipfish |
网站检测命令如下:
|
1 |
$ skipfish -o output_folder http://www.example.com |
其中output_folder是检测结果的输出目录,扫描结束后可打开index.html查看扫描结果。
最近,物体识别已经成为计算机视觉和AI最令人激动的领域之一。即时地识别出场景中所有的物体的能力似乎已经不再是秘密。随着卷积神经网络架构的发展,以及大型训练数据集和高级计算技术的支持,计算机现在可以在某些特定设置(例如人脸识别)的任务中超越人类的识别能力。
|
1 |
$ git clone https://github.com/opencv/opencv.git |
|
1 2 3 4 |
$ sudo apt-get install -y cmake #借助系统自带的opencv简化依赖安装步骤 $ sudo apt-get install -y libopencv-dev |
|
1 2 3 4 5 6 7 8 9 |
$ cd opencv $ mkdir build $ cd build $ cmake .. $ make -j 10 |
|
1 |
$ sudo make install |
如果执行cmake时候出现如下错误信息
|
1 2 3 4 5 6 7 8 9 10 |
CMake Error at CMakeLists.txt:11 (message): FATAL: In-source builds are not allowed. You should create separate directory for build files. -- Configuring incomplete, errors occurred! |
则应该是在代码根目录下直接执行过cmake,导致根目录下生成了CMakeCache.txt,需要删除CMakeCache.txt再次执行编译即可。
|
1 2 |
pil_image = PIL.Image.open('image.jpg') cv_image = cv2.cvtColor(numpy.asarray(pil_image), cv2.COLOR_RGB2BGR) |
目前为止发现的性能最好,效果最好的人脸探测以及对齐的论文就是MTCNN了。
完整论文如下
继续阅读Joint Face Detection and Alignment using Multi-task Cascaded Convolutional Networks