MetalPerformanceShaders MTLCommandBuffer работает параллельно - PullRequest
0 голосов

Я закодировал 100 команд в MTLCommandBuffer, и они обрабатываются одна за другой, как понимают в одном потоке.

for i in 0..<50 {
    filter1.encode(...)
    filter2.encode(...) // use result of the filter1
}

commandBuffer.commit()
commandBuffer.waitUntilCompleted()

, но есть ли способ запустить его в 50 потоках?

1 Ответ

0 голосов
/ 16 мая 2018

В общем, виды задач, которые вы выполняете на GPU, уже сильно распараллелены.Если это не распараллеливается, то делать это на GPU, вероятно, неуместно.Например, при обработке изображений работа для каждого пикселя будет выполняться параллельно с работой для множества других пикселей.Попытка работать с двумя изображениями одновременно обычно не позволяла бы завершить работу быстрее (если изображения не слишком малы).

Кроме того, Metal не обязательно может выполнять команды последовательно.Он должен выдавать результаты , как если бы они выполнялись последовательно, но если он может определить, что две команды независимы (например, они не касаются одних и тех же ресурсов), разрешается запускать их параллельно, предполагая, что GPUимеет запасную емкость.

...