Macos 金属计算内核的并行执行

Macos 金属计算内核的并行执行,macos,gpu,metal,Macos,Gpu,Metal,比方说,我有大约10个内核,我在一个mtlcomputercommandencoder中编码,这10个内核在考虑的一组数据上运行 我有多组这些数据,比如说5组,我想在所有单独的数据集上执行这10个内核。不!我无法将这些数据集合并为单个数据集 一种简单的方法是循环所有数据集,并逐个执行每个数据集上的所有10个内核 我要寻找的是一种方法,我可以告诉金属,这些是独立的数据集,可以并行执行。也就是说,我希望在GPU上同时运行所有内核,而不是连续5次编码10个内核 CUDA提供流来实现这种行为。有没有类似

比方说,我有大约10个内核,我在一个
mtlcomputercommandencoder
中编码,这10个内核在考虑的一组数据上运行

我有多组这些数据,比如说5组,我想在所有单独的数据集上执行这10个内核。不!我无法将这些数据集合并为单个数据集

一种简单的方法是循环所有数据集,并逐个执行每个数据集上的所有10个内核


我要寻找的是一种方法,我可以告诉金属,这些是独立的数据集,可以并行执行。也就是说,我希望在GPU上同时运行所有内核,而不是连续5次编码10个内核

CUDA提供
来实现这种行为。有没有类似的金属提供

我知道存在
MTLDispatchType
,将其设置为
MTLDispatchTypeConcurrent
,将意味着同时运行我的10个内核,但这不是要求


谢谢

“我想在GPU上同时运行所有内核,而不是连续5次编码10个内核。”为什么你认为这两个内核是冲突的。编码和运行是两件独立的事情。将命令编码到命令缓冲区。这还没有运行它们。当您提交命令缓冲区时,它将被调度并运行。如果使用
MTLDispatchTypeConcurrent
,则缓冲区中的所有命令(无论以何种顺序编码)都可以并发执行(直到GPU的容量)。@kenthomass当我说时,它们是按顺序运行的,以理解默认的
MTLDispatchType
MTLDispatchTypeSerial
。,还是错了
MTLDispatchTypeSerial
表示所有命令都是按顺序执行的,这意味着没有并发?是的,
MTLDispatchTypeSerial
会使命令按顺序运行。因此,只需使用
MTLDispatchTypeConcurrent
。你说它不符合你的要求,但我觉得它符合你的要求。“你为什么不这么认为?”肯特霍马斯说,因为它有1、2、3个内核。。10, 11, 12... 20我很好,2和11,12,13同时运行。。。20但是,我想确保2在1之后按顺序运行,始终,以确保2始终从1接收更新的数据。根据5个数据集对内核1进行编码,对输出缓冲区上的内存屏障进行编码,根据5个数据集对内核2进行编码,对内存屏障进行编码,等等。