gpt4 book ai didi

java - 代码优化导致执行速度变慢 - 需要解释

转载 作者:行者123 更新时间:2023-12-01 12:03:10 25 4
gpt4 key购买 nike

public class Zigzag{
public static void zigzag_optimizated(int n, int m) {
int length = 2*m;
int localIndex[] = new int[n];
for(int i = 0; i<n; i++){
localIndex[i] = i % length;
}
for (int i = 0; i <= m; i++) {
for (int j = 0; j < n; j++) {
if (localIndex[j]==i || localIndex[j] == length-i)
assert true;
// System.out.print('*');
else
assert true;
//System.out.print('-');
}
//System.out.println();
assert true;
}
}
public static void zigzag(int n, int m) {
for (int i = 0; i <= m; i++) {
for (int j = 0; j < n; j++) {
int k = j % (2*m);
char c = '-';
if (k==i || k == 2*m-i) c = '*';
assert true;
//System.out.print(c);
}
assert true;
//System.out.println();
}
}
public static void main(String args[]){
final int n = 5000000;
long start = System.nanoTime();
zigzag(n, n);
long time = System.nanoTime() - start;
long start2 = System.nanoTime();
zigzag_optimizated(n, n);
long time2 = System.nanoTime() - start2;
System.out.println();
System.out.println("Time1:" + time);
System.out.println("Time2:" + time2);

}
}

两个函数具有相同的算法,它将锯齿形板打印到屏幕上。在优化版本中,k保存在数组中以避免重新计算,提取2*m。我将 System.out.println() 更改为 assert true; 以获得更快、更准确的基准测试,但是当我进行基准测试时,原始版本总是运行得更快(使用n足够大) enter image description here

最佳答案

n 有多大才能看出差异?

如果 n 足够大,则数组太大而无法将其保留在 CPU 缓存中 - 计算 j % (2*m) 然后从 RAM 访问它会更快(60-100 纳秒)。

参见 Scott Mayers - How CPU Cache works and why you care -

关于java - 代码优化导致执行速度变慢 - 需要解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27855297/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com