我正在尝试测试各种磁盘访问模式的运行时,并注意到无论何时使用随机生成的数据集,执行所需的时间大约是平常的2.5倍,对于缓存和非缓存访问方法。对于所有其他访问模式,非高速缓存,直接到磁盘的访问具有相同的执行时间。随机访问是唯一相差很大的。
使用//testing stuff here
而不是accessPattern[i] = rand.nextInt(1000);
时,我的代码的accessPattern[i] = i * 2;
部分是否运行速度较慢?我将accessPattern []的元素一次一个地传递给测试部分中的另一个函数,但是我不明白为什么使用Random初始化数组会影响它。
private void testRandomAccesses( ){
SysLib.cout( "Random Access Test\n" );
Random rand = new Random();
int accessPattern[] = new int[400];
for ( int i = 0; i < 400; ++i )
accessPattern[i] = rand.nextInt(1000); //slow execTime
//accessPattern[i] = i * 2; //fast execTime
startTime = new Date().getTime();
//testing stuff here
for ( int i = 0; i < 400; ++i )
SysLib.rawwrite( accessPattern[i], testBlock );
endTime = new Date().getTime();
execTime = endTime - startTime;
}