我正在嘗試使用MPI編寫程序,我有一個問題可以幫助我很多。是否有可能在MPI中以任何方式發送指向另一個進程的指針?我想要的只是發送指針,而不是將內存從一個進程複製到另一個進程。將指針表示爲字符串,反之亦然
如果不適用,是否可以將指針表示爲字符串,然後發送它,以便接收進程可以再次將它轉換爲指針並訪問指向的內存?
在此先感謝。
我正在嘗試使用MPI編寫程序,我有一個問題可以幫助我很多。是否有可能在MPI中以任何方式發送指向另一個進程的指針?我想要的只是發送指針,而不是將內存從一個進程複製到另一個進程。將指針表示爲字符串,反之亦然
如果不適用,是否可以將指針表示爲字符串,然後發送它,以便接收進程可以再次將它轉換爲指針並訪問指向的內存?
在此先感謝。
簡答:不,你不能那樣做。
解釋是MPI進程不保證以任何方式共享內存。實際上,大多數MPI實現將MPI進程映射到實際的OS進程,因此它們不共享相同的內存地址空間。另外,您可能希望在羣集上運行MPI應用程序,在這種情況下,MPI進程甚至不在同一硬件上。
編輯:
MPI2引入窗口的操作(參見例如MPI_WIN_CREATE
),其模擬共享存儲器的訪問。您的實現可能會決定如果所有進程都在同一節點上運行,則可以使用共享內存來實現此類窗口操作。但是,與MPI一樣,你永遠不能保證如何執行操作。
我知道不同的硬件,但我只想在同一個節點中的進程之間交換指針。謝謝你的信息。至少我不會花時間在無法完成的事情上。 – gkaran89 2012-03-16 14:22:09
您不能在同一節點上的進程之間交換指針。那麼,你可以,但這樣的指針是沒有意義的。在任何現代操作系統上,單個進程都在自己的虛擬地址空間中運行。如果你希望在進程之間共享內存,請查看POSIX共享內存函數('shmget','shmat'等)或內存映射文件('mmap')。請注意,大多數MPI實現將在幕後使用這些方法。所以當你使用'MPI_Send'和'MPI_Recv',並且這些進程共享一個節點時,發送者將把數據複製到一個共享緩衝區,並且接收者將複製出來。 – 2012-03-16 19:18:36
指針傳輸不應該是這裏的問題。問題是指針指向的內存需要在同一位置的兩個地址空間中可用。你想在這裏做什麼? – 2012-03-16 14:19:38