2011-05-19 85 views
4

我想在兩個獨立的Linux進程(使用POSIX消息隊列,我已經設置)之間傳遞Cuda上下文。是否可以在應用程序之間共享Cuda上下文?

使用cuCtxPopCurrent()cuCtxPushCurrent(),我可以得到上下文指針,但是這個指針在我調用該函數的進程的內存中被引用,並且在進程之間傳遞它是毫無意義的。

我正在尋找其他解決方案。我的想法至今都:

  1. 嘗試深拷貝CUcontext結構,然後通過副本。
  2. 看看我能否找到一個共享內存解決方案,其中所有的Cuda指針都放在那裏,這樣兩個進程都可以訪問它們。
  3. 將這些進程合併到一個程序中。
  4. 在Cuda 4.0中,我可以切換到更好的上下文共享。

我不確定選項(1)是否可能,以及(2)是否可用或不可能。 (3)如果我想使事物具有通用性(這是在劫持墊片內),它並不是真正的選擇。 (4)我會看看Cuda 4.0,但我不確定它是否能在那裏工作。

謝謝!

回答

3

總之,沒有。上下文隱含地綁定到創建它們的線程和應用程序。單獨的應用程序之間沒有可移植性。這與OpenGL和Direct3D的各種版本幾乎相同 - 不支持在應用程序之間共享內存。

CUDA 4使API線程安全,因此單個主機線程可以同時容納多於1個上下文(即多於1個GPU),並使用規範設備選擇API來選擇正在使用的GPU。如果我正確理解你的問題/應用,這在這裏無濟於事。

+0

明白了 - 謝謝!我將不得不弄清楚如何合併我的應用程序,或者有人照顧Cuda電話。 – 2011-05-19 17:07:58

相關問題