Raspberry Pi Zeroのキャッシュ・分岐予測・クロック設定

以前、ベアメタル版MicroPythonの速度がRaspbian版に比べて非常に遅いというベンチマーク結果を載せました。

Raspberry Pi版MicroPythonのベンチマークテスト(2): 楽しくやろう。

遅い原因は、キャッシュ設定やクロックだろうなあとは思っていたのですが、なかなか試す暇がなく、今日ようやく実験してみました。

ベンチマークは、とりあえずperformanceTestだけを使いました。
これは、以下のような「+1を10秒間やり続ける」という単純なループです。

キャッシュ設定と分岐予測はCP15レジスタのbit2, 11, 12をオンにすることで、クロックはSDカードに置くconfig.txtに指定することで、それぞれ設定できます。
クロックの設定は今回は、config.txtにこちらに載っていた以下の記載を追加してみます。

fake_vsync_isr=1
framebuffer_swap=0
gpu_mem=48
init_emmc_clock=100000000
arm_freq=1000
gpu_freq=300
core_freq=400
sdram_freq=450

以下、それぞれの設定変更の効果です。

(1)標準(CPU=700MHz、システムクロック=250MHz):
>>> performanceTest()
Count: 608061

(2)データキャッシュON+命令キャッシュON:
>>> performanceTest()
Count: 1277513

(3)2に加えて分岐予測ON:
>>> performanceTest()
Count: 1316526

(4)3に加えてクロックアップ:(CPU=1GHz、システムクロック=400MHz)
>>> performanceTest()
Count: 1984803

(5)Raspbian:
>>> performanceTest()
Count: 5503852

という具合に、無印に比べたら3倍以上高速化しましたが、それでもRaspbian上に比べると半分くらいです。
まだ他にも設定できるところがあるのかもしれません。

コメント