Silexica

複雑なマルチコア向けプログラミングを効果的に行うために、Silexicaはソフトウェアの詳細解析および並列化ポイント検出ツール·スイート(SLX Tool Suite)を提供しています。SHIM(Software-Hardware Interface for Multi-many-core)で記述された抽象度の高いハードウェア・プラットフォーム情報を活用することで、シングル・スレッドで記述されたC, C++コードの並列化ポイントを検出するだけでなく、ソースコード上のボトルネックを検出します。またAutosarで記述されたコードをマルチコアに分割する機能や、FPGAへの自動実装機能も提供しています。SilexicaのHP:https://www.silexica.com/ja/

SLXを用いた設計フロー

C/C++フロー:既存C/C++コードの並列化ポイント検出

SLX C/C++フローでは入力されたシーケンシャルまたはスレッド化されたC, C++コードを静的・動的に解析し、並列可能な個所を探索するだけでなく、静的解析だけでは予測不可能な「並列化した場合の速度向上」を自動予測します。多くの並列化候補の中から効果の大きい個所のみを並列化することで、短期間で効率良く並列化を実施できます。また先進の解析機能を用いることでソースコードに含まれるボトルネックの検出および修正のためのアドバイスを行います。

特長

  • ANSI C, C++14をフルサポート
  • ソースコードを動的に解析し、コールグラフを自動作成
  • ソースコード内でポインタを使用可
  • タスクレベル、データレベル、パイプラインの3種類の並列化候補を探索
  • 並列化を実行した場合の速度向上効果を定量的に算出
  • キャッシュのヒット・ミス予測
  • ISS等を使用せず、各コア上での各タスクの処理時間を高速・高精度に自動算出
  • ヘテロジニアスなマルチコアに対応
  • 自動マッピングおよび手動マッピングの両方をサポート



Automotiveフロー:既存のAutosar対応コードをマルチコアに分割

SLX Automotiveフローでは既存のAutosar対応のコードを解析し、タスク間およびランナブル間の依存性を可視化します。またグローバル変数のアクセス解析も実行します。

解析結果をもとにタスクをマルチコア向けにスケジューリングし、最悪実行時間等の情報をもとに、どのコアに分割すべきかを決定し並列化を行います。

特長

  • タスク間およびランナブル間の依存性の解析と可視化
  • グローバル変数のアクセス解析
  • タスクをマルチコア向けにスケジューリング
  • RunPar:1つのタスク内におけるランナブルの並列化
  • SuperTask:同一期間に実行されているタスクの結合
  • メモリマッピングの最適化と可視化
  • 各タスクのガントチャート表示
  • 定義された最悪実行時間を用いた同期と全てのタスクがバリアに到達してから同期するバリア同期をサポート



FPGAフロー: C/C++コードをFPGA上のコアとHWに実装

SLX FPGAフローでは既存のC/C++コードを解析し、高位合成ツールが合成できない箇所の表示および変更例を表示します。またリファクタリングのためのヒントも表示可能です。Xilinx社のVivadoおよびSDSoCと一緒に動作させることによって、ARMコアやFPGA上で理想的に実行されるようにHWとSWの分割およびOpenMPおよびXilinx HLS向けのプラグマをソースコードに自動挿入します。

特長

  • 並列化のためのコード解析
  • 合成できないコードのリファクタリング
  • 最適化のためのリファクタリング向けヒント
  • OpenMPおよびXilinx HLS向けプラグマを自動挿入
  • Zynq Ultrascale + MPSoC (ZC706/ZCU102)サポート済み