簡體   English   中英

使用CL_MEM_USE_HOST_PTR時是否需要將讀/寫入隊?

[英]Is it necessary to enqueue read/write when using CL_MEM_USE_HOST_PTR?

假設我正在wait()內核計算工作。

我想知道,當使用CL_MEM_USE_HOST_PTR標志分配緩沖區時,是否需要在緩沖區上使用enqueueRead / Write,或者它們總是可以省略?

注意

我在參考文獻中注意到這個說明:

調用clEnqueueReadBuffer以讀取緩沖區對象的區域,並將ptr參數值設置為host_ptr + offset,其中host_ptr是指向使用CL_MEM_USE_HOST_PTR創建讀取緩沖區對象時指定的內存區域的指針,必須滿足以下要求才能避免未定義的行為:

  1. 在讀取命令開始執行之前,使用此緩沖區對象的所有命令都已完成執行
  2. 緩沖區對象未映射
  3. 在讀命令完成執行之前,任何命令隊列都不使用緩沖區對象

所以,為了澄清我的問題,我把它分成兩部分:

  1. 如果我使用CL_MEM_USE_HOST_PTR標志創建一個緩沖區,我可以假設OpenCL實現會在必要時寫入設備緩存,所以我總是可以避免enqueueWriteBuffer()
  2. 如果我在啟動內核后調用event.wait() ,我是否總是可以避免enqueueReadBuffer()訪問使用標志CL_MEM_USE_HOST_PTR創建的緩沖區上的計算數據?

也許我正在思考它,但即使標志的描述清楚地表明主機存儲器將用於存儲數據這一事實,但是關於何時數據還不清楚(或者我沒有找到它被清除的地方)是可用的,如果讀/寫總是隱含的。

你永遠不必使用enqueueWriteBuffer(),但是你必須使用enqueueMapBuffer。

http://www.khronos.org/registry/cl/specs/opencl-1.2.pdf第89頁(1.1也是如此)。

只有在映射了對象后,數據才可用,並且在取消映射對象后將再次變為未定義。 此舊線程http://www.khronos.org/message_boards/showthread.php/6912-Clarify-CL_MEM_USE_HOST_PTR包含相當有用的描述。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM