`

GraphicsMagick性能测试(二) - 开启多线程对性能的影响

 
阅读更多

测试目的:

---------------------------------------------------------
了解GraphicsMagick启用与禁用多线程(openmp),对GraphicsMagick性能的影响

编译参数使用  --disable-openmp表示禁用,未使用表示开启。

GM版本:

---------------------------------------------------------
GraphicsMagick-1.3.17

测试环境硬件配置:

---------------------------------------------------------
OS:Red Hat Enterprise Linux Server release 5.6 (Tikanga)
CPU: Intel(R) Xeon(TM) CPU 2.80GHz  4核心 (很一般的CPU,都不如笔记本的I5CPU 2410 双核4线程)
内存:8G

测试逻辑:

---------------------------------------------------------
一张1024*768像素的JPG图片,大小140KB,使用GM生成一个100x100的缩略图
一张3264x2448像素的JPG图片,大小2.6M,使用GM生成一个100x100的缩略图

测试命令:

---------------------------------------------------------
  使用gm自带的测试命令:gm benchmark -iterations 100 -stepthreads 1  +原命令语句
  -iterations 100  次数
  -rawcsv  打印出测试结果,是csv格式的文本 ,标题: threads,iterations,user_time秒,elapsed_time秒
  -stepthreads 1 线程增长步长,1表示每次加1个线程,一直加到OMP_NUM_THREADS环境变量的值 ,必须设置OMP_NUM_THREADS环境变量才可以真正使用起多线程(openmp)。本测试只想测试单线程就未设置 OMP_NUM_THREADS。
  -duration 持续时间(秒)

 

OMP_NUM_THREADS环境变量

---------------------------------------------------------

OMP_NUM_THREADS环境变量,表示GM可使用的线程数。必须设置OMP_NUM_THREADS环境变量才可以真正使用起多线程(openmp)。


临时设置环境变量: (我是4核心的CPU)
export OMP_NUM_THREADS=4

永久设置环境变量:
编辑文件 vi /etc/profile
1、最后面加入:export OMP_NUM_THREADS=4
2、执行命令使其马上生效: # source /etc/profile

测试1: 1-4并发,每并发执行100次(小图片)一张1024*768像素的JPG图片,大小140KB

---------------------------------------------------------
启用多线程
编译参数:./configure --enable-shared --with-quantum-depth=8 --with-windows-font-dir=/usr/share/fonts/ms_font

gm benchmark -iterations 100 -stepthreads 1 convert -resize 100x100 -quality 90 +profile "*" /tmp/1024x768.jpg /tmp/100x100.jpg

测试结果:
Results: 1 threads 100 iter 18.46s user 18.47s total 5.414 iter/s 5.417 iter/cpu 1.00 speedup 1.000 karp-flatt    (处理一张图片耗时184ms
Results: 2 threads 100 iter 22.25s user 11.13s total 8.985 iter/s 4.494 iter/cpu 1.66 speedup 0.205 karp-flatt    (处理一张图片耗时111ms
Results: 3 threads 100 iter 36.84s user 12.29s total 8.137 iter/s 2.714 iter/cpu 1.50 speedup 0.498 karp-flatt   (处理一张图片耗时122ms
Results: 4 threads 100 iter 47.31s user 11.87s total 8.425 iter/s 2.114 iter/cpu 1.56 speedup 0.524 karp-flatt   (处理一张图片耗时118ms
结果解读:
        4 threads:4个线程
        100 iter:每线程执行100次
        47.31s user:不知道
        11.87s total:本次耗时    (同使用-rawcsv参数输出的总时间)
        8.425 iter/s:处理8.425次/s
        2.114 iter/cpu:处理2.114次/cpu
        1.56 speedup:加快了1.56
        0.524 karp-flatt:不知道

系统负载:
 (1线程)20:51:11 up 6 days, 14:04,  5 users,  load average: 0.28, 0.36, 0.34
 (2线程)20:51:26 up 6 days, 14:04,  5 users,  load average: 0.74, 0.46, 0.37
 (3线程)20:51:36 up 6 days, 14:04,  5 users,  load average: 1.25, 0.57, 0.41
 (4线程)20:51:47 up 6 days, 14:05,  5 users,  load average: 1.67, 0.69, 0.45
 
CPU使用率(4核):
 (1线程)25%
 (2线程)50%
 (3线程)75%
 (4线程)99%

测试2: 1-4并发,每并发执行100次(大图片)一张3264x2448像素的JPG图片,大小2.6M

---------------------------------------------------------
启用多线程
编译参数:./configure --enable-shared --with-quantum-depth=8 --with-windows-font-dir=/usr/share/fonts/ms_font


gm benchmark -iterations 100 -stepthreads 1 convert -resize 100x100 -quality 90 +profile "*" /tmp/3264x2448.jpg /tmp/100x100.jpg
测试结果:
Results: 1 threads 100 iter 205.42s user 205.45s total 0.487 iter/s 0.487 iter/cpu 1.00 speedup 1.000 karp-flatt   (处理一张图片耗时2054ms
Results: 2 threads 100 iter 247.33s user 124.87s total 0.801 iter/s 0.404 iter/cpu 1.65 speedup 0.216 karp-flatt   (处理一张图片耗时1248ms
Results: 3 threads 100 iter 371.59s user 125.78s total 0.795 iter/s 0.269 iter/cpu 1.63 speedup 0.418 karp-flatt  (处理一张图片耗时1257ms
Results: 4 threads 100 iter 470.94s user 125.02s total 0.800 iter/s 0.212 iter/cpu 1.64 speedup 0.478 karp-flatt  (处理一张图片耗时1250ms

系统负载:
 (1线程)21:31:00 up 6 days, 14:44,  5 users,  load average: 0.99, 0.84, 0.64
 (2线程)21:37:10 up 6 days, 14:50,  5 users,  load average: 1.87, 1.24, 0.84
 (3线程)21:38:36 up 6 days, 14:51,  5 users,  load average: 2.67, 1.65, 1.02
 (4线程)21:41:35 up 6 days, 14:54,  5 users,  load average: 3.85, 2.58, 1.48
 
CPU使用率(4核):
 (1线程)25%
 (2线程)49.5%
 (3线程)74.5%
 (4线程)99%


测试3: 1并发,每并发执行100次(小图片)一张1024*768像素的JPG图片,大小140KB
-----------------------------------------------------

禁用多线程
编译参数: ./configure --enable-shared --disable-openmp --with-quantum-depth=8 --with-windows-font-dir=/usr/share/fonts/ms_font


gm benchmark -iterations 100 -stepthreads 1 convert -resize 100x100 -quality 90 +profile "*" /tmp/1024x768.jpg /tmp/100x100.jpg

测试结果:
Results: 1 threads 100 iter 18.65s user 18.65s total 5.362 iter/s 5.362 iter/cpu 1.00 speedup 1.000 karp-flatt   (处理一张图片耗时186ms)

系统负载:
 (1线程) 21:15:52 up 6 days, 14:29,  5 users,  load average: 0.48, 0.53, 0.45

CPU使用率(4核): (1线程)
21时15分59秒       CPU     %user     %nice   %system   %iowait    %steal     %idle
21时16分00秒       all     25.00      0.00      0.00      0.50      0.00     74.50
21时16分01秒       all     25.00      0.00      0.25      0.00      0.00     74.75


测试4: 1并发,每并发执行100次(大图片)一张3264x2448像素的JPG图片,大小2.6M
-----------------------------------------------------

禁用多线程
编译参数: ./configure --enable-shared --disable-openmp --with-quantum-depth=8 --with-windows-font-dir=/usr/share/fonts/ms_font


gm benchmark -iterations 100 -stepthreads 1 convert -resize 100x100 -quality 90 +profile "*" /tmp/3264x2448.jpg /tmp/100x100.jpg
测试结果:
Results: 1 threads 100 iter 204.13s user 204.15s total 0.490 iter/s 0.490 iter/cpu 1.00 speedup 1.000 karp-flatt   (处理一张图片耗时2040ms)

系统负载:
 21:21:00 up 6 days, 14:34,  5 users,  load average: 0.91, 0.57, 0.46
 
CPU使用率(4核): (1线程)
 21时20分54秒       CPU     %user     %nice   %system   %iowait    %steal     %idle
 21时20分55秒       all     24.00      0.00      1.00      0.00      0.00     75.00
 21时20分56秒       all     25.00      0.00      0.25      0.00      0.00     74.75

 

结论:

-----------------------------------------------------

对于核心CPU,建议开启GM 的多线程,性能提升大约40%。

如果你的服务器共有16核CPU (2路、4核8线程),也建议设置OMP_NUM_THREADS=4,线程再多后性能也没有什么提升了。


参考文章:
-----------------------------------------------------
GraphicsMagick OpenMP 性能比较(icc+iomp vs gcc+gomp) 
OpenMP in GraphicsMagick


分享到:
评论

相关推荐

    GraphicsMagick-1.3.40安装包

    GraphicsMagick是ImageMagick的一个分支,两者在功能上非常相似,但GraphicsMagick更注重稳定性和性能,同时也减少了对新特性开发的投入,使其更适合那些需要长期稳定性的项目。 在实际应用中,GraphicsMagick可以...

    GraphicsMagick-1.3.25-Q8-win64-dll Windows 64位安装版

    GraphicsMagick是一款强大的开源图像处理工具,它支持多种操作系统,包括Windows、Linux、Mac OS X等。这个"GraphicsMagick-1.3.25-Q8-win64-dll Windows 64位安装版"是专为64位Windows系统设计的版本,包含了Q8配置...

    GraphicsMagick-1.3.12-Q16-windows-dll.exe

    GraphicsMagick是一个短小精悍的的图片处理工具和库集合。对于Java开发者来说,常用的图片处理工具有3个,JDK自带的图片处理库,ImageMagick,GraphicsMagick。JDK自带的图片处理库,虽稳定简单,性能却比较差;...

    GraphicsMagick-1.3.23-Q16-win64-dll.exe

    GraphicsMagick-1.3.23-Q16-win64-dll.exe , 2018-05-03 官网最新 , win10 上试过可以用

    GraphicsMagick-1.3.26-Q16-win64-dll.exe

    我真的希望这个资源能够免费,但是我并没有发现0积分这一选项,sorry

    GraphicsMagick-1.3.25-Q16-win32-dll.exe

    GraphicsMagick-1.3.25-Q16-win32-dll.exe

    GraphicsMagick图片库GraphicsMagick-1.3.26.tar.xz

    GraphicsMagick图片库GraphicsMagick-1.3.26.tar.xz Java图片处理 - 安装ImageMagick库使用convert命令 - 文章中的辅助文件 http://blog.csdn.net/chwshuang/article/details/64921665

    GraphicsMagick-1.3.18-Q8-win64-dll

    GraphicsMagick-1.3.18-Q8-win64-dll 处理图像的专业工具

    GraphicsMagick-1.3.21-Q8-win32-dll.exe

    GraphicsMagick-1.3.21-Q8-win32-dll

    GraphicsMagick-1.3.31-Q16-win64-dll.exe

    GraphicsMagick是一个短小精悍的图片处理工具和库集合。用来处理图像的读取、写入和操作,支持超过88中图像格式,包括重要的DPX、GIF、JPEG、JPEG-2000、PNG、PDF、PNM和TIFF。GraphicsMagick-1.3.31-Q16-win64-dll....

    GraphicsMagick-1.3.21-Q8-win64-dll

    GraphicsMagick-1.3.21-Q8-win64-dll

    GraphicsMagick-1.3.35-win64

    安装"GraphicsMagick-1.3.35-Q16-win64"之后,只需在项目中安装"gm"模块(通过npm,即`npm install gm`),就可以在Node.js脚本中调用GraphicsMagick的各种方法,实现对图像的读取、写入、修改等操作,极大地方便了...

    GraphicsMagick-1.3.35-Q16-win64-dll.exe

    node开发gm模块所需工具。

    GraphicsMagick-1.3.26-windows-source

    Graphicshttp://www.aliyun.com/zixun/aggregation/16764.html">Magick是一款强大的图像处理工具...基于ImageMagick,该工具侧重于性能,最大限度地减少错误,并提供稳定的API和ABI。它运行于UNIX、Windows和Mac OS X。

    GraphicsMagick

    GraphicsMagick是一个强大的开源图像处理工具,它提供了一系列命令行工具和C API,使得开发者能够进行各种复杂的图像操作,如转换、编辑、合成以及处理大量图像。GraphicsMagick支持超过80种文件格式,包括常见的...

    GraphicsMagick-1.3.33-Q16-win64-dll.exe

    GraphicsMagick 是配合 GM(nodejs) 插件分割图片的window插件

    GraphicsMagick-jpeg-png

    如果你的GraphicsMagick在处理JPEG图像时遇到问题,如无法识别或错误地解码,那么可能就需要这个库来增强其对JPEG格式的支持。安装libjpeg库后,GraphicsMagick可以更流畅地处理JPEG图像,进行颜色校正、质量调整等...

    GraphicsMagick-1.3.18-Q8.zip

    标题“GraphicsMagick-1.3.18-Q8.zip”指的是GraphicsMagick的一个特定版本,1.3.18,Q8表示它是一个8位量子版本,这意味着它处理颜色精度为8位每通道。GraphicsMagick是一个强大的命令行图像处理工具,允许用户进行...

Global site tag (gtag.js) - Google Analytics