最好以最可读和最易理解的方式编写代码,然后对其进行分析以查看瓶颈的真正位置。很多时候,您对哪里需要效率的概念与现实不符。
现代编译器在优化的许多方面都做得不错,而且循环过程本身似乎不太可能成为问题。也许您应该考虑专注于简化每个循环所做的计算。
否则,您将查看诸如逐行访问矩阵等内容,以便利用 C 使用的行主要存储顺序(请参阅此问题)。
您将希望在内部for
没有语句的情况下构建循环,if
因为 if 语句创建了所谓的“分支”。计算机基本上会猜测哪个选项是正确的,如果它是错误的,有时会付出高昂的代价。
要扩展该主题,您希望尽可能少地在 for 循环中做任何事情。您还需要使用静态限制来定义它,例如:
for(int i=1;i<100;i++) //This is better than
for(int i=1;i<N/i;i++) //this
静态限制意味着只需花费很少的精力来确定 for 循环是否应该继续运行。它们还允许您使用OpenMP来划分循环中的工作,这有时可以大大加快处理速度。这很简单:
#pragma omp parallel for
for(int i=0;i<100;i++)
而且,沃拉!代码是并行的。