昨日、Vitisのフローを下図のように描いた。
今日はこのフローの中でなにかを新規追加や修正した場合にどれくらいの影響度があるのか考えてみた。
間違えてたら誰か教えてほしい。
まず、アプリケーションを新規作成または修正した場合は次の順序だと思う。
なので、影響度は赤の部分となる。
まぁ、普通にアプリを組むだけだから普通にコンパイルして実行するのと変わらないわけで…
そう思ったけどこのVitisのケースのアプリって2パターンがあるよね。
そう、OpenCLのHostとKernelのパターンね。
説明が面倒なのでFPGAにしないソースコードはただのアプリのソースコードということでOpenCL Hostと同じ扱いとする。
OpenCL Hostのソースコードって、ただのターゲットCPUのアプリだから別にVitisを通過する必要なないのでアプリケーションは次のように2パターンにわけたほうが良い。
OpenCL Kernelを修正した場合は、Vitisでコンパイルする必要があるので次のようになる。
ここまでのアプリ、OpenCLのHostとKernelを修正した場合の影響度って、単にソースコードをコンパイルしてバイナリをSDカードに書いて、ZYNQで実行するだけである。
これはnVIDIAのCUDAを書いた場合もそんなに大差ない。
Open CL Kernelには影響ないけど、Linuxディストリビューションに影響するケースってのも多々ある。
アプリを追加したいときとかライブラリを追加したいときなどである。
ここでは2ケースが考えられる。
どちらの場合もPetaLinuxを修正する必要がある。
このケースはLinux Kernelを修正した場合でユーザ・アプリケーションに影響がない場合を指している。
例えば、ドライバを追加したとかのケースだ。
その場合、PetaLinuxを編集して次のルートが影響する。
Linuxディストリビューションのライブラリを追加した場合、開発環境のsysrootと実行環境(SDカード)のRoot Filesystemに影響が出る。
しかも、sysrootはVitisに影響するではなく、ユーザー・アプリケーションの開発環境に影響するので今まで書いてなかったパスに影響する。
このケースはVitisのベース環境にしているRTLのみの変更を行う場合である。
例えば、MIPIの回路がベース環境に含まれていて、アプリケーションなどに影響しない範囲でMIPI回路を修正した場合などである。
その場合、ベース環境のRTLだけ変わっていればいいので次のような影響ルートをたどる。
この場合、PetaLinuxには影響がないので通らなくて良い。
しかし、PetaLinuxを通っていないとVivadoとPetaLinuxのXSAファイルに時間的な差分が発生し、良からぬことが起こるかもしれない。
黄色の部分はすでに影響が出ている範囲である。
ベース環境のPSの変更を行った場合、PetaLinuxを通過する必要がある。
ただし、PSの環境と言ってもLinux Kernelに影響がないケースの場合、sysrootやRoot Filesystemの修正までする必要はない。
しかし、PetaLinuxを実行してしまうとsysrootやRoot Filesystemの時間的な差分が発生するので良からぬことが発生するかもしれない。
Linux Kernelの修正が必要になるとimage.ubの修正が必要なので次のようになる。
ここでもsysrootやRoot Filesystemの修正までする必要はない。
しかし、PetaLinuxを実行してしまうとsysrootやRoot Filesystemの時間的な差分が発生するので良からぬことが発生するかもしれない。
最後はシステム的に大改修をするケースである。
この場合は可哀想だがすべてに影響し、次のようになる。
いや、待てよ。
すべてに影響するから次のようになるんだな。
だから、Vitis+PetaLinuxの環境って大変なんだな。
これだと説明するの面倒だから、「Vitis+PetaLinuxを使っていて、なにか修正したら全フローを流し直しましょう」と暗記するのが良いのかな?
もちろん、ユーザー・アプリの修正だけでもね。
いやいや、はやはや、複雑だねぇ。