我正在尝试用 MPI 代码编写 TIFF 文件。不同的处理器有图像的不同部分,我想并行地将图像写入文件。
写入失败,只有第一个处理器可以写入。
我该怎么做?
我的实现没有错误,只是不起作用。
我在每个处理器上使用 h=TIFFOpen(file, "a+")
打开同一个文件(我不确定这是否是正确的方法),然后每个处理器负责一个目录将使用 TIFFSetDirectory(h, Directorynumber) 在其自己的位置写入 header ,然后将写入每个目录的内容。我将用 TIFFWriteDirectory(h)
来完成。结果将是写入文件的第一个目录。
我认为我需要使用 MPI_IO 打开文件,但这样做不是 TIFFOpen?
最佳答案
从操作系统的角度来看,不同的 MPI 任务是独立的程序,运行在独立的主机上。在您的情况下,TIFF 库并非设计用于处理并行操作,因此打开文件将导致第一个进程成功,其余所有进程都会失败,因为它们发现文件已打开(在共享文件系统上)。
除非您正在处理巨大图像(例如:天文图像),执行并行 I/O 对性能非常重要(但是您需要一个支持它的文件系统......我知道IBM GPFS),我会避免使用 MPI_IO 编写自定义 TIFF 驱动程序。
典型的解决方案是收集(MPI_Gather())进程中等级==0的图像部分,并让它仅保存 tiff 文件。
关于MPI 并行写入 TIFF 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21408032/