在給定的學校摘錄中,我被要求測量處理器的運行時間。 其中,我被問及測量訪問磁盤所花費的時間,並強烈建議在文件上使用函數。成功寫入結果訪問磁盤只有一次
因此,我想出了這個簡單的「解決方案」:
/* Time measurement function for accessing the disk.
returns time in nano-seconds upon success,
and -1 upon failure.
*/
double osm_disk_time(unsigned int iterations)
{
// Check for illegal input
iterations = (iterations == ILLEGAL_ITER_NUM) ? DEFAULT_ITER_NUM:iterations;
// Start measuring.
startTimeSuccess = gettimeofday(&timeStart, NULL);
for (unsigned int i = 0; i < iterations/ LOOP_FACTOR; ++i) {
//operation. (loop unrolling): Write a char and flush memory
if (fputs(LETTER_TO_WRITE, pFile) < SUCCESS || fflush(pFile) < SUCCESS)
{
return FAILURE;
}
if (fputs(LETTER_TO_WRITE, pFile) < SUCCESS || fflush(pFile) < SUCCESS)
{
return FAILURE;
}
if (fputs(LETTER_TO_WRITE, pFile) < SUCCESS || fflush(pFile) < SUCCESS)
{
return FAILURE;
}
}
// Stop measuring.
endTimeSuccess = gettimeofday(&timeEnd, NULL);
return returnValueChecker(startTimeSuccess, endTimeSuccess, iterations);
}
的問題是,我的測定時間爲顯著低於avrege。 根據我所做的一些研究,我瞭解多個「寫入」只能訪問一次磁盤,這可能是我的措施不準確的原因。 我不明白爲什麼會發生,我能做些什麼來解決這個問題。
(PS:returnValueChecker()只是檢查返回的值)。
我認爲是因爲OS/Program緩衝你的寫入效率更高。 – Neijwiert
在'fputs()'語句之後使用'flush()'。 –
也可以使用C++ 11嗎?因爲'std :: chrono :: high_resolution_clock',可能會更精確。 – Neijwiert