次のように見えるかもしれません: ARM と NEON は並行して動作できますか? 、しかしそうではありません、私は他の問題を抱えています(私の理解に問題があるかもしれません):
プロトコル スタックでは、GPP で行われるチェックサムの計算中に、関数の一部としてそのタスクを NEON に引き渡します。
以下は、私が NEON の一部として作成したチェックサム関数で、Stack Overflow に投稿されています: Checksum code implementation for Neon in Intrinsics
ここで、Linux からこの関数が呼び出されたとします。
ip_csum(){
…
…
csum = do_csum(); //function call from arm
…
…
}
do_csum(){
…
…
//NEON optimised code
…
…
returns the final checksum to ip_csum/linux/ARM
}
この場合.. NEON が計算を行っているとき、ARM はどうなりますか? ARMはアイドル状態ですか?それとも他の操作に進みますか?
ご覧のとおり、do_csum が呼び出され、その結果を待っています (または、それがどのように見えるか)。
ノート:
- cortex-a8で言えば
- リンクからわかるように do_csum は組み込み関数でコーディングされています
- gnu ツールチェーンを使用したコンパイル
- これらの相互操作が発生したときに、マルチスレッドやその他の関連する概念を取り入れたり、絵に描いたりすると良いでしょう。
質問:
- NEON が操作を行っている間、ARM はアイドル状態になりますか? (この特定のケースでは)
- それとも、現在の ip_csum 関連のコードを棚上げして、NEON が完了するまで別のプロセス/スレッドを使用しますか? (私はここで何が起こるかについてほとんどばかです)
- アイドル状態である場合、NEON が完了するまで、ARM を他の何かで動作させるにはどうすればよいでしょうか?