我需要使用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
可是:
worker.sh
的内容),可能最终的解决方案是为gnuplot提供一个很好的c ++接口,但我不太了解现有的接口,我不知道该怎么做。还有其他想法吗?请避免暗示新的或不那么常见的程序,如GNU parallel,因为我无法在我使用的某些机器上使用它们。
答案 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毫秒。