2017-02-03 97 views
2

在CPU世界中,可以通過內存映射來完成。可以爲GPU做類似的事情嗎?可以兩個進程共享相同的GPU內存嗎? (CUDA)

如果兩個進程可以共享相同的CUDA上下文,我認爲這將是微不足道的 - 只需傳遞GPU內存指針即可。是否有可能在兩個進程之間共享相同的CUDA上下文?

我想到的另一種可能性是將設備內存映射到內存映射的主機內存。由於它是內存映射的,它可以在兩個進程之間共享。這是否有意義/可能,是否有任何開銷?

+0

@RobertCrovella:這可能是一個很好的答案,任何人都可以提供。如果你想添加它,我會愉快地上傳它 – talonmies

回答

2

CUDA MPS有效地允許來自2個或更多進程的CUDA活動在GPU上共享相同的上下文。然而,這不會提供你所要求的:

可以兩個進程共享相同的GPU內存?

實現此目的的一種方法是通過CUDA IPC(進程間通信)API。

這將允許您在多個進程之間共享分配的設備內存區域(即通過cudaMalloc分配的內存區域)。 This answer包含額外的資源來了解CUDA IPC。

但是,根據我的測試,這不能在多個進程之間共享主機固定內存區域(例如,通過cudaHostAlloc分配的區域)。存儲區域本身可使用可用於您的特定OS普通IPC機制共享,但它不能做成以2個或多個進程作爲「固定」內存(根據我的測試)。

+0

你能否詳細說明爲什麼共享cuda上下文不啓用共享設備內存?是否即使cuda上下文相同,B進程中的設備內存指針的值仍然沒有意義? –

+0

我沒有說「共享cuda環境不支持共享設備內存」。我說* CUDA MPS *不支持共享設備內存。如果您想了解共享cuda環境是否允許共享設備內存,則必須更具體。對於同一個進程中的兩個線程,他們可以共享相同的上下文。 CUDA不提供兩種單獨進程共享相同上下文的方法AFAIK。如果您認爲有一個,請具體說明,並確定如何在兩個獨立流程之間共享相同的cuda環境。 –

相關問題