Raspberry Pi 3上的Ghostscript速度很慢

时间:2018-03-18 22:28:18

标签: raspberry-pi ghostscript

我有一个perl-TK CGI程序,使用perl Tk的postscript方法构建.eps文件。 .eps文件是一个720x290散点图,包含5760(720x8)个数据点。 .eps文件大小为1273 KB;生成的.png文件大小为45 KB。

我正在调用ghostscript将.eps文件转换为.png文件。

Raspberry Pi上的Ghostscript(最新版本为9.20)非常慢。

TOP shows gs is CPU bound!
    VIRT=51816
    RES=38292
    SHR=11160
    S=R
    %CPU=100.0
    %MEM=4.0

我的Raspberry Pi 3 Model B上的gs转换大约需要24秒才能完成!

我在PC上使用最新的ghostscript(Windows 8.1上的9.22)运行相同的perl-TK CGI脚本。 那里的gs转换大约需要3.7秒。 树莓的Raspberry Pi味道需要6.4倍的时间才能完成!

有趣的是,在perl-TK下构建.eps文件需要花费0.64秒的时间,在Windows上需要0.26秒。 在这种情况下,Raspberry Pi 3的使用时间仅为2.4倍。

我正在使用的特定gs命令看起来像......

$GS executable for Raspbian is /usr/bin/gs
$GS executable for Windows 8.1 is C:/Program Files/gs/gs9.22/bin/gswin64c.exe


$GS -q -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 -dEPSCrop -sDEVICE=pngalpha -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -r72 sOutputFile=Boiler-WebApp.png -fBoiler-WebApp.eps

对于标题,轴标签和图形键,我使用的是一组简约字体(仅限NimbusSans)并验证所有字体都是在没有替换的情况下加载的。

那么,有没有什么我可以通过gs参数进行调整来为Raspberry Pi提供性能提升?在x32 Raspbian下,PC上的x64 9.22 gs的速度是否比9.20快得多?

我的Windows PC细节...... Intel Core2四核CPU Q6600 @ 2.4GHz,内存6.00 GB,x64

我的Raspberry Pi 3 Model B细节...

uname -a
Linux raspberrypi 4.9.41-v7+ #1023 SMP Tue Aug 8 16:00:15 BST 2017 armv7l GNU/Linux

cat /etc/os-release
PRETTY_NAME="Raspbian GNU/Linux 9 (stretch)"
NAME="Raspbian GNU/Linux"
VERSION_ID="9"
VERSION="9 (stretch)"
ID=raspbian
ID_LIKE=debian
HOME_URL="http://www.raspbian.org/"
SUPPORT_URL="http://www.raspbian.org/RaspbianForums"
BUG_REPORT_URL="http://www.raspbian.org/RaspbianBugs"

1 个答案:

答案 0 :(得分:0)

在很大程度上取决于你没有提供的EPS文件的内容,以及编译Raspberyy的二进制文件的方式。

您正在比较两种完全不同的CPU架构,使用两种不同的编译器,并且可能至少使用汇编语言和ARM上没有的Intel CPU的SSE2优化。

所以比较两者不是苹果和橘子,更像是苹果和红毛猩猩。我也不认为将CPU绑定的应用程序与更可能受内存或磁盘开销限制的perl脚本进行比较会显示任何内容。

我建议1.2MB是一个相当大的EPS文件,使用文本图形alpha会严重损害性能。

但在我看来,你只是反对英特尔CPU具有更强大的功能(这也是很多更昂贵的事实!)

我不相信你可以在命令行上更改任何可以让你在模型B上获得更多性能的东西,除了可能删除文本和图形alpha,这可能不会产生很大影响72无论如何dpi。

如果正在使用SSE2优化(无法分辨,因为我还没有看到该文件)那么这可能解释了差异,我不知道是否正在使用ARM芯片有一个等价物,如果是这样,你可以改写汇编语言来代替使用ARM操作码。

您应该检查用于编译二进制文件的编译器优化。如果关闭了编译器优化,那么这将花费你相当多的性能。