[問題] opencl clEnqueueNDRangeKernel 花費時間
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
G++
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
OpenCL
問題(Question):
目標是算出array裡數字的總和
當array裡有100000000 筆數字時,
單純呼叫 clEnqueueNDRangeKernel() //裡面的參數沒有打出來
即使kernel裡面甚麼都沒有寫
__kernel void addReduce_local( __global int* host_data, )
{
}
仍然會花費0.3s的時間。
想請問大家是為什麼呢?
ps1:如果kernel裡沒有 __global int* host_data 時,
則呼叫clEnqueueNDRangeKernel()感覺不出花費多少時間,
可是如果有的話,就要花費0.3s
ps2:資料已經在配置記憶體的時候從CPU搬到GPU裏頭了。
謝謝
-----------------已解決----------------
因為如果在clCreateBuffer使用 CL_MEM_COPY_HOST_PTR
則資料會在call第一次kernel的時候才複製過去
但如果使用 clCreateBuffer 搭配 clEnqueueWriteBuffer
好像資料就會直接複製過去。
所以複製資料的時間應該就被隱藏起來了。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.113.66.32
※ 編輯: peter0319 來自: 140.113.66.32 (11/19 01:46)
推
11/19 15:51, , 1F
11/19 15:51, 1F