FPGA特化　自動車ソフトウェア開発向け＃1

##はじめに
**自己紹介**
十年間にわたり組込みOSの分野でFAE/プロジェクトマネージャを経験。
現在はヘテロマルチコア向けのソースコード解析や最適化を行うSilexicaで奮闘中。

**記事内容**　
今回はSilexicaのSLX FPGAが自動車開発のユースケースで
どのように役立つのかについて記事にしました。



##目次
####業界における問題
####静的・動的ソースコード解析（デモリクエスト有）　　　
####自動車開発でのユースケース



##業界における問題
自動車業界では現在、**自動化・コネクテッドカー・電気自動車・車両の共有**
へ移行とするといわれ、大きな課題に直面しています。（ACES [1]）
言うまでもなく、この変化は新しい車両の**ハードウェア・ソフトウェア構造**にも大きな影響を与えるでしょう。


・**何百の分散型ECUの代わりに汎用型のコンピューティングプラットフォーム上で実行される複数のアプリケーションで使用されるサービス指向ソフトウェアアーキテクチャ**

**・ロボットオペレーティングシステム第2版(ROS 2[2]) またはAdaptive AUTOSAR (AA[3])のような新しいミドルウェアの導入**

**・ソフトウェア開発におけるCからC++への移行（例 ROS 2 と AA は C++14に基づく)**

**・データ駆動型アルゴリズムの場合、静的スケジューリングから動的スケジューリングへの移行が必要**

**・ヘテロジニアスコンピューティングプラットフォームのより広範な使用(例： field programmable gate arrays (FPGAs), graphics processing units (GPUs), neural network (NN) accelerators,etc..) そして対応するプログラミング言語(HLS, CUDA, OpenCL, SYCL, Halide, etc.)の多様化**

条件と関連する課題が明確になってきている一方、
このような課題を効率的かつスケーラブルな方法で
解決するためのツールと方法論まだまだ不十分です。

##静的・動的ソースコード解析
###コード解析コードは大きく二つに分けられます。
###静的解析
静的解析では、通常アプリケーションのソースやオブジェクトコードを実行せずに直接解析しています。利用するツールに応じ、解析結果はかなり高度になることもあります。（特に、正式な方法ではコード特性を示すのに使われることもある。）
しかし通常では、コードのサブセットのみの十分な静的解析を行っています。
静的解析ができないコードセクションの場合、潜在的危険の重大度を分類するための保守的アプローチは、多くの誤検知につながることも。
したがって、例えば静的解析ツールは、コードが特定の規格に準拠しているかを確認するために使用されることが多いです。例えば Motor Industry Software Reliability Association（MISRA ミラス [4]）による定義がその例です。


###動的解析
動的解析では、アプリケーションは関心のあるテストシナリオを用いる方法で（例えば、対応する入力に基づいて）実行されなければなりません。
その結果、取得された結果は必ずしもアプリケーション全体を表すものではないですが、選択された関心のあるテストシナリオとより相関させることができるのです。しかし通常では動的解析による（正式な）保証を導き出すのは困難です。
それでも、動的解析はアプリケーション実行動作を十分に認識し、パフォーマンスの最適化などで頻繫に使用されます。

####静的解析と動的解析ツール
静的解析と動的解析ツールはアプリケーションの解析、デバッグに役立つ一方、ソフトウェアアーキテクチャの概要を表すことは限られており、データフローと依存性については限定的にしか見えません。これらの制限を克服するため、10年をの時間を費やしてSilexicaはコンパイラ研究に基づく静的解析と動的解析の独自の組み合わせを行いました。セマンティック解析では、さらに論理ソフトウェアアーキテクチャと動的実行動作の両方を含むソフトウェアアーキテクチャの全体像を導き出すことに成功しました。この解析は、アーキテクチャの損傷を防ぎ、ソフトウェアアーキテクチャと実装を最適化する実用的な見識を提供するために利用することもできます。

デモリクエストはこちらから👉https://www.silexica.com/ja/

##自動車開発でのユースケース
このコアテクノロジーはソフトウェアアーキテクチャー・開発者にとって、すぐにメリットになるユースケースがいくつかあります。

**ソフトウェアアーキテクチャの損傷を防ぐためのマルチバイナリアプリケーションおよびマルチスレッドアプリケーションに関するアプリケーションの詳細な洞察の提供**
　
Silexicaプログラミングツール（SLX）は、スレッドの系図と並列性、通信、同期、またデータの依存関係を視覚化します。またソースコードから想定されるアーキテクチャとの整合性をチェックしてソフトウェアアーキテクチャの損傷を防ぐことができるライブコード概要を提供しています。この情報は共同作業、オンボーディング、およびドキュメント化にも幅広く使用することが可能です。

**アプリケーション間のデータ競合の特定と通信・メモリのボトルネックの理解**

SLX共有メモリ解析（現時点ではPOSIX共有メモリ用）を使用すると、どのようにアプリケーションがスレッド間や他のアプリケーションと通信するのかを把握すことできます。また、ポインタを通してアクセスした場合でも、SLXは配列や構造体のサブオブジェクトを含む変数へのすべてのアクセスを表示します。実際のソースコードに基づくこのアーキテクチャの概要は、関数型デバッグとコードリファクタリングでも使うことができます。業界初の保護解析では、データ破損の原因になりうるスレッド間、またプロセス間の共有メモリ保護（セマフォ、ミューテックス）の欠損を特定します。これにより、スレッド間のデータ競合だけでなく、別々のプロセスとアプリケーション間のデータ競合も検出できるようにります。


**高速な「what-if」解析を行いコードの実行を視覚化することによって、ヘテロジニアスマルチコアシステム上でのハードウェア計算ブロックのソフトウェアの分散を最適化。**

標準化されたハードウェア記述フォーマット（SHIM2 [5]）で表されたCPU、DSP、FPGA、そして新しい革新的なシミュレーション機能の組み合わせを考慮し、パフォーマンス、電力、およびメモリーの必要量によって最適化が行われます。そして動的な分散と静的マッピングの祖両方による最適化がサポートされています。

**改良されたソフトウェアアーキテクチャと性能に対する実用的な洞察。コード内の最適化の機会を自動的に検出することで開発時間を節約。**

SLXは、パフォーマンス向上のためのコードリファクタリングを手助けするためのガイダンスを行っています。例としては、データ構造、同期、およびループの最適化などが挙げられます。さらにSLXテクノロジーは、並列処理が可能なコードを自動的に検出する機能を提供し、潜在的な並列処理のブロック条件を明示します。タスク、パイプライン、データレベルの並列処理など、あらゆるレベルでの並列処理がサポートが可能となっています。


SLXはすでに上記のPOSIX環境のユースケースをサポートしています。
現在は、Adaptive AutosarやROS 2、ROSの書き換えなど、リアルタイムシステムや組み込みプラットフォームでの実運用環境を可能にするため将来のミドルウェアとの統合にも取り組んでおります。Apex.OS [6]のように安全性が重要なアプリケーションを目的としたROS 2 API互換ディストリビューションなど、すでに利用可能なROS 2からフォークされたものあります。現在、ASIL Dまでの安全性要素の範囲外（SEooC）として、自動車の機能安全規格ISO 26262に従って認証されています。


##最後に
ここまで読んでくださってありがとうございます。
自動車開発、コード解析、並列処理など質問はコメント欄でお願いします。
次回はROS統合についてです。

##参考文献
[1] Center for Automotive Research (https://www.cargroup.org)

[2] Robot Operating System 2 (https://index.ros.org/doc/ros2)

[3] AUTOSAR Adaptive (https://www.autosar.org/standards/adaptive-platform)

[4] Motor industry software reliability association (https://misra.org.uk)

[5] Multicore Association SHIM2 (https://multicore-association.org/workgroup/shim.php)

[6] Apex.OS by Apex.AI: https://www.apex.ai/products

[7] Autoware (https://github.com/CPFL/Autoware, v1.8)