我在教程中看到了這兩個版本,但我找不到它們的優點和缺點。哪一個是正確的?使用clCreateBuffer + CL_MEM_COPY_HOST_PTR創建緩衝區對象與clCreateBuffer + clEnqueueWriteBuffer之間有什麼區別?
cl_mem input = clCreateBuffer(context,CL_MEM_READ_ONLY,sizeof(float) * DATA_SIZE, NULL, NULL);
clEnqueueWriteBuffer(command_queue, input, CL_TRUE, 0, sizeof(float) * DATA_SIZE, inputdata, 0, NULL, NULL);
與
cl_mem input = clCreateBuffer(context,CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR, ,sizeof(float) * DATA_SIZE, inputdata, NULL);
感謝。
[更新]
我添加CL_MEM_COPY_HOST_PTR,
第二示例以使其正確。
嗨灰熊,你是對的。我忘記了CL_MEM_COPY_HOST_PTR。因此,沒有任何事實可以說明一個或另一個? – Framester 2010-10-01 09:58:06
至少從規格來看不應該有。當然,性能可能會(或可能不會)變化,但這會依賴於實現並且可能會發生變化,所以我不會指望它(如果性能對於內存傳輸至關重要,那麼可能會考慮將異步內存傳輸(使用CL_FALSE作爲clEnqueueWriteToBuffer的阻塞參數)再次判斷它的更快取決於實現,對於CPU,最快的應該是使用CL_USE_HOST_PTR。一般來說,我會確保memtransfertime沒有那麼重要,並且可以用這個來完成 – Grizzly 2010-10-01 13:33:11
謝謝,表演並不重要,它更像是一個學術問題。 – Framester 2010-10-01 15:04:17