0Pricing
C++ Academy · レッスン

リアルタイムにおける考慮事項とレイテンシー

ソフトリアルタイムおよびハードリアルタイムシステム向けに、タイミングが予測可能なコードを記述します。

「リアルタイムにおける考慮事項とレイテンシー」はCoddyKit上の無料C++ Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはC++ Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 C++ Academyコースには全4レッスンが含まれています。

リアルタイムとは

リアルタイムシステムは、期限内に応答しなければなりません。期限を逃すと障害につながります。

  • ハードリアルタイム — 期限を逃すとシステム障害になります(医療、航空電子機器)
  • ソフトリアルタイム — 期限を逃すと品質は低下しますが、許容されます(音声、映像)

速度よりも決定性

リアルタイムコードでは、ピーク性能よりも予測可能なタイミングを重視します。常に10マイクロ秒かかる関数は、1〜20マイクロ秒かかる関数よりも好まれます。

ヒープ割り当てを避ける

ヒープ操作には、メモリの断片化やアロケータの判断などの予測できない要素があります。起動時に割り当て、その後は再利用してください。組み込み向けのコーディング規約では、初期化処理以外でのnewを禁止していることがよくあります。

例外を避ける

例外の送出には予測できないコストがかかります。ほとんどのリアルタイムC++コードは-fno-exceptionsを指定してコンパイルします。

ホットパスでの仮想関数呼び出しを避ける

仮想関数は間接呼び出しを追加し、分岐予測を乱す可能性があります。静的ポリモーフィズムには、テンプレートまたはCRTPを使用してください。

決定性のためのロックフリー

ロックは優先度逆転を引き起こす可能性があります。ロックを保持している低優先度スレッドが、高優先度スレッドをブロックするためです。ロックフリーのデータ構造を使えば、この問題を避けられます。

優先度逆転の軽減

ロックを使わなければならない場合は、優先度継承をサポートするものを優先してください。OSがロック保持側の優先度を一時的に引き上げます。

最悪実行時間(WCET)

コードがたどる最悪の経路を分析します。ツールや手動分析によって、関数が要する最大サイクル数を見積もります。WCETはスケジューリングの判断に影響します。

OSスケジューラを避ける

ハードリアルタイムでは、RTOS(FreeRTOS、Zephyr、VxWorks)またはベアメタルを使用します。汎用OSでは、タスクが無期限に遅延する可能性があります。

キャッシュとTLBの影響

キャッシュミスやTLBミスは、予測できないストールを引き起こします。最も重要な部分のデータはキャッシュに固定するか、スクラッチパッドRAMを使用してください。

メモリプール

一般的なヒープではなく、あらかじめサイズを決めたプールから割り当てます。割り当てと解放を一定時間で実行できます。多くの組み込みC++プロジェクトでは、これだけを使用しています。

実機でプロファイリングする

ワークステーションでの性能は、MCUでの性能とはほとんど関係ありません。常に、現実的な負荷をかけてターゲットハードウェア上でベンチマークを実行してください。

クイックチェック

リアルタイムC++コードでは、なぜヒープ割り当てが問題になるのですか。

まとめ

リアルタイムC++では、ピーク性能よりも予測可能性を重視します。ヒープ、例外、仮想関数、OSが管理するロックを避けてください。静的メモリ、メモリプール、ロックフリー構造を使用し、最悪実行時間を分析します。実際のターゲットでプロファイリングしてください。

よくある質問

「リアルタイムにおける考慮事項とレイテンシー」レッスンは無料ですか?

はい。「リアルタイムにおける考慮事項とレイテンシー」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、C++ Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 C++ Academyコースには全4レッスンが含まれています。

「リアルタイムにおける考慮事項とレイテンシー」で何を学びますか?

ソフトリアルタイムおよびハードリアルタイムシステム向けに、タイミングが予測可能なコードを記述します。 ブラウザで直接実行するハンズオンコードでC++ Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

C++ Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのC++ Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。

「リアルタイムにおける考慮事項とレイテンシー」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このC++ Academyレッスンでコードを書いて実行できますか?

はい。すべてのC++ Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. 組み込み環境の制約:RTTIなし、例外なし
  2. メモリマップドI/Oとvolatile
  3. リアルタイムにおける考慮事項とレイテンシー
  4. ARMターゲット向けクロスコンパイル
← C++ Academyに戻る