Algorithm 有没有一种有效的方法来实现波前迭代器?(与物理无关。)

Algorithm 有没有一种有效的方法来实现波前迭代器?(与物理无关。),algorithm,f#,deep-learning,recurrent-neural-network,Algorithm,F#,Deep Learning,Recurrent Neural Network,事实上,运行循环NN而不按与原点的距离对其进行排序是可行的,但效率远远低于此。使用多个流时,如果我不按波前顺序启动内核,Cuda调度程序将被阻塞 对于NNs,我需要上面的内容,或者F#中的例子纯粹是为了上下文 我知道如何做二维,但对于三维和更多,我的想法是有点黑客。我想知道是否有一些优雅的方法可以进行波前迭代,类似于上面针对任意维度长度和维度数量的基于排序的方法?让x_len=49 // https://devblogs.nvidia.com/parallelforall/optimizing-

事实上,运行循环NN而不按与原点的距离对其进行排序是可行的,但效率远远低于此。使用多个流时,如果我不按波前顺序启动内核,Cuda调度程序将被阻塞

对于NNs,我需要上面的内容,或者F#中的例子纯粹是为了上下文

我知道如何做二维,但对于三维和更多,我的想法是有点黑客。我想知道是否有一些优雅的方法可以进行波前迭代,类似于上面针对任意维度长度和维度数量的基于排序的方法?

让x_len=49
// 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)
设y_len=9 设z_len=9 让我们预先分类= [| 求和=0到x_len+y_len+z_len do 对于x=0到最小和x_len do 对于y=0到最小(和-x)y_len do 设z=sum-x-y
如果z好的话,一个明显的方法就是有效地进行预排序,这只需要再进行一个拱形循环。我不明白。什么是预排序?类似于
对于sum=0到(49+9+9)do,对于x=0到min(sum,49),对于y=0到min(sum-x,9),对于z=0到min(sum-y-x,9)
let x_len = 49
let y_len = 9
let z_len = 9

let presort =
    [|
    for sum=0 to x_len+y_len+z_len do
        for x=0 to min sum x_len do
            for y=0 to min (sum-x) y_len do
                let z = sum-x-y
                if z <= z_len then yield (x,y,z)
                |]