gpt4 book ai didi

gcc - OpenCL,这是正常的执行时间吗?

转载 作者:行者123 更新时间:2023-12-04 19:21:57 27 4
gpt4 key购买 nike

我正在使用 OpenCL 研究一种算法,我需要测量它的并行和顺序版本的执行时间。因此,我使用外部循环来迭代这两个代码并测量它们的时间,但我得到了:

顺序:3.06 段

并行:269 段

我用于并行版本的代码是:

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 运行程序所需的所有东西(平台、设备、上下文、队列、缓冲区、内核……),在这段代码之后,我释放了所有东西。
我已经检查过这种时间的增加是由于在每次迭代中都读取了两个变量(distance_code 和 sumatorio),但我必须这样做,因为我必须获得适合度值,这是一个顺序指令,并且只能在内核具有完成了,所以...你能帮帮我吗?我究竟做错了什么?

我希望能正确解释自己,在此先感谢。

注意:我只使用 CPU。

最佳答案

启动这么多内核的开销超过了仅对 64 个数据项并行化 for 循环的好处。您需要重写您的问题,以便在大批量数据上启动相对较少的内核。在这种情况下,如果 OpenCL 编译器生成了适当的向量化机器代码,您会看到对顺序版本的改进。

此外,您应该检查 AMD's CodeXL或英特尔的 Offline Compiler如果生成的代码包含任何向量指令。

关于gcc - OpenCL,这是正常的执行时间吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14381247/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com