結論から言うと、このレジスタを操作する意義は薄い。どう操作しようが、大した差は出なかったからだ。しかし、僅かながらもパフォーマンスを向上させる設定が存在したので、それについて検証していく。
このレジスタの初期値は40hであり、リードオンリービットは無い。一般に流布されている設定は60h、D0h、F0hが有名であり、定番はD0hのようだ。
標準状態でのパフォーマンスは以下の通りである。
値:40h[01000000b]
Access| Unbuffered Access[MB/sec] | Buffered
Access[MB/sec]
Size | Read Write
RD/M/WR| Read Write
RD/M/WR
------+-----------------------------+-----------------------------
4K | 91.382 60.238
89.798| 2393.189 2388.514 955.406
8K | 93.551 61.225
90.356| 2390.849 2388.514 953.729
16K | 92.878 60.959
91.760| 2389.681 2388.514 953.729
32K | 93.541 60.882
91.079| 2375.177 2333.816 952.105
64K | 93.729 61.056
91.205| 1590.854 792.961 795.282
128K | 93.686 60.977
91.412| 1591.081 596.223 795.338
256K | 93.634 61.041
91.487| 1590.644 530.362 795.237
512K | 93.651 61.102
56.959| 328.800 109.549 165.684
1024K | 93.719 61.093
47.883| 93.704 78.401 47.875
2048K | 93.700 61.085
44.351| 93.715 68.658 44.347
4096K | 93.705 61.075
42.769| 93.717 64.629 42.778
8192K | 93.718 61.085
42.028| 93.715 62.802 42.029
次に、ビットごとの検証に入る。まずは00h。
値:00h[00000000b]
Access| Unbuffered Access[MB/sec] | Buffered
Access[MB/sec]
Size | Read Write
RD/M/WR| Read Write
RD/M/WR
------+-----------------------------+-----------------------------
4K | 71.775 21.839
70.794| 2392.940 2388.266 955.307
8K | 72.871 21.782
71.703| 2390.601 2388.266 953.630
16K | 73.042 21.761
71.980| 2389.433 2388.266 953.630
32K | 73.226 21.749
72.031| 2374.931 2333.573 952.330
64K | 73.325 21.738
72.076| 1590.689 792.879 795.199
128K | 73.315 21.735
71.998| 1590.915 596.161 795.256
256K | 73.292 21.732
72.056| 1590.479 530.307 795.155
512K | 73.314 21.732
41.170| 328.545 41.755 74.138
1024K | 73.333 21.732
33.910| 73.304 28.588 33.911
2048K | 73.319 21.734
31.152| 73.311 24.695 31.155
4096K | 73.311 21.734
29.943| 73.312 23.118 29.942
8192K | 73.306 21.732
29.369| 73.302 22.403 29.369
とんでもなく遅くなっている。他のビットも1本だけ立てて試した結果(ベンチ結果は割愛する)、判明したのは、
1、ビット6が0である場合はパフォーマンスが極端に低下する。
2、下位4ビットはパフォーマンスに影響しない。
という2点である。従って、下位ニブルは初期値通りに0として、上位ニブルの検証に入る。前提として、ビット6は1でなければならないので、これと他のビットの挙動を組み合わせる。
値:50h[01010000b]
Access| Unbuffered Access[MB/sec] | Buffered Access[MB/sec]
Size | Read Write
RD/M/WR| Read Write
RD/M/WR
------+-----------------------------+-----------------------------
4K | 92.596 61.298
90.637| 2393.184 2388.510 955.404
8K | 94.906 60.957
91.343| 2390.844 2388.510 953.727
16K | 94.649 61.344
92.519| 2389.676 2388.510 953.727
32K | 94.538 61.289
92.706| 2375.172 2333.811 952.427
64K | 94.490 61.339
92.462| 1590.851 792.959 795.280
128K | 94.688 61.360
92.486| 1591.077 596.222 795.337
256K | 94.627 61.349
92.538| 1590.641 530.361 795.236
512K | 94.640 61.344
57.589| 328.751 110.050 167.423
1024K | 94.687 61.361
48.454| 94.666 78.766 48.447
2048K | 94.672 61.381
44.887| 94.677 68.980 44.885
4096K | 94.667 61.377
43.296| 94.740 64.968 43.295
8192K | 94.666 61.376
42.536| 94.655 63.133 42.541
僅かだが、どのビットを立ててもパフォーマンスの向上は見られた。この中ではビット5を立てた場合が一番向上率が高い。有名な60hの設定もあながち間違いではないと言うことだ。
次に、これと他の2ビットとの組み合わせを検証する。
値:70h[01110000b]
Access| Unbuffered Access[MB/sec] | Buffered Access[MB/sec]
Size | Read Write
RD/M/WR| Read Write
RD/M/WR
------+-----------------------------+-----------------------------
4K | 93.113 60.217
91.010| 2393.418 2388.743 955.497
8K | 93.495 61.011
92.961| 2391.078 2388.743 953.821
16K | 94.453 61.381
92.567| 2389.910 2388.743 953.821
32K | 94.803 61.437
92.806| 2375.405 2334.039 952.521
64K | 94.844 61.487
92.763| 1591.006 793.037 795.358
128K | 94.949 61.481
92.885| 1591.233 596.280 795.414
256K | 94.913 61.464
92.834| 1590.796 530.413 795.313
512K | 94.924 61.490
57.772| 328.739 110.190 167.890
1024K | 94.973 61.471
48.575| 94.956 78.976 48.565
2048K | 94.932 61.497
44.989| 94.954 69.164 44.992
4096K | 94.985 61.499
43.391| 94.946 65.110 43.393
8192K | 94.973 61.497
42.633| 94.941 63.232 42.639
値:D0h[11100000b]
Access| Unbuffered Access[MB/sec] | Buffered Access[MB/sec]
Size | Read Write
RD/M/WR| Read Write
RD/M/WR
------+-----------------------------+-----------------------------
4K | 93.135 60.224
91.614| 2393.179 2388.505 955.402
8K | 95.490 61.592
92.070| 2390.839 2388.505 953.725
16K | 95.130 61.622
93.010| 2389.671 2388.505 953.725
32K | 95.741 61.457
93.354| 2375.168 2333.806 952.426
64K | 95.331 61.513
93.407| 1590.848 792.958 795.278
128K | 95.514 61.531
93.376| 1591.074 596.221 795.335
256K | 95.521 61.542
93.423| 1590.637 530.360 795.234
512K | 95.523 61.529
57.769| 328.469 110.247 168.522
1024K | 95.538 61.548
48.511| 95.546 78.992 48.511
2048K | 95.548 61.556
44.925| 95.552 69.145 44.914
4096K | 95.541 61.541
43.302| 95.544 65.152 43.311
8192K | 95.546 61.534
42.545| 95.546 63.297 42.542
値:F0h[11110000b]
Access| Unbuffered Access[MB/sec] | Buffered Access[MB/sec]
Size | Read Write
RD/M/WR| Read Write
RD/M/WR
------+-----------------------------+-----------------------------
4K | 93.714 61.408
94.186| 2393.179 2388.505 955.402
8K | 94.609 61.094
92.619| 2390.839 2388.505 953.725
16K | 95.506 61.427
93.353| 2389.671 2388.505 953.725
32K | 95.593 61.438
93.656| 2375.168 2333.806 952.426
64K | 95.810 61.494
93.782| 1590.848 792.958 795.278
128K | 95.812 61.496
93.795| 1591.074 596.221 795.335
256K | 95.880 61.549
93.750| 1590.637 530.360 795.234
512K | 95.862 61.538
57.907| 328.734 110.289 169.055
1024K | 95.868 61.500
48.629| 95.876 78.991 48.627
2048K | 95.867 61.529
45.016| 95.866 69.180 45.014
4096K | 95.874 61.537
43.403| 95.869 65.133 43.406
8192K | 95.876 61.538
42.637| 95.876 63.288 42.638
どう設定しても差は僅かである。一応、最速はF0hであり、筆者もこれを採用している。次点はD0h、以下70h、60hと続く。
しかし、繰り返しになるが、この程度の向上では無茶をする意味は余りない。他の設定を煮詰めた後で、余裕があれば設定する程度に留めたほうが賢明であろう。