目次: RISC-V
CoreMarkを以前(2019年7月5日の日記参照)測りましたが、ARM系のGCCのバージョンを上げたのと、x86系と、RISC-V系のFU740の計測結果を追加しました。FU540の値は以前のままです。
x86_64
AArch32/AArch64
RISC-V
動作周波数については後述します。
コンパイル条件は下記の通りです。
Ryzen 7はなぜかO2よりOfastの方が遅かった(O2: 41946, Ofast: 40442)ので、O2の結果を採用しました。RK3399はCA72とCA53の2種類のコアがあるので、taskset 0x1 ./coremarkのように実行するコアを固定して計測しています。
CoreMarkのIterations/Secの結果はCPUの動作周波数の影響を受けてしまうため、CPUの性能比較をする際はIterations/SecをCPU動作周波数で割った値を使うことが多いです。
SoC (x86) | CPU/micro arch | Iterations/Sec | GHz | CoreMark/MHz | Board/Machine |
---|---|---|---|---|---|
Ryzen 9 5900X | Zen 3 | 44345.89800 | 4.7 | 9.435 | |
Ryzen 7 5700X | Zen 3 | 42040.35874 | 4.6 | 9.139 | |
Ryzen 9 3950X | Zen 2 | 36140.22407 | 4.5 | 8.031 | |
Core i5 8250U | Cabylake R | 29237.62883 | 3.6 | 7.694 | ThinkPad E480 |
Core i7 6700 | Skylake | 26963.26256 | 3.8 | 7.489 | |
Pentium J4205 | Goldmont | 13319.12627 | 2.6 | 5.122 | ASRock J4205-ITX |
SoC (ARM) | CPU/micro arch | Iterations/Sec | GHz | CoreMark/MHz | Board/Machine |
A311D | CA73 | 12491.41215 | 2.2 | 5.677 | Khadas VIM3 |
A311D | CA53 | 5909.213000 | 1.8 | 3.282 | Khadas VIM3 |
RK3588 | CA76 | 18228.21728 | 2.4 | 7.595 | Radxa ROCK 5B |
RK3588 | CA55 | 6745.983074 | 1.8 | 3.747 | Radxa ROCK 5B |
RK3566 | CA55 | 6023.766497 | 1.6 | 3.764 | Radxa ROCK 3C |
RZ/V2H | CA55 | 4064.214591 | 1.1 | 3.694 | Yuridenki Kakip |
RK3399 | CA72 | 10218.15767 | 1.8 | 5.676 | Pine64 ROCKPro64 |
RK3399 | CA53 | 4622.852300 | 1.4 | 3.302 | Pine64 ROCKPro64 |
RK3328 | CA53 | 4215.259238 | 1.3 | 3.242 | Pine64 ROCK64 |
RK3288 | CA17 | 8594.421439 | 1.8 | 4.774 | ASUS tinkerboard |
BCM2837 | CA53 | 3877.973113 | 1.2 | 3.231 | Raspberry Pi 3B |
SoC (RISC-V) | CPU/micro arch | Iterations/Sec | GHz | CoreMark/MHz | Board/Machine |
Key Stone M1 | X60 | 6350.305969 | 1.8 | 3.527 | Milk-V Jupiter |
JH7110 | U74-MC | 5324.298161 | 1.5 | 3.549 | StarFive VisionFive 2 |
FU740 | U74-MC | 4134.509372 | 1.2 | 3.445 | SiFive HiFive Unmatched |
FU540 | U54-MC | 2255.130422 | 1.0 | 2.255 | SiFive HiFive Unleashed |
NS31A | NS31A | 58.164129 | 0.025 | 2.326 | Local RAM, FPGA(Digilent Arty A7-100T, Xilinx Artix-7) |
やはりx86系CPUの速さは圧倒的です。Ryzen 7は異次元の速さですし、ローエンド向けに思われがちなAtom系コアもARM Cortex-A72を圧倒しています。(12/28追記)Pentium J4205の動作周波数が間違っていた(1.5GHz → 2.6GHz)ので修正しました。
RISC-V勢はFU540(U54-MCコア)はかなり遅く、FU740(U74-MCコア)でやっとRK3328(Cortex-A53コア)などのSoCと並ぶくらいです。FU740を搭載したHiFive UnmatchedはPCと同じホームファクタのMini-ITXを採用しており、NVMe SSDやグラフィックカードが装着できる点などは非常に素晴らしいのですが……、PCの代わりに使用するとなると非力すぎて、RISC-V PCを名乗るにはまだ厳しそうですね。
LinuxでCPUの動作周波数を取得する方法は色々あって、イマイチ統一感がないですけれども、このベンチマークでは下記のようにしています。
FU740の動作周波数はCore PLL(/sys/kernel/debug/clk/corepll/clk_rateの値 = 1196000000)から得ました。ARM系はCPU周波数が負荷に応じて変化するため、yes > /dev/nullなどを起動してCPUに負荷をかけた状態で見ています。
もし私が何か勘違いしていてCPU動作周波数を間違えているとどうなるかというと、Coremark/MHzが間違った値になります。Iteration/Secは変わりません。
今日、東京や千葉で輪のような形で雨が降っていると教えてもらいました。本当だ……不思議な現象ですね。
この現象、調べてみると既に名前がついていて「ブライトバンド」と呼ぶそうです。かっこいい名前ですね。ブライトバンドについてはウェザーニュースの解説が非常にわかりやすかったです(参考: 秋田県の雨雲レーダーに映る 謎のドーナツ型の正体は? - ウェザーニュース)。
詳しくはぜひウェザーニュースの解説を読んでいただきたいですが、簡単に言えばレーダーが融解層(雪→雨に変わる部分)を捉えて過剰に反応している状態で、実際には強い雨が降っているとは限らないとのこと。
ブライトバンドが出ているときに降水量の過去情報を見ると、ブライトバンドは出たり消えたりするだけで、その場からほとんど動かないことがわかります。
30分経っても移動しない(松戸、取手、習志野の近辺のまま、横浜の輪は消えた)
天気予報システムはブライトバンド=強い雨雲と解釈して予想をするようで、輪が他の雨雲とともに移動するような予報を出しています。気象の専門家ではないので「それが何か問題でも?」に対する答えは持ち合わせていませんが……。
1時間後の予報、輪が移動している(習志野の近辺が右に流れている)
ブライトバンドの付近での局所予報は少し食い違うかもしれませんが、過去情報と予報を見比べても特に破綻しているようには見えませんし、ブライトバンドを雨雲とみなそうが、無視しようが大勢に影響はないのでしょう。
目次: 独自OS
最近、趣味&趣味からの発展で仕事でも独自OSを作成しています。独自OSの設計目標は下記の通りです。
最初の2つの項目は大抵トレードオフですが、3つ目の項目を活かして軽く&便利を両立させることが狙いです。
「便利、手軽」の実現のため、ソースコードレベルの互換性の確保を目指します。具体的にはLinux用に書かれたソースコードをそのままアクセラレータ用にコンパイル&実行できれば、プログラマから見てLinuxの使い勝手を実現できている、と言えるはずです。
一方で「軽く、速く」を実現するため、Linuxとのソース互換を目指しつつも、アクセラレータ向けに割り切った制限をいくつか設けます。
これらの制限が妥当かどうか?について今は結論は出ないので、実装して使って問題があれば今後修正したいと思います。アクセラレータやOSに詳しい方々の意見も聞いてみたいです。
アクセラレータに処理を依頼する際のインタフェースはいくつかありますが、いずれも定番ではなさそうです。今回はOpenCL風のAPIを採用しました。OpenCL規格に準拠はしませんが、ある程度(例えばclinfoに応答できる程度)のOpenCL APIを実装します(ホスト側のソースコードのリンク)。
ホストとアクセラレータ間のデータ移動や実行制御の方法も考える必要があります。ホスト側からアクセラレータ側に何か計算を依頼するケースと、もう一つアクセラレータ側のスタンドアローン実行(ホスト側から制御なしでアクセラレータ側のみ単独実行するモード)はデバッグの利便性を考えると、必須に近い機能です。
またホスト側に過度に依存しないように、ホスト側のAPIが気に入らなくなったら別のAPIを実装することができるように、アクセラレータ側の独自OSとは別のリポジトリに分離して実装します。
独自にOSを実装する道を選びました。既存のOSSを改造するより実装期間が短く済むと思ったくらいで、独自実装しなければならない強力な理由はないです。個人的な理由も入れて良ければ、独自OS実装に対する興味があったことが大きいです。
RTOSにLinux互換レイヤを積む方法、Linuxをダウンサイズする方法、などでも実現できるのではないでしょうか。Linuxをダウンサイズする方法だとスレッド周りの制約実現が難しいですかね……?やったことがないので何とも言えません。
そんなの簡単にできるよ、という方はぜひOS作成フレンズになりましょう。
目次: 独自OS
最近、趣味&趣味からの発展で仕事でも独自OSを作成しています。OSと呼ぶほどの機能はありませんが、位置的にはCライブラリよりハード寄りのいわゆるOSレイヤーです(ソースコードへのリンク)。
想定する動作環境は、複数プロセッサで構成されたシステムにおいて、片方がホスト、もう片方がアクセラレータとして動作する環境です。想定する制御方法は、ホスト側で実行したくない、時間がかかる処理をアクセラレータ側に任せて終わるのを待つ、シンプルなユースケースで下記のようになります。
このようなシステムにおいてPC系のプログラマが気軽にアクセラレータ側のソフトウェアを書ける環境が欲しい、という発想から、アクセラレータのプログラマの補助となるようなOSの作成が目的です。
独自OSの設計目標は下記の通りです。
最初の2つの項目は大抵トレードオフですが、3つ目の項目を活かして軽く&便利を両立させることが狙いです。
アクセラレータを動作させるという観点で見れば、わざわざ独自OSを作成せずとも既存のアクセラレータ用言語を使ったり、既存OSの転用でも動作させることができます。
既存のアクセラレータ用言語、CUDAやOpenCLですね。速度は最高だと思います。プログラマ視点から見ると、これら言語の習得には若干手間が掛かります。
LinuxなどPC系OSを転用する場合、使い勝手はPCそのものなので最高でしょう。しかしアクセラレータ向けとしては大規模で大げさでもあり、ハードウェアのリソース特にメモリがかなり必要です。
RTOSを転用するの場合、省メモリかつ大抵の実装は速度も速いです。しかし目的が違う(リアルタイム処理を記述するためのOS)ため、色々なOS独自ルールが存在します。PC系のプログラマには馴染みが薄いです。
手法 | 速度 | メモリ | 手軽さ |
---|---|---|---|
アクセラレータ用言語 | 〇 | 〇 | × |
PC系OS(Linuxなど) | △ | × | 〇 |
RTOS | 〇 | 〇 | △ |
独自OSでは使い慣れたC/C++ 言語が使えて、速さを殺さず、Linuxの使い勝手を可能な限り両立させることを目指します。
目次: RISC-V
NS31A Entry Kitを受け取ったら受領書を送り返してほしい、と言われているのですが、受領書は不思議な書類で、
受領書に関係していそうな前者2つについて質問したところ「あなたの住所を書いてくれ」という意味が分からん回答が返ってきました。質問の仕方が悪いのか、的の外し方から察するに「私に何を送ったか把握していない」可能性もありそうです。
と推理すると包装の問題とか、個人向け販売なのに受領書がB2B向け販売の仕様(検査票+受領票とセット)が少しは理解できます。
さておき質問を文章で説明するのは厳しそうなので、送られてきた書類をスキャンし赤い字で「ここですけど、どうしたら?」と書いて送ってみました。これならご理解いただけるはず。
付属していたDVDに書かれたデータも欠けていた(サンプルプログラムが入っていない)ので、問い合わせたら「内容が間違ってた、ごめん」的な返事とともに、後日DVDがもう1枚家に送られてきました。
個人向け販売チャネル第一号ってのはなかなか大変ですね。デバッグをしているような気分です。
< | 2022 | > | ||||
<< | < | 12 | > | >> | ||
日 | 月 | 火 | 水 | 木 | 金 | 土 |
- | - | - | - | 1 | 2 | 3 |
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
合計:
本日: