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