用于并行处理的Gnuplot包装器

时间:2013-07-26 14:46:19

标签: parallel-processing gnuplot

我需要使用gnuplot处理大量数据文件,以便生成在电影中收集的图像。由于该过程非常耗时,我希望并行生成帧,并且应不时打印一条小消息以通知用户进度。

我尝试了makefile方法:

SOURCES=$(wildcard ./*.in)
OBJECTS=$(SOURCES:.in=.out)

all: $(OBJECTS)

%.out: %.in
  ./worker.sh $< $@ 

其中worker.sh是:

gnuplot << EOF
set some_gnuplot_options
set output "$2"
plot "$1" 
EOF

可是:

  1. 我无法打印进度消息,
  2. 我更喜欢单个文件解决方案(我没有成功直接在makefile中使用worker.sh的内容),
  3. 这个解决方案为包含所有指令的单个gnuplot脚本带来了相当大的开销。
  4. 可能最终的解决方案是为gnuplot提供一个很好的c ++接口,但我不太了解现有的接口,我不知道该怎么做。还有其他想法吗?请避免暗示新的或不那么常见的程序,如GNU parallel,因为我无法在我使用的某些机器上使用它们。

1 个答案:

答案 0 :(得分:1)

从您的评论中听起来好像您可以使用自己的脚本。 GNU Parallel可以用作脚本,不需要安装,然后您可以创建文件parallel_plotter

#!/home/tange/bin/parallel --shebang-wrap -v A={} /usr/bin/gnuplot

name=system("echo $A")
set term png
set output name.".png"
plot sin(x*name)/x

替换/ home / tange / bin / parallel以及脚本并行的完整路径。

然后:

chmod 755 parallel_plotter
./parallel_plotter 1 2 3 4 5

这将为每个完成的运行打印一行。


为了避免/ home / tange / bin / parallel的完整路径,我可以提出这个解决方案:

#!/usr/bin/env gnuplot

name=system("echo $A")
set term png
set output name.".png"
plot sin(x*name)/x

然后:

chmod 755 parallel_plotter
parallel -v A={} ./parallel_plotter ::: 1 2 3 4 5

你担心产生gnuplot会带来很多开销。我测试了以上内容:

./parallel_plotter {1..1000}

花了10秒钟。因此,在我的系统上启动gnuplot的开销小于每个作业100毫秒。