// https://devblogs.nvidia.com/parallelforall/optimizing-recurrent-neural-networks-cudnn-5/
// The last optimization from the above post. This is a sorting based implementation.
// I can't think of anything more elegant that a state machine at the moment
let wavefront_order =
[|
for x=0 to 49 do
for y=0 to 9 do
for z=0 to 9 do
yield (x,y,z)
|]
|> Array.sortBy (fun (x,y,z) -> x+y+z)
Фактически, работа с повторяющимся NN без сортировки по расстоянию от источника будет работать, но будет не так эффективна. Используя несколько потоков, планировщик Cuda будет засорен, если я не буду запускать ядра в порядке волнового фронта.Существует ли эффективный способ создания итератора волнового фронта? (Не связано с физикой.)
Что мне нужно выше для NN, или пример, находящийся в F #, является чисто контекстом.
Я знаю, как это сделать для двух измерений, но для 3D и более, все, что я имею в виду, немного хаки. Мне было интересно, есть ли какой-то изящный способ проведения итерации волнового фронта, аналогичный описанному выше методу сортировки для произвольных размеров размеров и количества измерений?
Хорошо, что один очевидный подход был бы эффективен для предварительной сортировки, которая требовала бы только одного более сложного цикла. –
Не понимаю. Что такое сортировка? –
что-то вроде 'для sum = 0 to (49 + 9 + 9) do, для x = 0 - min (сумма 49), для y = 0 - min (sum-x, 9), при z = 0 - min (сумма-ух, 9) ' –