MPI并行写入TIFF文件

MPI并行写入TIFF文件,mpi,tiff,Mpi,Tiff,我正在尝试用MPI代码编写TIFF文件。不同的处理器具有图像的不同部分,我希望将图像并行写入文件 写入失败,只有第一个处理器可以写入 我该怎么做 我的实现中没有错误,只是不起作用。 我在每个处理器上使用h=TIFFOpen(file,“a+”)打开同一个文件(我不确定这是否正确),然后负责目录的每个处理器将使用TIFFSetDirectory(h,directorynumber)在自己的位置写入头,然后写入每个目录的内容。我将使用TIFFWriteDirectory(h)完成定稿。结果将是写入文

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

写入失败,只有第一个处理器可以写入

我该怎么做

我的实现中没有错误,只是不起作用。
我在每个处理器上使用
h=TIFFOpen(file,“a+”)
打开同一个文件(我不确定这是否正确),然后负责目录的每个处理器将使用
TIFFSetDirectory(h,directorynumber)
在自己的位置写入头,然后写入每个目录的内容。我将使用
TIFFWriteDirectory(h)
完成定稿。结果将是写入文件的第一个目录


我认为我需要使用MPI_IO打开文件,但这样做不是TIFFOpen?

从操作系统的角度来看,不同的MPI任务是独立的程序,运行在独立的主机上。在您的情况下,TIFF库不是为处理并行操作而设计的,因此打开该文件将导致第一个进程成功,其余所有进程都将失败,因为它们发现文件已经打开(在共享文件系统上)

除了处理大型图像(如天文图像)时,执行并行I/O对性能很重要(您需要一个支持它的文件系统……但我知道IBM GPFS),我会避免使用MPI_IO编写自定义TIFF驱动程序


相反,典型的解决方案是以秩==0的方式收集(MPI_gather())进程上的图像部分,并让其仅保存tiff文件。

您在尝试什么?结果如何?怎么了?我们需要更多的信息才能帮助您。有没有针对并行libtiff的开源解决方案。真的很难相信,从来没有人尝试为tiff库编写并行IO。只是一个愚蠢的想法:可能为图像的每个块编写一个文件,然后进行后期构建步骤,简单地合并这些块?事实上,这种方法可能需要一个定制的TIFF库(OP可能正在使用它)…一点也不傻:)MPI并不总是最好的工具。然而,我希望接下来的内容是“如何收集图像”——这里MPI数据类型可以提供很大帮助——这取决于图像的分布。OP提到的库只是。这是真的:)不过,传递块可能很慢。。。或者MPI知道如何将指针传递到内存中的位置吗?MPI使用共享内存模型吗?谢谢你的回答。谢谢你的回答。我正在处理巨大的图像,我需要并行地编写它们。正如您所建议的那样,我将采用传统的编写方式,即使用主节点来编写,但我有点希望有其他的并行I/O解决方案。我曾尝试使用MPI_IO编写自己的自定义TIFF驱动程序,但我需要重写库的大部分内容。并行libtiff还有其他开源解决方案吗。很难相信没有人试图为tiff库编写并行IO。