MPI 并行写入 TIFF 文件

标签 mpi tiff

我正在尝试用 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/

相关文章:

c - MPI 环首领选举返回段错误

java - 解压缩 TIFF 文件而不通过 BufferedImage

c++ - QImage: 读取 16 位灰度 TIFF (Qt, C++)

python - 使用 MPI 的 Allreduce 对 Python 对象求和

c - Eclipse 和 Yosemite 中的全局环境变量

c++ - Trilinos稀疏 block 矩阵异常内存消耗

c - 如何使用 MPI 和 OpenMP 运行并行循环

java - 如何使用 ImageIO 获取有关文件压缩的​​信息?

java - 如何在Java中将TIFF转换为JPEG/PNG

c++ - 使用 CImg 编写 TIFF 浮点图像