2012-10-08 154 views

回答

0

我不認爲這是可能直接與OpenCL的做。這是因爲在OpenCL中定義了上下文,隊列和內存的方式。如果您從兩個不同的上下文傳遞內存,那麼很可能數據位於兩個不同的設備上,我們不知道要在哪個設備上執行計算。

如果您想執行此類計算,您首先必須將數據從一個上下文複製到另一個上下文。這可以爲這樣做:

  1. 在同樣大小的緩衝區的上下文2中CONTEXT1
  2. 創建一個新的緩衝區大小相同
  3. clEnqueueReadBuffer的主機從CONTEXT1到上創建一個本地緩衝區本地緩衝器
  4. clEnqueueWriteBuffer從本地緩衝器到上下文2

相反,如果你在不同的命令隊列中的兩個緩衝器(在相同環境下),可以將它們與部分A指定的共享1的OpenCL 1.2規範。

2

我不知道這是否會工作,但如果作爲Klee1說,位是不可能的,我可以試試這個:

1)從創建的每一個你的兩個CL上下文啓用共享的單個GL上下文,每個CL上下文有一個內存對象。 2)當你想在兩者之間移動數據時,使用GL來做兩幀之間的幀緩衝區溢出。

...這將保持在GPU內的數據,並節省您大量的時間與複製PCI-E總線上的兩種方式....

相關問題