我在使用OpenCL的算法中工作,我需要測量它在並行和順序版本中的執行時間。由於這個原因,我使用的是外部循環迭代兩個代碼並測量它們的時間,但我已經獲得:OpenCL,這是正常執行時間嗎?
順序:3.06 SEGS
並行:269個SEGS
說我的代碼使用水貨版本是:
t_start=clock(); /* Start measuring time */
for(i=0;i<=N; i++) // N is really big, around a million, but is the same for both versions
{
fitness = 0;
ret = clEnqueueNDRangeKernel(command_queue, kernel, 1, NULL, &global_item_size, NULL, 0, NULL, NULL);
ret = clEnqueueReadBuffer(command_queue, vdistance, CL_TRUE, 0, siz_mem_distance_code, distance_code, 0, NULL, NULL);
ret = clEnqueueReadBuffer(command_queue, vsumatorio, CL_TRUE, 0,siz_mem_sumatorio, sumatorio, 0, NULL, NULL);
fitness = (1/(*sumatorio)) + (*distance_code/12) + ((pow(*distance_code,2))/4) + ((pow(*distance_code,3))/6);
}
t_finish=clock(); /* End measuring time */
這段代碼之前,我已經創建/初始化所有我們需要運行使用的OpenCL(平臺,devide,背景,隊列,緩存,內核程序的事, ...),並在此代碼後,我釋放一切。 我已經檢查過,這個時間的增加是由於在每次迭代中讀入兩個變量(distance_code和sumatorio),但是我必須這樣做,因爲我必須獲得適應值,這是一個順序指令,只能在內核已完成,所以......你能幫我嗎?我究竟做錯了什麼?
我希望能夠正確解釋我自己,謝謝。
注:我只與CPU一起工作。
'global_item_size'有多大? – matthias
global_item_size = 64 – Fran