gpt4 book ai didi

c - OpenCL如何保存和重用一些命令?

转载 作者:太空宇宙 更新时间:2023-11-04 04:58:54 24 4
gpt4 key购买 nike

我是 OpenCL 的新手。我正在尝试像 OpenGL 1 那样实现我自己的固定管道渲染器。我使用的是 OpenCL 的第一个版本,所以我不能在内核中调用任何内核。我已经毫无问题地创建了自己的三角形绘图功能。我想在像素级别对每个三角形进行并行化,所以我需要多次调用同一个内核。我可以像 OpenGL 1 中的系统那样创建显示列表吗?我可以用

画一个三角形
clEnqueueNDRangeKernel(command_queue,k_drawTriangle,1,NULL,&global_item_size,&local_item_size,0,NULL,NULL);

我应该在绘图后到处使用 clFlush 吗?或者我应该在什么时候使用它?

这里 clFlush 和 clFinish 是如何工作的?我可以将多个命令保存在我创建的单独命令队列中并一次又一次地使用这组命令吗?

有点像

Q = clCreateCommandQueue(context,device_id,0,&ret);

{
int i;
for(i=0; i<100; i++)
CLdrawTriangleD(Q,tri2i(0,0,400,200,0,400));
}

(CLdrawTriangleD 包含包含 Q 的 clEnqueueNDRangeKernel)

因此,例如,Q 间接定义了一组绘制模型的命令。

我不想了解有关 OpenCL 的所有想法。总结一下这个问题,关于 OpenCL,我唯一还想知道的是如何保存一些命令并在另一个上下文中调用这组相同的命令?在不清除命令列表的情况下一遍又一遍地调用 Q。

更好地总结主题:

如何在单个事件后将多个命令排入队列以乱序执行?如何在不删除命令队列成分的情况下随时触发该事件。

最佳答案

我认为您误解了 OpenCL 编程范例。 OpenCL 内核不是为了完成一项小任务(比如画一个三角形);它们用于执行同一任务的许多不同实例(例如绘制场景中的所有三角形),或者可以分解为许多小协作 Action 的单个大型任务。

所以,如果你有 100 个三角形要绘制,你会调用一个 draw_triangle 内核,但是,比如说,每个工作组处理一个三角形 - 所以你有 100 个工作组,每个工作组有一些进行并行工作的相关尺寸。

关于c - OpenCL如何保存和重用一些命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49954686/

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