概要
- ARM版MacでVivado/Vitisを動かすことができました!
- 実行環境: M2 MacBook Air (24GB)
- 必要なディスク空き容量: 約400GB
手順
1. Lima、XQuartz、Rosettaのインストール
$ brew install lima
$ brew install xquartz
$ softwareupdate --install-rosetta
2. Apptainerのコンテナを作成
$ limactl start template://apptainer --name=default --cpus=4 --memory=8 --disk=400 --vm-type=vz --rosetta --mount-writable --set=.ssh.forwardX11=true
-
--vm-type=vz
は、MacOSのVirtualizationを使用する仮想化環境を指定します。 -
--rosetta
は、Rosettaを有効にし、x86_64のバイナリを実行可能にします。 -
--cpus=8
や--memory=16
などを指定して、リソースを調整します。 - メモリやSwapが足りないと前触れなくクラッシュするので注意して下さい。
- 以下のSIFイメージのビルドを行う場合は、
--disk=400
以上を指定して下さい。 - 詳細な設定はLimaの公式ドキュメントを参照して下さい。
追記:--cpusを多くしすぎると、稀にsegfaultが発生するようです。- ↑単にVMのメモリ不足が原因でした。Swapを追加して解決しました。
3. Vivado/VitisのSIFイメージのビルド
# Limaにログイン
$ lima
# Swapを追加(1GBでも良いので必須)
$ sudo dd if=/dev/zero of=/swapfile bs=1M count=8192
$ sudo chmod 600 /swapfile
$ sudo mkswap /swapfile
$ sudo swapon /swapfile
$ echo "/swapfile swap swap defaults 0 0" | sudo tee -a /etc/fstab
# SIFイメージのビルド準備
$ git clone https://github.com/jin0g/singularity-xilinx-vivado-vitis
$ cd singularity-xilinx-vivado-vitis
$ mv /PATH/TO/FPGAs_AdaptiveSoCs_Unified_2023.2_1013_2256.tar.gz ./
# SIFイメージをビルド
$ sudo apptainer build ./xilinx_2023.2.sif ./xilinx.def
- 事前に、Vivadoの統合インストーラー(SFD)を公式サイトからダウンロードします。
- Swapは必須です。メモリが十分にあってもSwapがないとハングアウトします。
- この手順をスキップして、事前にビルドした
xilinx.sif
をコピーしても良いです。 - ビルドスクリプトの詳細はこちらを参照してください。
- 追記: この後に一度、VMを再起動する必要があるかもしれません。コメント参照。
4. Vivadoの起動
$ lima apptainer exec ./xilinx_2023.2.sif vivado
- XQuartzが起動し、VivadoのGUIが表示されれば成功です。
- パス等を適切に通すことで、
$ lima vivado
のように簡単に起動できます。
ベンチマーク
- 折角なので、仮想環境でVivadoのパフォーマンスはどうか調べます。
- 当然ですがMacネイティブでVivadoは動かないので、IntelのCPUと比較します。
- シングルコア性能がM2と同じくらいの、i9-12900Kを比較対象にしました。
- こちらのをVitis HLSで合成し、VivadoでBitstreamを合成しました。
- 追記: ベンチマークのスクリプトはこちらです。
Platform | Mem | Container Build | Vitis HLS | Vivado |
---|---|---|---|---|
Intel i9-12900K | 128GB | 6h | 14.6s | 260.4s |
Apple M2 | 24GB | 2h | 18.5s | 375.1s |
感想
- さすがに処理速度はネイディブより30%ほど遅いですね。QEMUよりは爆速です。
- HLSの合成や、小規模な回路の合成なら、ARM Macでも実用的だと感じました。
- Vitisも動くと思うのですが、必要ライブラリなど確認していません。人柱募集します。
追記: LimaのVMの動作が不安定で、ハングアップすることが稀に良くあります。- ↑単にVMのメモリ不足が原因でした。Swapを追加して解決しました。
TIPS
- 以下のようなスクリプトをMacに用意すると、利便性が向上すると思います。
- このスクリプトに実行権限を付与して、パスを通してください。
- ファイル名を実行したいコマンドにしてください(例えば
vivado
など)
#!/bin/sh
lima apptainer exec --bind $HOME ~/containers/xilinx_2023.2.sif $(basename "$0") $@