Vitisなんか勉強したくない(1日目)

昨日、Vitisのフローを下図のように描いた。

今日はこのフローの中でなにかを新規追加や修正した場合にどれくらいの影響度があるのか考えてみた。

間違えてたら誰か教えてほしい。

アプリケーションを新規作成または修正

まず、アプリケーションを新規作成または修正した場合は次の順序だと思う。

  1. ソースコードを書く
  2. コンパイル
  3. SDカードにコピー
  4. ZYNQ上で実行

なので、影響度は赤の部分となる。

まぁ、普通にアプリを組むだけだから普通にコンパイルして実行するのと変わらないわけで…

そう思ったけどこのVitisのケースのアプリって2パターンがあるよね。

そう、OpenCLのHostとKernelのパターンね。

  • OpenCL Host
  • OpenCL Kernl

説明が面倒なのでFPGAにしないソースコードはただのアプリのソースコードということでOpenCL Hostと同じ扱いとする。

普通のアプリはgcc/g++でコンパイル

OpenCL Hostのソースコードって、ただのターゲットCPUのアプリだから別にVitisを通過する必要なないのでアプリケーションは次のように2パターンにわけたほうが良い。

OpenCL Kernelを修正した場合

OpenCL Kernelを修正した場合は、Vitisでコンパイルする必要があるので次のようになる。

ここまでのアプリ、OpenCLのHostとKernelを修正した場合の影響度って、単にソースコードをコンパイルしてバイナリをSDカードに書いて、ZYNQで実行するだけである。

これはnVIDIAのCUDAを書いた場合もそんなに大差ない。

Linuxディストリビューションを修正したい場合

Open CL Kernelには影響ないけど、Linuxディストリビューションに影響するケースってのも多々ある。

アプリを追加したいときとかライブラリを追加したいときなどである。

ここでは2ケースが考えられる。

  • ユーザー・アプリケーションに影響しないLinux Kernelの修正・追加
  • ユーザー・アプリケーションに影響するLinux Kernelまたはライブラリなどの修正・追加

どちらの場合もPetaLinuxを修正する必要がある。

Linux Kernelを修正した場合

このケースはLinux Kernelを修正した場合でユーザ・アプリケーションに影響がない場合を指している。

例えば、ドライバを追加したとかのケースだ。

その場合、PetaLinuxを編集して次のルートが影響する。

ライブラリを追加した場合

Linuxディストリビューションのライブラリを追加した場合、開発環境のsysrootと実行環境(SDカード)のRoot Filesystemに影響が出る。

しかも、sysrootはVitisに影響するではなく、ユーザー・アプリケーションの開発環境に影響するので今まで書いてなかったパスに影響する。

FPGAの修正をする場合

  • ベース環境のPLのRTLのみ変更(PSに影響を与えない場合)
  • ベース環境のPSを変更(PLの変更も含む場合もある)
  • Linux Kernelの修正が必要(PS、PLのいずれかの変更を含む)
  • Linuxディストリビューションのライブラリなどの修正が必要(PS、PLのいずれかの変更を含む)

ベース環境のPLのRTLのみ変更(PSに影響を与えない場合)

このケースはVitisのベース環境にしているRTLのみの変更を行う場合である。

例えば、MIPIの回路がベース環境に含まれていて、アプリケーションなどに影響しない範囲でMIPI回路を修正した場合などである。

その場合、ベース環境のRTLだけ変わっていればいいので次のような影響ルートをたどる。

この場合、PetaLinuxには影響がないので通らなくて良い。

しかし、PetaLinuxを通っていないとVivadoとPetaLinuxのXSAファイルに時間的な差分が発生し、良からぬことが起こるかもしれない。

黄色の部分はすでに影響が出ている範囲である。

ベース環境のPSを変更(PLの変更も含む場合もある)

ベース環境のPSの変更を行った場合、PetaLinuxを通過する必要がある。

ただし、PSの環境と言ってもLinux Kernelに影響がないケースの場合、sysrootやRoot Filesystemの修正までする必要はない。

しかし、PetaLinuxを実行してしまうとsysrootやRoot Filesystemの時間的な差分が発生するので良からぬことが発生するかもしれない。

Linux Kernelの修正が必要(PS、PLのいずれかの変更を含む)

Linux Kernelの修正が必要になるとimage.ubの修正が必要なので次のようになる。

ここでもsysrootやRoot Filesystemの修正までする必要はない。

しかし、PetaLinuxを実行してしまうとsysrootやRoot Filesystemの時間的な差分が発生するので良からぬことが発生するかもしれない。

Linuxディストリビューションのライブラリなどの修正が必要(PS、PLのいずれかの変更を含む)

最後はシステム的に大改修をするケースである。

この場合は可哀想だがすべてに影響し、次のようになる。

いや、待てよ。

すべてに影響するから次のようになるんだな。

だから、Vitis+PetaLinuxの環境って大変なんだな。

これだと説明するの面倒だから、「Vitis+PetaLinuxを使っていて、なにか修正したら全フローを流し直しましょう」と暗記するのが良いのかな?

もちろん、ユーザー・アプリの修正だけでもね。

いやいや、はやはや、複雑だねぇ。

write: 2021/01/21/ 20:45:06