ローエンドの組み込みLinuxにおけるQt Quick Compilerのベンチマーク

 

アプリケーション開発者にとって、組み込みハードウェアのパフォーマンス最適化は常に課題です。Qt Quickは、Qt Quick Compilerにより、ソースコードを変更することなくオプションを有効にするだけでパフォーマンス向上を提供します。

Qt Quick Compilerについては、研究開発チームがすでに以下のようなパフォーマンスベンチマークを実施しています。

しかし、これらのテストは主にQML言語自体に焦点を当てていると思います。アプリケーション開発者として、最も関心を持っているのはアプリケーションレベルでの潜在的な改善の可能性を評価することです。そのため、既存のQt Quick Coffee Machineデモをテスト対象として選び、Colibri iMX6ULLハードウェアプラットフォームをテストに利用しました。

テストケース

以下のケースでテストを行いました。

  1. qmlsc(qmlcachegen): Qt Quick Compilerのデフォルトqmlcachegenでコンパイル
  2. qmltc: Qt Quick CompilerのQMLタイプコンパイラでコンパイルし、qmlcachegenもデフォルトで有効にします (QML Type Compilerを参照)
  3. オフ:実行時環境変数 QML_DISABLE_DISK_CACHE=true を設定することで、Qt Quick Compilerのqmlcachegenを完全に無効にします

qmltcについて

Qt 6.8の時点では、qmltcはまだ技術プレビュー段階であり、いくつかの制限があります。例えば、デフォルトのQt Quickコントロールはアプリケーションで直接使用できません (Known Limitations 参照)。

これに対処するために、CMakeのトリックをいくつか使った実験的な一時的な解決策を作成しました。この解決策では、qt_add_qml_module用のラッパー関数qt_add_qml_module_qmltcを提供しており、CMakeターゲット指定の後で、Qt Quick Controlスタイルのパラメータを追加で受け取ります。

このリンクからアクセス可能です。使用例:

qt_add_qml_module_qmltc(apptestQtQuickControl Basic
URI testQtQuickControl
  VERSION 1.0
QML_FILES
        Main.qml
)

Qt Quick ControlのスタイルはC++ではなくQMLで実装されているため、qmltcを基本スタイルのボタンを含むアプリケーションで使用すると、次のようなエラーが発生します。

Error: Main.qml:10:5: Can't compile the QML base type "Button" to C++ because it lives in "QtQuick.Controls.Basic" instead of the current file's "untitled" QML module. [compiler]    Button {    ^^^^^^

この制限を理解した上で、必要なQMLファイルをqmltcに渡してコンパイルするソリューションが採用されています。qt_add_qml_module_qmltc関数の2番目のパラメータ(例えば、Basic)は、対応するスタイルのQMLファイルを自動的に検索してインクルードし、指定されたCMakeターゲットにバインドします。これにより、Buttonなどのコンポーネントがモジュール内で利用可能になります。必要なプライベートライブラリもリンクされますが、現時点ではBasicスタイルのみがサポートされています。

ベンチマーク構成

ベンチマークを実施するために、Coffee Machine デモに以下の拡張を追加しました。

  1. 画面遷移を自動化するバックエンドシミュレータ
  2. FPS やその他のパフォーマンス指標を記録するベンチマークモジュール
  3. QML エンジンのロード時間を測定するユニットテスト。

変更したソースコードはこちらです

ベンチマークは2つのテストで構成されています。

  • レンダリングパフォーマンス:シミュレータが画面遷移を自動化しながらFPSを記録します。
  • 起動パフォーマンス:ユニットテストでQMLエンジンのロード時間を評価します。

以下は、100回繰り返しのベンチマーク結果です。

起動時間ベンチマーク

Qt Quick Compiler 設定 起動時間 (ミリ秒)
qmlsc (qmlcachegen) 428.04
qmltc 346.74
Off 682.76

FPS ベンチマーク

Qt Quick Compiler 設定 平均 FPS フレーム数 実行時間 (ミリ秒)
qmlsc (qmlcachegen) 50.3352 25181 500266
qmltc 50.8467 25437 500268
Off 50.3136 25170 500262

結論

qmltc のパフォーマンスは印象的で、QMLのロード時間をほぼ半分に短縮しました。ただし、再度注意しておきますが、qmltc はまだ技術プレビュー段階にあるため、実稼働のプロジェクトでは慎重に使用すべきです。

qmlscモードでも同様のパフォーマンス改善が見られました。

フレームレート(FPS)では、qmltcも最高の数値結果を示しましたが、いずれのケースでも改善はわずかでした。これは予想通りで、コーヒーマシンのデモでは、QMLの動的読み込みにStackViewLoaderをあまり使用していないためです。現在のFPSの結果は、ハードウェアの制約によってすでに限界に達しているようです。

コーヒーマシンのデモは比較的単純であり、より複雑なアプリケーションではさらに大きな改善が期待できるでしょう。


Blog Topics:

Comments