for(int=0; i<1,000,000; i++)
{
if(data[i]< 0)
data[i]= data[i] * 2;
}
大家好,
我想知道如果执行内存访问所需的时间是100纳秒,并且所有其他操作(算术,寄存器访问等)需要10纳秒,是否可以计算下面此算法的绝对速度?我很确定这个问题可以用来计算绝对速度。我知道我们确实有一个变量已经是Ta = 100纳秒,对吗?其余的缺失变量可以通过我在Java程序中编译后提供的代码行找到?我编译并运行它,但它并没有告诉我解决这个问题需要什么。有什么建议吗?
以下是我用来计算此算法绝对速度的公式:
T=Tna X Nna + Ta X Na;
Tna= the time to execute a memory nonaccess instruction;
Nna= the number of memory nonaccess machine language instructions executed;
Ta= the time to execute a memory access instruction;
Na= the number of memory access machine language instructions executed;
这是我将编译并运行的代码,以查看它是否会提供解决此问题所需的一些缺失变量。
答案 0 :(得分:0)
@dorakta如果您关注代码块中的操作分类。以下可能是一个起点。
第1行: for(int = 0; i&lt; 1,000,000; i ++)
我在for循环中变量,需要内存访问和休息操作。 这次执行1,000,000次
你有:
1000000 times of
2 - memory access (1 read and 1 assign)
1 - compare
1 - incr (depends. It could be -> 1 read and 1 add)
第3行: if(data [i]&lt; 0)
if语句中的data [i]是内存引用和比较操作。 这次执行1,000,000次
你有:
1000000 times of
2 - memory access
1 - compare
第4行: data [i] = data [i] * 2
您有:0到1000000次,具体取决于数据的值。 您可能想要计算最坏的情况。
Hence, 1000000 times.
2 - memory access (1 read and 1 assign)
1 multiply
希望它有所帮助!