この記事は The Qt Blog の Memory usage improvements in Qt3D を翻訳したものです。
執筆: Svenn-Arne Dragly, 2018年02月13日
KDAB と Qt コミュニティのエンジニアと共に、Qt3D のパフォーマンスと安定性の改善の取り組みを行っています。昨年の11月に Qt3D の CPU の使用量の改善 に関する記事を書きました。今回はメモリ使用量の改善について共有したいと思います。
Qt3D はとてもフレキシブルなアーキテクチャで、GUI スレッド上で動作するフロントエンドと、描画や入力処理、アニメーションを担当するアスペクトによって構成されるバックエンドが分離されています。アスペクトはそれぞれのスレッド上で動作し、スレッドプール上で動作する様々なジョブを実行します。これにより Qt3D は必要な CPU のリソースを並列化できますが、データの複製を最小限にするように気をつける必要があります。データの複製量を削減し、バックエンドのオブジェクトのメモリ使用の仕組みを改善することで、メモリ使用量を大幅に削減することができました。
Simple C++ example のようなテクスチャやその他のアセットを一切持たない簡単なプロジェクトでもこの改善を体感することが可能です。
私の Linux マシンでこのサンプルを動かしたところ、Qt 5.6.3 では 92MB だったメモリ使用量が、Qt 5.9.4 では 47MB までに改善しました。
車載のクラスタ向けで社内で利用している、より複雑なアプリケーションでも同様の効果を確認できました。これは Qt Quick と Qt 3D でダッシュボードの電気自動車を描画しています。このデモはナビ、メディア、電気使用量といったいくつかのビューで構成されています。複数のテクスチャからなる車の 3D モデルをライブ表示しています。
このサンプルでは Qt 5.6.3 では 220MB だったメモリ使用量が、Qt 5.9.4 では 135MB までに改善しました。
今後のリリースに向けても様々な改善に取り組んでいます。Qt 5.10.1 ではオンデマンドの描画のパフォーマンスを改善し、Qt 5.11では 描画のジョブの実行順序のスリム化を行いました。これにより安定性が向上し、今後のパフォーマンスの改善の余地も増えました。今後のリリースではフレーム間でのデータのキャッシュ量を増加することで処理量の削減をする予定です。