我有以下代码
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 s(使用torch.Timer测量),这对我来说似乎非常高。
对于上下文,C是大小为(A,B)的FloatTensor,而(2,A,B)为gradOutput。处理器是AMD Opteron 4386,有16个内核,每个内核的缓存大小为2MB。
所以,在我看来,C,gradOutput,gradInput应该已经被缓存,所以对于这样一个短循环的4s对我来说似乎非常高。
任何人都有任何想法为什么它如此缓慢以及是否/如何提高性能?