2014-01-28 91 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是否使用共享內存模型? –