【发布时间】:2017-04-08 01:31:54
【问题描述】:
我还没有 CUDA 卡,我现在必须专注于 OpenCL。所以……我想我最好问问……
1.内核是否按照我调用它们的顺序执行?
如果我通过流 0 调用 A,通过流 1 调用 B,通过流 0 调用 C,通过流 1 调用 D,通过流 0 调用 E,是否确保设备按 A、B、C、D 的顺序查看内核?是吗?
如果我通过流 0 调用内核 A 和 B,然后通过流 1 调用内核 C,B 会阻塞 C 吗?我是否必须按 A、C、B 的顺序调用它们以允许 C 与 A 和 B 并发运行?
2。如果我希望内核同时运行,是否会有任何停顿或惩罚?
在 AMD 卡上,队列间依赖似乎非常昂贵(我可能错了。实际上我希望我错了。但是没有人能告诉我我是否正确。) 如果我有内核 A、B 和 C,而 A 和 B 是独立的,而 C 依赖于 A 和 B。在 AMD 卡上,如果我让 D 等待 A 或 B,将会有很大的延迟,这使得同步执行非常多几乎在所有情况下都更快。
我现在理解的是,一张 CUDA 卡只有一个计算队列。也就是说,我可以使用调用内核的顺序而不是 AMD 卡上的事件来表达依赖关系。会不会更高效甚至免罚?
【问题讨论】:
标签: concurrency parallel-processing cuda