以前、ベアメタル版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上に比べると半分くらいです。
まだ他にも設定できるところがあるのかもしれません。
コメント