パフォーマンス

Qt におけるシリアル化

Published Sunday October 28th, 2018 | Leave a comment
Posted in Qt for Automation | Tags: , , , , ,

この記事は The Qt Blog の Serialization in and with Qt を翻訳したものです。 執筆: Maurice Kalinowski, 2018年05月31日 この連載の最初の記事 で、メッセージの構築と組み合わせ、テレメトリセンサーでのオーバーヘッドの削減を紹介しました。 今回は、メッセージのペイロード(本体)とその最適化について紹介します。 Qt にはオブジェクトのシリアル化の方法がいくつかあります。パート1では、JSON を利用しました。この場合、すべてのセンサーの情報は QJsonObject に収められ、QJsonDocument が情報を QByteArray に変換する役を担いました。 QJsonObject jobject; jobject[“SensorID”] = m_id; jobject[“AmbientTemperature”] = m_ambientTemperature; jobject[“ObjectTemperature”] = m_objectTemperature; jobject[“AccelerometerX”] = m_accelerometerX; jobject[“AccelerometerY”] = m_accelerometerY; jobject[“AccelerometerZ”] = m_accelerometerZ; jobject[“Altitude”] = m_altitude; jobject[“Light”] = m_light; jobject[“Humidity”] = m_humidity; […]

Read More

QML コンパイラパイプラインの最適化

Published Tuesday September 18th, 2018 | Leave a comment
Posted in Qt | Tags: , , , , , ,

この記事は The Qt Blog の Optimizing the QML compiler pipeline を翻訳したものです。 執筆: Lars Knoll, 2018年05月22日 Qt QML は Qt Quick でユーザーインターフェースを構築する際のプログラミング言語である QML を実行するためのエンジンです。Qt QML 自体には描画機能に関する依存が一切ありません。このモジュールでは、QML 言語のサポートに加え、ECMAScript 5.1 に準拠した JavaScript のエンジンを提供しています。 Qt Quick というユーザーインターフェース技術の基礎を提供するこのモジュールは、Qt のユーザーに向けた核となるものです。内部的には主に2つの要素で構成されています。QML と ECMAScript をバイナリデータ構造とバイトコード/アセンブリにコンパイルするためのコンパイラパイプラインと、そこで生成されたコードを実行するためのランタイムです。今回の記事は前者についてのものになります。 5.10 まで利用していた Qt QML のコンパイラパイプラインはここ数年の Qt のアップデートでとても複雑になってしまいました。 以下の図は簡易化した以前のコンパイラパイプラインを示したものです。 まず QML と JavaScript のコードを 字句解析器(Lexer) と 構文解析器(Parser) に送り、抽象構文木(AST) というコンパイル用のコードに変換します。この […]

Read More

Qt 5.11 の圧縮テクスチャ

Published Wednesday September 5th, 2018 | Leave a comment
Posted in Qt | Tags: , , ,

この記事は The Qt Blog の Compressed Textures in Qt 5.11 を翻訳したものです。 執筆: Eirik Aavitsland, 2018年05月07日 最近のユーザーインターフェースはグラフィックスがどんどん派手になっていて、グラフィックメモリに収めたいテクスチャの数もどんどん増えています。リソースが比較的高価な組み込みシステムでは特にこの傾向が強く、パフォーマンスとの格闘にも成り得ます。1つの解として、グラフィックのアセットのメモリの使用量を減らすということがあげられます。 OpenGL テクスチャの圧縮には、起動時間と実行時のパフォーマンスを大きく改善する可能性があります: 起動時:jpeg や png のような圧縮形式の解凍の手間がありません 起動時:テクスチャは比較的小さいので、GPU メモリに転送する時間も短縮されます 実行時:メモリのバンド幅の利用が削減されます 解凍作業は単純でハードウェアで行われるため、パフォーマンスの大きな低下は起こりません Qt Quick 2 での圧縮テクスチャ Qt Quick 2 のソースコードには長い間 textureprovider というサンプルが含まれていました。これは ETC1 圧縮のテクスチャを pkm 形式のコンテナファイルから読み込んで画像として提供するようなものを実現する際に有用なサンプルでした。 Qt 5.10 で、この機能は Qt Quick 自体に密かにインポートされていました。と言うわけで特になにもしなくても、ローカルやリソース内の pkm ファイルを Image の source に指定することで実現が可能です。また、ETC2 圧縮スキームの対応も行われました。 Qt 5.11 […]

Read More

Qt Quick の 64-bit ARM でのパフォーマンスの改善

Published Monday September 3rd, 2018 | Leave a comment
Posted in Qt | Tags: ,

この記事は The Qt Blog の Qt Quick Performance Improvements on 64-bit ARM を翻訳したものです。 執筆: Tuukka Turunen, 2018年04月24日 Qt 5.9 LTS の目標の1つは Qt 5.6 LTS に対するパフォーマンスとメモリの消費量を改善することでした。この記事では、64-bit ARMv8 のインストラクションセットを持つ最近の組み込みCPUでのパフォーマンスの改善について解説したいと思います。Qt 5.6.3 と比較した結果、QML のパフォーマンスは2倍に上り、JavaScript については何と18倍になっています。 Qt 5.9 LTS のリリース時に Qt 5.9 のパフォーマンスに関する記事 を書き、パフォーマンスが改善した分野の概要を紹介しました。これらの改善は OS の種類やプロセッサのアーキテクチャに依らないもので、すべてのユーザーが効果を得られるものでした。それぞれのプロセッサや OS にはそれぞれの特徴があるため多少のバラツキはありますが、Qt のパフォーマンスは常に改善しつづけています。別の言い方をすると、Qt を最新版にアップデートする度に、既存のシステム上でよりよいパフォーマンスが得られます。ハイエンドのシステムでかなり高度な UI を実現しているところでも、ローエンドのハードウェアで頑張っているところでもパフォーマンスの改善の効果は得られます。 最近の組み込み向けのプロセッサでは 64bit 向けの ARMv8 のインストラクションセットを提供するものが増えていて、32bit の ARMv7 などと比べると […]

Read More

Qt3D のメモリ使用量の改善

Published Tuesday March 20th, 2018 | Leave a comment
Posted in Qt | Tags: ,

この記事は 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 […]

Read More

Qt 3D の CPU 使用量の改善

Published Monday December 4th, 2017 | Leave a comment
Posted in Qt | Tags: ,

この記事は The Qt Blog の CPU usage improvements in Qt 3D を翻訳したものです。 執筆: Svenn-Arne Dragly, 2017年11月16日 前回の LTS である Qt 5.6 以降、様々な改善が Qt 3D に対して行われてきました。KDAB と The Qt Company のエンジニアが Qt 5.9 LTS に向けて様々な新機能の開発を行い、そのうちの多くが KDAB の Sean Harmer による What’s new in Qt 3D with Qt 5.9 にてカバーされています。さらなる新機能(例えば Vulkan 対応)が計画どおり進んでいますが、直近のリリースではパフォーマンスと安定性にも注力しています。パフォーマンスは実際に Qt 5.6 と比べると非常に改善していて、複雑なシーンや巨大なフレームグラフを持つシーンではこの改善による効果が顕著です。 多くのビューポートを持つシーンは、個々のビューポートがそれぞれのリーフノードに対応するため巨大なフレームグラフになりがちです。Qt 3D […]

Read More

Qt 5.9 LTS のパフォーマンスの改善

Published Monday June 19th, 2017 | Leave a comment
Posted in Qt | Tags: ,

この記事は The Qt Blog の Performance Improvements with Qt 5.9 LTS を翻訳したものです。 執筆: Tuukka Turunen, 2017年5月31日 Qt 5.9 LTS では Qt Quick および QML のパフォーマンスが ARM 上の Linux 環境を中心に、劇的に改善されました。これまで QML のエンジンや Qt Quick の描画エンジン、QML コンパイラ、Qt Quick Controls などの領域でパフォーマンスの改善に力を入れてきました。パフォーマンスの改善は様々な領域に渡って大幅に改善しており、いくつかのアイテムでは一つ前の LTS Qt 5.6 と比較して数倍も高速になった部分もあります。 様々なプラットフォームにおいて、数々の最適化の効果を継続的に把握するために、いくつかのパフォーマンスのテストを定期的に実施しています。まだ自動化できていないテスト項目もありますが、これらの結果は testsresults.qt.io で公開しています。私たちは Qt がサポートしているすべてのプラットフォームや CPU アーキテクチャに対してパフォーマンスの改善に可能な限りの時間を割きたいと思っています。本記事では ARM 上での Linux は Qt 5.9 […]

Read More

Qt 5.9 でのシェーダーバイナリのキャッシュによるパフォーマンスの改善

Published Wednesday April 5th, 2017 | Leave a comment
Posted in Qt | Tags: , , ,

この記事は The Qt Blog の Boosting performance with shader binary caching in Qt 5.9 を翻訳したものです。 執筆: Laszlo Agocs, 2017年3月23日 Qt 5.9 のリリースが近づいてきました。というわけで、Qt Quick (および OpenGL を利用した QPainter の描画)のベースとなっている OpenGL の重要な部分に関して行った、わずかですが非常に便利な改善について紹介したいと思います。 Qt 5.9 のドキュメントのスナップショットを見た方の中には 由緒正しい QOpenGLShaderProgram に追加されたいくつかの機能 に気づいた方もいるかもしれません。これは Qt の内部で利用していた API がこの新しい API になりました。これは実際どういうものでしょうか? ここで説明しているように、これらのシェーダープログラムのバイナリが GL_ARB_get_program_binary もしくは OpenGL ES 3.0 の同様の標準機能を用いてディスクに保存されるようになります。ドライバがこの機能を提供していない場合には、キャッシュがない場合と同様の動作になります。キャッシュファイルは書き込み可能な キャッシュ用の場所 に、グローバルもしくはプロセスごとに生成されます。これにより、2回目以降に同じシェーダーのプログラムが使われる場合のパフォーマンスが大幅に改善されます。 実際にどの程度の改善になるでしょう?これは一概にはなんとも言えません。ここ数年、このようなキャッシュを行うようになったドライバもありますし、パイプラインに似たような機能が実装されているドライバも世の中には存在しますが、現時点で市場に出回っているデバイスでは非常に大きな効果がありました。 ここで実際の数値は気にしないでください。重要なポイントは Qt […]

Read More

Qt 5.8.0 での QML のパフォーマンスの改善について

Published Wednesday April 5th, 2017 | Leave a comment
Posted in Qt | Tags: , , ,

この記事は The Qt Blog の Qt QML Performance improvements in Qt 5.8.0 を翻訳したものです。 執筆: Alex Blasche, 2017年3月8日 Qt 5.8 では大幅な Qt QML のパフォーマンスの改善がなされました。数人のエンジニアが多くの時間を費やし、どこがどう遅いのか、どう改善できるのかを調べました。これは Qt QML を最初にリリースした時から常に継続していることで、今後もこれは続くでしょう。ある程度の検討を重ねた結果、実際にどういう作業が行われているかをわかりやすくすることにしました。この長期に渡るプロジェクトを通していくつものパフォーマンス関連のツールや社内外のエンジニアによるベンチマークに関するノウハウが蓄積されています。これにより複雑なアレコレを一般化することが可能になりました。 起動時間 Qt 5.6.2 と Qt 5.8.0 で、グラフィカルと非グラフィカルなベンチマークで起動時間を比較してみました。対象のプラットフォームは Windows と Ubuntu、macOS、iMX6 ボード(この中で唯一32bitの環境になります)です。起動時間は以下の Qt の環境で確認しました。 Qt 5.6.2 Qt 5.6.2 + 商用の Qt Quick Compiler (qmlcompiler) Qt 5.8.0 + QML キャッシュなし Qt […]

Read More

Qt 5 でのメタオブジェクトシステムの変更点

Published Tuesday July 3rd, 2012 | Leave a comment
Posted in Qt | Tags: , ,

この記事は Qt Blog の “Changes to the Meta-Object System in Qt 5” を翻訳したものです。 執筆: Kent Hansen, 2012年6月22日 Qt 5 では メタオブジェクトシステム に対する変更が行われました。内部的な変更だけではなく、API にも変更があります。Qt 4 とのソースコード互換性のない変更も行われました。この記事では、これらの変更の詳細とどのような対応が必要になるのかについて紹介したいと思います。また、QMetaMethod に新たに加えられた便利な API の紹介もあわせてしたいと思います。 Qt 4 でのメタオブジェクトのバージョンのサポートの削除 (moc によって生成される)メタオブジェクトにはデータの(形式や順番などの)内容やメタオブジェクトの機能を特定するためのバージョン番号が含まれています。Qt の(マイナー)リリースでメタオブジェクトに(クラスのコンストラクタを検索可能にするような)新機能を追加した際には、このメタオブジェクトのバージョンを上げる対応が必要になります。そして、Qt 4 での最終的なメタオブジェクトのバージョンは 6 でした。 Qt のマイナーリリースでは、後方互換性の維持のために古いのバージョンもメタオブジェクトもサポートしていました。内部のコードでは、それぞれのメタオブジェクトに対してバージョンをチェックし、それに応じた処理が行われていました。 Qt 5 は Qt 4 とのバイナリ互換性を保持しないため、メタオブジェクトの以前のバージョンのサポートを打ち切るちょうどいい機会になりました。Qt 5 では Qt 4 で対応してきた様々なバージョンのメタオブジェクトが生成されることはないので、それらのバージョンに対応するためのコードを削除しました。Qt 5 での現在のメタオブジェクトのバージョンは 7 になります。

Read More
Get started today with Qt Download now