软件工程——数独 最终Release版本性能测试结果
测试环境
- Windows10 64bit
- Intel VTune Profile
- AMD 2700x
sudoku.exe -c 1000000
生成1e6的数据量运行状况如下。
总用时
最耗时函数
void copySudoku(const Sudoku& src, char* dst) { int k = 0; for (int i = 1; i < N_ROW_SUDOKU; i++) { for (int j = 1; j < N_ROW_SUDOKU; j++) { dst[k++] = src[i][j] + '0'; dst[k++] = ' '; } dst[k - 1] = '\n';//行末无空格 } dst[k++] = '\n'; p_start_buff += k; return; }
if (is_end) { if (h_sudoku_txt) { WriteFile( h_sudoku_txt, SudokuPrinter::buff, SudokuPrinter::num_sudoku_in_buff * SudokuPrinter::num_bytes_of_sudoku - 2,//最后两个换行不写入,即最后一个数独后面没有空行 &written, NULL ); closeTxt(); } } else { if (h_sudoku_txt) WriteFile(h_sudoku_txt, SudokuPrinter::buff, SudokuPrinter::num_sudoku_in_buff * SudokuPrinter::num_bytes_of_sudoku, &written, NULL ); }
有效CPU利用率直方图
从下图可以看出生成数独环节CPU占用率并不高。
软件详细信息
程序占用内存仅为2MB
sudoku.exe -s problem.txt
求解1e6的数独,每个数独至少30个空,分析如下:
运行时间
最耗时函数
solveSudoku是求解数独的核心函数,也是占用时间最多的。
CPU利用率
从下图可以看出CPU利用率并不是很高。
软件详细信息
可以看出软件占用内存非常小,仅有4MB
总结
综合看来,数独生成和求解算法还是相当高效的。其中读取和写入并没有占据太多程序时间。