循环在torch中似乎比它应该的慢得多。

我有一段如下的代码,位于Torch的自定义模块中。

for i=1,A do
    for j=1,B do
        self.gradInput:narrow(1, self.C[i][j], 1):add(gradOutput[2][i][j])
    end
end

当A=18K,B=30时,这个循环占用了大约4秒的时间(使用torch.Timer测量),这似乎对我来说太高了。

为了提供背景,C是大小为(A,B)的FloatTensor,gradOutput是(2,A,B)的。处理器是AMD Opteron 4386,每个处理器都有16个核心,每个核心的缓存大小为2MB。

因此,我认为C,gradOutput和gradInput应该已经被缓存,所以对于这么短的循环来说,4秒的时间似乎令人难以置信。

有人有任何想法,为什么速度如此之慢,以及我如何改善性能?

点赞