Any*_*orn 1 language-agnostic algorithm performance loops collapse
在某些应用程序中,我需要将嵌套循环折叠成一个,同时保留单个索引信息.
for j in N:
for i in M:
... A(i,j) ...
// Collapse the loops
for ij in MN:
... A(i,j) ...
Run Code Online (Sandbox Code Playgroud)
所以看了很明显的方法来恢复i,j从ij使用除法/模(昂贵的操作)和使用if语句(打破矢量化,分支预测问题).最后我提出了以下(使用C风格的比较) ):
j += (i == m)
i *= (i != m)
++i, ++ij
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法呢?谢谢
一般来说,如上所述,它没有提供折叠循环的性能优势.
编译器有时会崩溃这样的循环,但通常是以意想不到的方式.
在特定语言或特定平台上,您可以通过以下方式加速循环:
但在所有情况下,您都必须对代码进行分析,以确保这些努力是有道理的.
一般来说,根据我的经验,这样的嵌套循环主要由:
但这可能不适用于您的问题域和平台的建议. 简介!