日々

link permalink

Unleashed の動作周波数

SiFive FU540 のコア動作周波数は簡単に見ることはできなかったので、求め方をメモしておきます。

アドレス 0x10000000 に PRCI(Power Reset Clocking Interrupt)のレジスタがありますので、実機でその辺をダンプします。

突然ダンプしますって言われても、どうしたら良いんですか?という方は拙作の memaccess(GitHub へのリンク)をお使いください。使い慣れたツールがあれば、RISC-V 上でビルドすれば使えます(Unleashed は Linux が動くので)。

私の持っている HiFive Unleashed では下記のようになっていました。

PRCI レジスタ領域のダンプ
10000000 c0000000 82110ec0 00000000 82110dc0
10000010 80000000 00000000 00000000 82128ec0
10000020 80000000 00000000 0000002f 00000004

COREPLL 周波数を司るレジスタは、corepllcfg0(offset: 0x04)です。値は 0x82110ec0 ですね。

  • [ 5: 0] divr = 0x0
  • [14: 6] divf = 0x3b = 59
  • [17:15] divq = 0x2
  • [20:18] range = 3'b100 => 33MHz

レジスタの各フィールドはこんな意味になっています。計算式は、

COREPLL 周波数の計算式
COREPLL = 33.33MHz / (divr + 1) * 2 * (divf + 1) / 2 ^ divq

ですので、上記の値を当てはめますと、

COREPLL 周波数
COREPLL
= 33.33MHz / (0 + 1) * 2 * (59 + 1) / 2 ^ 2
= 33.33 * 120 / 4 = 999.99MHz ≒ 1GHz

すなわち 1GHz 駆動であることがわかります。

ウソは書いていないつもりですが、情報源が気になる方は FU540 の仕様書 "Chapter.7 Cloking and Reset" の章を見てください。

FU540 の仕様書は SiFive のサイト(FU540 のサイトへのリンク)から、誰でもゲットできます。ページの下側かつ左側にある "FU540-C000 Manual" と書いてあるリンクです。

ARM の場合は簡単

Unleashed は面倒でしたが、Rockchip 系(に限らないと思いますが)の SoC は /sys/devices/system/cpu/cpu*/cpufreq/cpuinfo_max_freq を見ると簡単に最大動作周波数を取得できます。

RK3328 の各コアの最大動作周波数
$ for i in /sys/devices/system/cpu/cpu*/cpufreq/cpuinfo_max_freq ; do echo $i; cat $i; done
/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq
1296000
/sys/devices/system/cpu/cpu1/cpufreq/cpuinfo_max_freq
1296000
/sys/devices/system/cpu/cpu2/cpufreq/cpuinfo_max_freq
1296000
/sys/devices/system/cpu/cpu3/cpufreq/cpuinfo_max_freq
1296000
RK3399 の各コアの最大動作周波数
$ for i in /sys/devices/system/cpu/cpu*/cpufreq/cpuinfo_max_freq ; do echo $i; cat $i; done
/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq
1416000
/sys/devices/system/cpu/cpu1/cpufreq/cpuinfo_max_freq
1416000
/sys/devices/system/cpu/cpu2/cpufreq/cpuinfo_max_freq
1416000
/sys/devices/system/cpu/cpu3/cpufreq/cpuinfo_max_freq
1416000
/sys/devices/system/cpu/cpu4/cpufreq/cpuinfo_max_freq
1800000
/sys/devices/system/cpu/cpu5/cpufreq/cpuinfo_max_freq
1800000

簡単で良いですね。こういう細かい使い勝手は RISC-V はこれからでしょうか。とはいえ世界は RISC-V 旋風が吹き荒れているそうなので、次第に充実していくことでしょう。

メモ: 技術系の話は Facebook から転記しておくことにした。大幅に追記。

[編集者: すずき]
[更新: 2019年 7月 6日 01:16]
link 編集する

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



link permalink

ARM と RISC-V で CoreMark 対決

先日購入した HiFive Unleashed が異様に遅く感じるので、手持ちの 64bit コア同士でベンチマーク対決をしてみました。以前、モナコインのマイナーでベンチマークしたとき(2019年 5月 27日参照)は、Cortex-A53 の 1/4 くらいの性能でした。

  • Rockchip RK3399(Cortex-A72 / 1.8GHz x 2, Cortex-A53 / 1.4GHz x 4)
  • Rockchip RK3328(Cortex-A53 / 1.3GHz x 4)
  • SiFive FU540(Rocket / 1GHz x 4)

ベンチマークは CoreMark を使いました。コンパイル条件は下記の通りです。

  • RK3399, RK3328: GCC-6.3.0 Ofast
  • FU540: GCC-8.3.0 Ofast

RK3399, RK3328 は Debian arm64 Stable を使っています。Stable は RISC-V に対応していませんので、FU540 だけは Debian riscv64 Unstable を使っています。

測定の結果は、

  • RK3399: Iterations/Sec : 10242.753252
  • RK3328: Iterations/Sec : 4427.390791
  • FU540: Iterations/Sec : 2255.130422

RK3328 と FU540 は 2倍の差です。動作周波数の差は 1.3倍ですから、インオーダーのコア同士にしては性能差があります。

RK3399 は異様に速いです。もしかすると A72 側で動いているかもしれません。CoreMark は特定の CPU に張り付ける方法が良くわからないですね……。

メモ: 技術系の話は Facebook から転記しておくことにした。多少追記。

[編集者: すずき]
[更新: 2019年 7月 6日 00:41]
link 編集する

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



こんてんつ

open/close wiki
open/close Java API

過去の日記

open/close 2002年
open/close 2003年
open/close 2004年
open/close 2005年
open/close 2006年
open/close 2007年
open/close 2008年
open/close 2009年
open/close 2010年
open/close 2011年
open/close 2012年
open/close 2013年
open/close 2014年
open/close 2015年
open/close 2016年
open/close 2017年
open/close 2018年
open/close 2019年
open/close 過去日記について

その他の情報

open/close アクセス統計
open/close サーバ一覧
open/close サイトの情報