-
sequential:顺序执行
-
tomasulo:tomasulo算法,尝试了分支预测
由于 JAL 指令和 JALR 指令是永远预测正确和永远预测错误,不计入正确率的计算。这里只统计所有的 branch 类型指令
| 测试点 | 总预测数 | 预测正确数 | 预测正确率 | 总时钟周期 |
|---|---|---|---|---|
| array_test1 | 22 | 10 | 0.454545 | 285 |
| array_test2 | 26 | 13 | 0.5 | 315 |
| basicopt1 | 155139 | 63642 | 0.410226 | 1068921 |
| bulgarian | 71493 | 35289 | 0.493601 | 990137 |
| expr | 111 | 69 | 0.621622 | 879 |
| gcd | 120 | 45 | 0.375 | 893 |
| hanoi | 17457 | 8732 | 0.5002 | 231053 |
| lvalue2 | 6 | 2 | 0.333333 | 80 |
| magic | 67869 | 31801 | 0.468564 | 783950 |
| manyarguments | 10 | 2 | 0.2 | 108 |
| multiarray | 162 | 132 | 0.814815 | 2124 |
| naive | 0 | 0 | / | 34 |
| pi | 39956380 | 23066734 | 0.577298 | 207718315 |
| qsort | 200045 | 140018 | 0.699933 | 1722449 |
| queens | 77116 | 28362 | 0.367784 | 849598 |
| statement_test | 202 | 82 | 0.405941 | 1754 |
| superloop | 435027 | 55272 | 0.127054 | 2085385 |
| tak | 60639 | 15160 | 0.250004 | 2137393 |
初始所有的都是强不跳转,取指令的后12位寻址
| 测试点 | 总预测数 | 预测正确数 | 预测正确率 | 总时钟周期 |
|---|---|---|---|---|
| array_test1 | 22 | 13 | 0.590909 | 290 |
| array_test2 | 26 | 16 | 0.615385 | 317 |
| basicopt1 | 155139 | 124121 | 0.800063 | 962646 |
| bulgarian | 71493 | 66218 | 0.926217 | 422274 |
| expr | 111 | 94 | 0.846847 | 805 |
| gcd | 120 | 82 | 0.683333 | 830 |
| hanoi | 17457 | 10791 | 0.618147 | 222831 |
| lvalue2 | 6 | 4 | 0.666667 | 81 |
| magic | 67869 | 51597 | 0.760244 | 697499 |
| manyarguments | 10 | 8 | 0.8 | 94 |
| multiarray | 162 | 134 | 0.82716 | 2103 |
| naive | 0 | 0 | / | 34 |
| pi | 39956380 | 32773103 | 0.820222 | 169051727 |
| qsort | 200045 | 176402 | 0.881812 | 1528621 |
| queens | 77116 | 53464 | 0.693293 | 730904 |
| statement_test | 202 | 136 | 0.673267 | 1640 |
| superloop | 435027 | 399334 | 0.917952 | 1348670 |
| tak | 60639 | 44754 | 0.73804 | 2057794 |
冷静分析一下,发现如果取最后12位,所有branch语句的后7位都是相同的,跳转pc的长度由于是4的倍数,所以还有一位永远是0,最后12位其实只有4位有用,冲突率肉眼可见的高。
分(hu)析(zhou)了一下之后取了[22:20],[17:9]
另外把计数器的初始状态改成了弱不跳转。
(于是成功拉低了前两个点的正确率)
| 测试点 | 总预测数 | 预测正确数 | 预测正确率 | 总时钟周期 |
|---|---|---|---|---|
| array_test1 | 22 | 12 | 0.545455 | 287 |
| array_test2 | 26 | 15 | 0.576923 | 323 |
| basicopt1 | 155139 | 127840 | 0.824035 | 964592 |
| bulgarian | 71493 | 67527 | 0.944526 | 415445 |
| expr | 111 | 94 | 0.846847 | 795 |
| gcd | 120 | 81 | 0.675 | 825 |
| hanoi | 17457 | 10667 | 0.611044 | 222808 |
| lvalue2 | 6 | 4 | 0.666667 | 81 |
| magic | 67869 | 53220 | 0.784158 | 686037 |
| manyarguments | 10 | 6 | 0.6 | 101 |
| multiarray | 162 | 135 | 0.833333 | 2087 |
| naive | 0 | 0 | / | 34 |
| pi | 39956380 | 32925342 | 0.824032 | 172694481 |
| qsort | 200045 | 174888 | 0.874243 | 1529793 |
| queens | 77116 | 53393 | 0.692373 | 731626 |
| statement_test | 202 | 123 | 0.608911 | 1709 |
| superloop | 435027 | 408156 | 0.938231 | 955290 |
| tak | 60639 | 44755 | 0.738056 | 2057790 |
总预测数较大的时候相对于二位饱和计数器有明显提升
正确率根据初始状态的设置略有差异,但对于比较大的测试点基本稳定
| 测试点 | 总预测数 | 预测正确数 | 预测正确率 | 总时钟周期 |
|---|---|---|---|---|
| array_test1 | 22 | 12 | 0.545455 | 296 |
| array_test2 | 26 | 13 | 0.5 | 341 |
| basicopt1 | 155139 | 136541 | 0.88012 | 918145 |
| bulgarian | 71493 | 67410 | 0.94289 | 416025 |
| expr | 111 | 85 | 0.765766 | 851 |
| gcd | 120 | 73 | 0.608333 | 884 |
| hanoi | 17457 | 15097 | 0.864811 | 199128 |
| lvalue2 | 6 | 4 | 0.666667 | 81 |
| magic | 67869 | 55508 | 0.81787 | 674091 |
| manyarguments | 10 | 8 | 0.8 | 94 |
| multiarray | 162 | 107 | 0.660494 | 2224 |
| naive | 0 | 0 | / | 34 |
| pi | 39956380 | 33311012 | 0.833684 | 170892766 |
| qsort | 200045 | 183338 | 0.916484 | 1492524 |
| queens | 73721 | 53694 | 0.728341 | 683265 |
| statement_test | 202 | 134 | 0.663366 | 1640 |
| superloop | 435027 | 413764 | 0.951123 | 871505 |
| tak | 60639 | 45906 | 0.757038 | 2054270 |
如果只截取预测数大于10000的测试点
| 测试点 | 总预测数 | 预测正确数 | 预测正确率 | 总时钟周期 |
|---|---|---|---|---|
| basicopt1 | 155139 | 136541 | 0.88012 | 918145 |
| bulgarian | 71493 | 67410 | 0.94289 | 416025 |
| hanoi | 17457 | 15097 | 0.864811 | 199128 |
| magic | 67869 | 55508 | 0.81787 | 674091 |
| pi | 39956380 | 33311012 | 0.833684 | 170892766 |
| qsort | 200045 | 183338 | 0.916484 | 1492524 |
| queens | 73721 | 53694 | 0.728341 | 683265 |
| superloop | 435027 | 413764 | 0.951123 | 871505 |
| tak | 60639 | 45906 | 0.757038 | 2054270 |