1.3K Views
January 26, 22
スライド概要
フィックスターズならではの「FPGA」に関する高速化手法、 効率的な開発ノウハウ、苦労話などについてお話しいたします。
<講演内容>
1、FPGA の論理を Chisel でゴリゴリ開発してみた話
一般的に論理回路を記述するには VHDL や Verilog が使われますが、メジャーなプログラミング言語の開発支援環境と比較して貧弱であることは否めません。
高位合成ではなく、クロック単位での論理をゴリゴリ書きたいけども、 VHDL も Verilog も書きたくない。
そこで、UC Berkeley が開発している Chisel3 を用いて開発を行った経験をもとに、そのメリットやデメリット、開発のノウハウをお伝えしたいと思います。
2、Vitisのアクセラレーション・アプリケーション開発をエッジで思う存分活用したい
アブストラクト:Vitisのアクセラレーション・アプリケーション開発はデータセンターなどで主に使用されますが、エッジ開発に使う方法を試行錯誤しました。
プラットフォームに例えばカメラ・インターフェース回路とディスプレイ出力回路を搭載して、ハードウェア・カーネルで画像フィルタを実装することができれば、ソフトウェア技術者の方でも画像システムが構築できるようになると思います。
今回はその第1歩として、Vitisアプリケーション・アクセラレーション開発のハードウェア・デザインにaxi_dmaとメディアン・フィルタIPを実装し、ハードウェア・カーネルとしてソーベルフィルタを実装しました。
KV260でノイズ入りの画像をプラットフォーム上のメディアン・フィルタでノイズを消して、ハードウェア・カーネルのソーベル・フィルタでエッジを検出する実例を示します。
・当社技術ブログ 記事: https://proc-cpuinfo.fixstars.com/
・フィックスターズグループ/セミナー一覧: https://www.fixstars.com/ja/seminar
・フィックスターズのFPGAシステム開発: https://www.fixstars.com/ja/services/fpga
フィックスターズは、コンピュータの性能を最大限に引き出すソフトウェア開発のスペシャリストです。車載、産業機器、金融、医療など、幅広い分野での開発経験があります。また、ディープラーニングや機械学習などの最先端技術にも力を入れています。 並列化や最適化技術を駆使して、マルチコアCPU、GPU、FPGA、量子アニーリングマシンなど、さまざまなハードウェアでソフトウェアを高速化するサービスを提供しています。さらに、長年の経験から培ったハードウェアの知識と最適化ノウハウを活かし、高精度で高性能なアルゴリズムの開発も行っています。 ・開催セミナー一覧:https://www.fixstars.com/ja/seminar ・技術ブログ :https://proc-cpuinfo.fixstars.com/
Fixstars Corporation www.fixstars.com 実践的!FPGA開発セミナー vol.6 2022/01/26 18:00~ Copyright © Fixstars Group Copyright © Fixstars Group
Fixstars Corporation www.fixstars.com 100GbEネットワークとの 連携でFPGA はもっと輝く -低レイテンシ, 低消費電力を活かすために- Copyright © Fixstars Group Copyright © Fixstars Group
Fixstars Corporation www.fixstars.com Who I am Eisuke MOCHIZUKI 望月 英輔 ソリューション第一事業部 シニアエンジニア Copyright © Fixstars Group 3
Fixstars Corporation www.fixstars.com ネットワークにおけるレイテンシの重要性 ● ネットワークのレスポンスはUXに直結する ○ http://abehiroshi.la.coocan.jp/ ● レスポンス改善には系全体の遅延(=レイテンシ)を低下させることが効果的 ● ● ● 5Gの普及も関係し、伝送/伝搬遅延は低下傾向 サーバー側が阻害要因とならないよう、処理遅延の低下が求められている 用途にもよるが、FPGA は低レイテンシを実現しやすいと言われている ○ なぜか? Copyright © Fixstars Group 4
Fixstars Corporation www.fixstars.com NIC + CPU 構成の場合の処理フロー • 一般的な NIC + CPU 構成の場合、下記のフローで処理が行われる ① Network からのデータをNIC 経由でメインメモリに転送 ②,③ CPU が手があいていれば処理をしてくれる ④ 処理が完了したデータをメインメモリからNIC 経由で Network に転送 • • 処理前後でデータをメインメモリに転送するため、① -> ④の時間が伸びがち CPU での処理にどれだけ待たされるかはその時次第で、処理時間にばらつきが発生 Copyright © Fixstars Group 5
Fixstars Corporation www.fixstars.com FPGA を使用した場合の処理フロー • FPGA を使用した場合、以下のようなフローが実現可能 ① Network からのデータを FPGA 内で直接処理する ② FPGA 内で処理したデータ をNetwork に直接出力する • • (うまくつくれば)データをメモリに配置しない低遅延なデータフローが実現可能 (うまくつくれば)処理時間を常に一定にすることが可能 Copyright © Fixstars Group 6
Fixstars Corporation www.fixstars.com FPGA だけでNetwork 処理をする場合の問題点 • • 前頁までを踏まえればFPGA は理想的なデバイスであり、 もっといろいろな場所で使用されていてもおかしくは無いはず・・・ だが、FPGA 内ですべてのNetwork 処理を完結させるのは結構面倒 • OS が担当していた部分をすべて実装する必要がある NIC + CPU FPGA ユーザーが設計 , 実装 ユーザーが設計 , 実装 OS が担当 FPGA 上に設計 , 実装 NIC が担当 FPGA が実装された基板を設計 , 実装 出展:Wikipedia (https://ja.wikipedia.org/wiki/OSI%E5%8F%82%E7%85%A7%E3%83%A2%E3%83%87%E3%83%AB) (※CC BY-SA 3.0により許諾されています。https://creativecommons.org/licenses/by-sa/3.0/) Copyright © Fixstars Group 7
Fixstars Corporation www.fixstars.com FPGA だけでNetwork 処理をする場合の問題点 - 解決策 • 面倒なネットワーク処理の実装を簡略化できる方法が存在 • • 基板の設計, 実装 -> 各ベンダーが販売しているアクセラレータカードを利用 OS が担当していた機能 -> TCP/IP オープンソース実装が存在 • Limago: an FPGA-based Open-source 100 GbE TCP/IP Stack NIC + CPU FPGA ユーザーが設計 , 実装 ユーザーが設計 , 実装 OS が担当 FPGA 上に設計 , 実装 オープンソース実装を利用 NIC が担当 FPGA が実装された基板を設計 , 実装 アクセラレータカードを利用 出展:Wikipedia (https://ja.wikipedia.org/wiki/OSI%E5%8F%82%E7%85%A7%E3%83%A2%E3%83%87%E3%83%AB) (※CC BY-SA 3.0により許諾されています。https://creativecommons.org/licenses/by-sa/3.0/) Copyright © Fixstars Group 8
Fixstars Corporation www.fixstars.com FPGA だけでNetwork 処理をする場合の問題点 - 解決策 - 2 • アクセラレータカード • • • Alveo U250 データセンター アクセラレータ カード (Xilinx) • • UltraScale+ 100G Ethernet Subsystem コア が利用可能 QSFP x2 ポート搭載: 100GbE に接続可能 • • 100GbE: 理論値100Gbps の通信速度を持つネットワーク規格 家庭用に一般に普及しているのは1GbE この1枚で、100GbE に接続する環境を整えることができる TCP/IP のオープンソース実装 • Limago: an FPGA-based Open-source 100 GbE TCP/IP Stack • 100GbE のTCP/IP をFPGA 上に実装 • 下記アクセラレータカードに対応 • • • • QSFP x2 VCU118, Alveo U200, Alveo U280 今回のセミナー向けにAlveo U250 に対応させた 最大64 セッション同時接続に対応 上記を利用し、ネットワーク + FPGA で優位性が見られるかを検証 Copyright © Fixstars Group 9
Fixstars Corporation www.fixstars.com 検証環境 • NIC + CPU 構成 • • • • Client: 100GbE NIC + CPU Cable : 100GbE Optical Cable Server: 100GbE NIC + CPU FPGA 構成 • • • Client: 100GbE NIC + CPU Cable : 100GbE Optical Cable Server: Alveo U250 Copyright © Fixstars Group 10
Fixstars Corporation www.fixstars.com 検証結果: Ping • Ping を100回実行しレイテンシを測定 NIC + CPU 構成 • • avg : 0.109 ms mdev: 0.018 ms FPGA 構成 • • avg : 0.056 ms mdev: 0.018 ms 平均値はFPGA が明らかに低く良好な結果 ばらつきには大きな差はみられず Copyright © Fixstars Group 11
Fixstars Corporation www.fixstars.com 検証結果: Iperf • Iperf を並列数を変化させながら、各点10秒間実行してスループットを測定 • 並列数: 負荷をかけるClient 側で動作するスレッド数と同義 NIC + CPU 構成 • 90.3 Gbps @ P=8 FPGA 構成 • 92.8 Gbps @ P=64 両者ともに理論値100 Gbps に肉薄 FPGA でもNIC と同等のスループットが得 られることが確認できた NIC + CPU 構成ではP=8 をピークに低下 12スレッドのCPU を使用しているため? Copyright © Fixstars Group 12
Fixstars Corporation www.fixstars.com まとめ • • • • FPGA と100GbE の連携はアクセラレータカードとオープンソース実装を 組み合わせることで実現可能 レイテンシ面ではNIC + CPU に対して優位性があることを確認 スループット面でもNIC + CPU と同等の性能を実現 電力は今回は測定できず(すみません) FPGA エンジニアとしてお伝えしたいこと • • • FPGA は汎用性ではCPU に劣り、単純な計算力ではGPU やDSP に分があります。 ですが今回のようにネットワークと直結する等、低レイテンシが求められる分野では 優位性があるということが伝わっていれば幸いです。 Xilinx Versal ACAP のように、CPU もDSP もFPGA も全て搭載しているデバイスも登 場してきているので、今後の展開に期待したいと思っています。 Copyright © Fixstars Group 13
Fixstars Corporation www.fixstars.com AlveoでLinuxを動かしてみる Copyright © Fixstars Group Copyright © Fixstars Group
Fixstars Corporation www.fixstars.com Who I am Kenta IDA 写真 井田 健太 ソリューション第一事業部 シニアエンジニア Copyright © Fixstars Group 15
Fixstars Corporation www.fixstars.com FPGA上でLinuxを動かす • Linuxで動作する豊富なソフトウェア資産を使いたい • • 現実的には、各FPGAベンダーのCPU内蔵FPGA製品を使う • • e.g. ドライバ、ネットワークスタック、ライブラリ Xilinx: Zynq等, Intel: Cyclone V SoC等 CPU内蔵ではないFPGAの場合 • 各社が提供するソフトCPUコアを使う • • • Xilinx: Microblaze (MMU構成) Intel: Nios II/f ベンダが提供する方法に従えば、比較的簡単に動作する Copyright © Fixstars Group 16
Fixstars Corporation www.fixstars.com ベンダ提供ツールが用意してくれるもの • ベンダ提供のLinux環境構築ツールは様々なものを自動的に用意してくれる • • • • • • • • ハードウェア構成を表すデバイスツリー ファームウェアをロードして実行するブートローダー デバイスツリーに基づいて 基本的なハードウェアの初期化を行うファームウェアやセカンドブートローダー 対象のハードウェア上で動作するように設定されたLinuxカーネルイメージ システムの動作に必要なものが含まれているルートファイルシステムイメージ 上記のものに含まれるプログラムをコンパイルするための クロスコンパイル用ツールチェイン ターゲット上のプログラムをデバッグするためのデバッガ ベンダはYocto Projectや YoctoをカスタマイズしたものをLinux環境構築ツールとして提供 • Xilinx: PetaLinux Copyright © Fixstars Group 17
Fixstars Corporation www.fixstars.com RISC-VのCPUコア • RISC-V: オープンソースの命令セットアーキテクチャ(ISA) • 実装自体はオープン、クローズド、有償、無償、どちらもある • • • ISAがロイヤリティ・フリーのため コアのライセンス料が他のCPUより安いことが期待されることが多い ISAを独自拡張して実験してもOKなので、 CPUアーキテクチャの研究にも良く用いられる (というかそれが目的で作られた) 現在ではFPGAで動作するソフトCPUコアや、 実際にSoC上に実装されたものどちらも容易に入手可能 実際にLinuxが動作する SoC SiFive Freedom U740搭載 ボード (SiFive HiFive Unmatched) RISC-Vのページに記載されている SoCやCPUコア一覧 出典: https://www.sifive.com/boards/hifive-unmatched 出典: https://riscv.org/exchange/cores-socs/ Copyright © Fixstars Group 18
Fixstars Corporation www.fixstars.com Linuxの動作に必要な機能 • 最低限の命令セットサポート • • • • • MMUによる仮想メモリのサポート • • RISC-V 32bitの基本命令 (I) 乗算命令 (M) アトミック命令 (A) 圧縮命令 (C) は必須ではない (カーネルの設定で無効化可能) 厳密にはMMU無しの構成も可能だが、実用性に欠く タイマーによる時刻取得と指定時刻での割り込み • スケジューリングに必要 Copyright © Fixstars Group 19
Fixstars Corporation www.fixstars.com Linuxの動作に必須ではないがほしい機能 • コンソール入出力 • • • デバッガ接続機能 • • • フレームバッファによるコンソール出力、キーボードによる入力 シリアル(UART)通信による入出力 トラブルシューティングにデバッガが無いとかなりキビシイ FPGAなので内部信号の観測ロジックなどを埋め込め無くはないが非効率的 比較的高速なOSイメージの転送手段 • ルートファイルシステムやカーネルのイメージを何度も更新するので Copyright © Fixstars Group 20
Fixstars Corporation www.fixstars.com VexRiscv https://github.com/SpinalHDL/VexRiscv • オープンソースのRISC-V実装 • SpinalHDLで記述されている • • • • 基本機能のコアに対してプラグイン方式で機能拡張が行える • • • • Chiselから派生したハードウェア記述言語 Chisel同様ScalaのDSL 文法はChiselとかなり異なる印象 基本機能:RV32IA (RISC-V 32bitの基本命令+アトミック命令) MMUの有無、乗算器の構成、除算器の構成、圧縮命令のサポート、CSRのサポート デバッガインターフェースもプラグインでサポート可能 FPGA向けの実装として、FPGAでよく使われるバスIFをサポート • Wishboneだけでなく、AXI4やAvalonMMをサポートしている • • Vivadoぽちぽちまんに優しい設計 LiteXというFPGA向けシステム設計ツールのCPUコアとしてLinux動作実績あり Copyright © Fixstars Group 21
Fixstars Corporation www.fixstars.com 対象のボード • Alveo U50… のつもりでしたが、間に合わなかったので手持ちの別のボードを使用 • LiteFury (https://github.com/RHSResearchLLC/NiteFury-and-LiteFury) • • • • Artix-7 XC7A100T-L2FGG484EとDDR3 256[MiB]搭載したFPGAボード M.2 2280 M key形状 PCIe Gen2 x4接続可能 日本からも送料含めて1万円強くらいで買える • PCIe接続できるボードとしてはかなり安い 出典: https://github.com/RHSResearchLLC/NiteFury-and-LiteFury Copyright © Fixstars Group 22
Fixstars Corporation www.fixstars.com システム構成 • • • ターゲット • • • • CPUコア:VexRiscv@125[MHz] MMUあり構成 メモリ :DDR3 SDRAM (256[MiB]) タイマー:ACLINTのうちタイマー機能を最低限実装 (IPIはなし) UART: Xilinx AXI UART 16550 • • JTAG信号生成:AXI GPIO (ホストCPU制御) UART: Xilinx AXI UART 16550 • PCIe DMAコア: Xilinx XDMA デバッグ ホストインターフェース Copyright © Fixstars Group 23
Fixstars Corporation www.fixstars.com 課題 • • • • Alveoは基本的にPCIeやGT以外の外部IOを持っていない • LiteFuryは一応引き出せるが基本的に出ていない • • UARTによるコンソール入出力 JTAGによるデバッガ接続 FPGA上のRISC-Vコアにデバッグ等のためにアクセスする手段が必要 Linuxカーネルやrootfsはどこに置くか rootfsはどうやって作成するか Copyright © Fixstars Group 24
Fixstars Corporation www.fixstars.com ターゲットとホストのUART通信 • • • • 1. 2. ホストとの通信はPCIe経由 FPGA側はPCIeのコアとしてXDMAを用いるのが最も容易 XDMAの機能を使うためには、Xilinxのドライバが必要 ホスト上でターミナルソフトを用いて ターゲットにアクセスしたい XDMAドライバを改造して UART通信デバイスとして扱えるようにする ドライバを改造せずに ユーザーモードだけで頑張る Copyright © Fixstars Group 25
Fixstars Corporation www.fixstars.com ターゲットとホストのUART通信 • XDMAにはホストからのMMIOアクセスを FPGA側のAXI4 Liteのアクセスに変換する機能がある • • • • • • /dev/xdma0_user をmmapして読み書きするだけ ホストからFPGA上のIPのレジスタを操作可能 ユーザーモードで動作する UART 16550用ドライバ (axiuartd) を作成 socatでブリッジされた疑似端末(pts)のペアを 作成する axiuartdがFPGA上のUART16550を制御し、 片方のptsにブリッジする もう片方のptsをターミナルで開く Copyright © Fixstars Group 26
Fixstars Corporation www.fixstars.com ターゲットへのデバッガ接続 • • OpenOCDにはRaspberry PiなどのGPIOを操作してJTAGの通信を行う機能がある • Bitbang driver • ちょっと無理やり感あるが… 前述のとおり、PCIe経由でFPGA上のレジスタにアクセスできるので、 AXI GPIOを接続しておけば、OpenOCDでJTAG通信を行える Copyright © Fixstars Group 27
Fixstars Corporation www.fixstars.com OSイメージ類の置き場所 • LiteFuryやAlveo U50は大容量の不揮発性メモリインターフェースを持たない • • • コンフィグレーション用のQSPIフラッシュ程度 DDR3 SDRAM 256[MiB] (LiteFury) や HBM2 8[GiB] (Alveo U50) があるので これらのRAM上にホストからイメージを転送しておく イメージ転送後、CPUをリセットして実行を開始する Copyright © Fixstars Group 28
Fixstars Corporation www.fixstars.com OSイメージ類の置き場所 • ルートファイルシステムはinitramfsにする • • • 本番のルートファイルシステムをマウントする前の準備をするための メモリ上に展開されるルートファイルシステム 通常はinitramfsでの処理完了後に不揮発性ストレージ上のルートファイルシステム をマウントして移動する そのままinitramfsを使い続けることも可能なので、今回はinitramfsを使い続ける Copyright © Fixstars Group 29
Fixstars Corporation www.fixstars.com Vivadoのデザイン そこそこ複雑になっているが、コアは紫色の部分 Copyright © Fixstars Group 30
Fixstars Corporation www.fixstars.com 合成結果 • コアのサイズ LUT :3000, Register 2500+, BRAM 5, DSP 4 • • • もっと大きいかと思っていたが意外と小さい MicroBlazeのMMUアリ構成も大体同じようなサイズ Artix7-100でもまだまだ載せられそう Copyright © Fixstars Group 31
Fixstars Corporation www.fixstars.com デバイスツリーの準備 • • • デバイスツリー • • 主に組込み向けのプラットフォームでハードウェアの構成を定義する構造 cf. ACPI • PetaLinuxの場合はハードウェア情報 (*.xsa) から生成 基本的にベンダーのSDKが生成してくれる 今回はベンダーのSDKはないので、手書きする • • 書き方はざっくりは LinuxカーネルのDocumentationに載っている Zynq用に PetaLinuxなどで生成したものを参考にするとよい Copyright © Fixstars Group 32
Fixstars Corporation www.fixstars.com デバイスツリーの準備 • ざっくりCPUの定義、クロックの定義、 メモリバス上のペリフェラルの定義が含まれる Copyright © Fixstars Group 33
Fixstars Corporation www.fixstars.com カーネルとrootfsイメージの準備 • いくつか方法があるが比較的シンプルなBuildrootを使ってイメージを作成する • Buildroot (https://buildroot.org/) • • • • クロスコンパイル用のツールチェーン、カーネルイメージ、rootfsを構築するツール Yoctoと並んでよく利用される Yoctoよりシンプルでわかりやすい 現時点の最新版 (2021.11) で、RISC-V向けのイメージ生成をサポート Copyright © Fixstars Group 34
Fixstars Corporation www.fixstars.com Linux起動までの下準備を行うファームウェア • RISC-VのCPUはM, (H), S, Uの動作モードをもっている • • • • • • • • LinuxカーネルはSモードで動作するので、 MモードからSモードに移行する処理が必要 また、Mモードでしかできない処理を肩代わりするプログラムも必要 これらの処理をばらばらに作ると困るので、 OpenSBI(https://github.com/riscv-software-src/opensbi)が用意されている OpenSBIが次のブートローダーもしくはLinuxカーネルを呼び出す Linuxカーネルやrootfsがメモリ上に配置されていない場合は、U-Boot 等を呼び出し てカーネルやrootfsをロードする必要がある • • M: Machine Mode 一番権限が強いモード。リセット直後もMモード S: Supervisor Mode OSが動作するモード U: User Mode ユーザーアプリケーションが動作するモード Zynqでも同様のながれになっているはず 今回はホストが直接RAMにイメージを置くのでOpenSBIから直接カーネルを起動する Copyright © Fixstars Group 35
Fixstars Corporation www.fixstars.com RAM上の配置 • 図の配置になるように、あらかじめホストからDRAM上にイメージを書き込んでおく • • Zynq等でLinuxを動かす場合はそんなことはできないので、 ブートローダーがSDカード等からイメージをメモリに読み出す 注意点:デバイスツリーはLinux Kernelイメージより 上位の領域に配置する必要がある Copyright © Fixstars Group 36
Fixstars Corporation www.fixstars.com デバイスツリーの配置制約 • • カーネルのバイナリは先頭アドレスが 0xC000_0000 としてビルドされる ページテーブル初期化までのコードは、アライメントの制約を満たせば、 他のアドレスにロードしても実行可能 • • 今回は 0x8100_0000 にロードしている ページテーブル初期化前はデバイスツリーにアクセスするために、 暫定的な仮想アドレス (0x4000_0000) にマップしてアクセスする Copyright © Fixstars Group 37
Fixstars Corporation www.fixstars.com デバイスツリーの配置制約 • • ページテーブル初期化前後は、カーネルのイメージの先頭アドレスが 0xC000_0000 となるようにページエントリが設定される カーネルイメージ以降の領域しかページテーブルがマップされないので、 カーネルより前の領域はアクセス不能 →デバイスツリーなどはカーネルより上位に置く必要がある Copyright © Fixstars Group 38
Fixstars Corporation www.fixstars.com CPUリセット解除~BOOTROM実行開始 • • • • CPUコアのリセットが解除されると、0x8000_0000 番地から実行を開始する ユーザーとの対話の入出力のために、UART 16550コアを初期化する UART経由で「boot」と入力されるまで待つ • デバッグ用なので、別に待たなくてもよい • OpenSBIがCPUのコア番号(HART ID)や デバイスツリーのアドレスを要求するので 呼び出し時の引数に指定 OpenSBIの先頭アドレス (0x8001_0000) へジャンプする Copyright © Fixstars Group 39
Fixstars Corporation www.fixstars.com OpenSBIの初期化~Linuxカーネルの実行 • OpenSBIはデバイスツリーに基づいて対象プラットフォームを特定し、 各ハードウェアに必要な初期化を行う。 • • e.g. コンソール出力用にUARTペリフェラルのドライバを初期化 タイマーハードウェアの初期化 初期化処理が終わったら、カーネルの先頭アドレスにジャンプする • このとき、未定義命令の例外が発生するのであれば、 CPUコアがC命令を実装していないのにカーネルがC命令有効で ビルドされている可能性がある (実際はまった) Copyright © Fixstars Group 40
Fixstars Corporation www.fixstars.com Linuxカーネル起動~rootfsマウント • カーネルさえ呼び出せば後は簡単!と思っていたら結構問題が起きた • アクセス違反でカーネルパニック • 0xbff0_0000 みたいなアドレスにアクセスしている • • rootfsがマウントできない • • • どうもカーネルのコマンドラインで指定するinitrdのサイズは 実際のrootfsイメージサイズにぴったりの必要がある模様 長すぎると末尾のゴミでエラー ある程度進んだらハングアップ(1) • • • →デバイスツリーがカーネルイメージより下位に配置されているのが原因 ログメッセージ送信中にハングアップしていた カーネル内で udelay を呼んでいたが、タイマーが正常に機能しておらず無限ループ になっていた ある程度進んだらハングアップ(2) • • どうもアイドル関数が呼ばれている状態から抜け出せていない ACLINTの実装ミスでタイマー割り込みが正常に動作していなかったため、 タスクのディスパッチが行われなかった Copyright © Fixstars Group 41
Fixstars Corporation www.fixstars.com 起動 Dhrystone 25,641[DPS] = 14.6[DMIPS] = 0.116[DMIPS/MHz] なんか遅い? Copyright © Fixstars Group 42
Fixstars Corporation www.fixstars.com Thank You お問い合わせ窓口 : [email protected] Copyright © Fixstars Group Copyright © Fixstars Group