2014-01-28 31 views
0

我正在尝试在MPI代码中写入TIFF文件。不同的处理器具有不同的图像部分,我想将图像并行写入文件。MPI并行写入TIFF文件

的写入失败,只有第一处理器能够写入。

我该怎么做?

有我的执行没有错误,只是它不工作。
我用h=TIFFOpen(file, "a+")每个处理器上使用TIFFSetDirectory(h, directorynumber)打开同一个文件(我不知道这是否是一个正确的方式或没有),那么每个谁负责的目录处理器将写在了自己的位置的头,然后每个目录的内容将被写入。我将用TIFFWriteDirectory(h)完成。结果将是写在文件上的第一个目录。

我想,我需要使用MPI_IO但这样做的方式是不TIFFOpen打开文件?

+1

你在想什么?结果是什么?什么是错误?在我们能够帮助您之前,我们需要更多信息。 –

+0

并行libtiff是否有任何开源解决方案?真的很难相信没有人会试图为tiff库编写并行IO。 – ziv

回答

1

不同MPI任务是独立的程序,从上来看OS点独立主机上运行。在你的情况下,TIFF库不是为了处理并行操作而设计的,所以打开文件将导致第一个进程成功,其余的都会失败,因为他们发现文件已经打开(在共享文件系统上)。除了在处理巨大的图像(例如:天文图像)的情况下,执行并行I/O对性能很重要(您需要支持它的文件系统......但我知道IBM GPFS) ,我会避免使用MPI_IO编写自定义TIFF驱动程序。

取而代之的是典型的解决方案是收集(MPI_Gather())与等级== 0过程中的图像部分,让它只保存TIFF文件。

+0

只是一个愚蠢的想法:也许为图像的每个块写一个文件,然后有一个简单的合并块的后构建步骤?实际上,这种方法可能需要一个定制的TIFF库(这是OP可能使用的任何方式)...... –

+1

并非毫无意义:) MPI并不总是最好的工具。但我期望后续是“如何收集图像” - 在这里MPI数据类型可以有很大的帮助 - 它取决于图像的分布。 OP提到的库只是[libtiff](http://www.unix.com/man-page/all/3tiff/TIFFSetDirectory/)。 – Sigismondo

+0

这是真的:)但是,传递块可能会很慢...或者MPI知道如何将指针传递到内存中的位置? MPI是否使用共享内存模型? –