パフォーマンス

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

Qt Quick Components 1.1 for Symbian のリリース

Published Monday November 14th, 2011 | Leave a comment
Posted in Qt Quick, ニュース | Tags: , ,

この記事は Qt Blog の “Qt Quick Components 1.1 for Symbian – Update” を翻訳したものです。 執筆: Sami Lehtonen, 2011年11月8日 4ヶ月程前の2011年7月に Qt Quick Components が Symbian 3 および Symbian Anna 端末に登場しました。その後に販売を開始した Nokia N9 には Qt Quick Components for MeeGo 1.2 Harmattan がプリインストールされていました。 その後も開発は続いていて、とうとう Qt Quick Components 1.1 for Symbian のリリースに至りました。 新しくリリースされた Symbian Anna および Symbian Belle には、Qt 4.7.4、Qt […]

Read More

QStringBuilder を使用した文字列の結合

Published Thursday June 30th, 2011 | Leave a comment
Posted in Qt | Tags:

この記事は Qt Blog の “String concatenation with QStringBuilder” を翻訳したものです。 執筆: Olivier Goffart, 2011年6月13日 [qt QString] と [qt QByteArray] の operator+ はとても使いやすく、以下のような記述が可能です。 QString directory = /*…*/, name = /*…*/; QString dataFile = directory + QLatin1Char(‘/’) + name + QLatin1String(“.dat”); とても便利ですね。 ここで QLatin1Char と QLatin1String は正確を期すために使用しているだけなので、みなさんがアプリケーションを書く際には省略することも可能です。 というわけで、とても便利であることは分かりました。それではこの記法でのパフォーマンスはどうでしょうか? それぞれの operator+ はすぐに破棄される一時的な文字列を生成します。つまり、メモリ確保とコピーが何度も発生します。 これは以下のようにすることで高速化することができます。 QString dataFile = directory; dataFile.reserve(directory.size() + 1 + […]

Read More

QNetworkAccessManager での HTTP のスレッド化

Published Monday May 2nd, 2011 | Leave a comment
Posted in リサーチプロジェクト | Tags: , ,

この記事は Qt Blog の “Threaded HTTP inside QNetworkAccessManager” を翻訳したものです。 執筆: Markus Goetz 2011年4月29日 みなさん、こんにちは。Markus です。これは Labs での私の初めての記事になります 🙂 少し前に QNetworkAccessManager が HTTP リクエストを別スレッドで動かすための変更を加えました。これについての詳細を求める声があったため、この記事を書きました 🙂 この背景には(WebKit1 をベースにした) QtWebKit の動作が関係します。ウェブブラウザは基本的にとても多くの処理を行います。HTML や CSS の解釈、JPEG や PNG の画像データの表示可能な形式へのデコード、ページのレイアウト、ユーザーからの入力への反応、素晴らしい Web 2.0(もう 3.0?)の世界の Javascript の実行などが必要です。 ネットワークの処理がブラウザ内で同じスレッドで動作している場合、上記の処理の実行中にはネットワークの処理は先に進みません。ネットワークをトレースしたところ、”synchronization points” と呼ばれる現象が起こっていました。これは QtWebKit がメインスレッドでビジー状態にありイベントループをブロックしているため、ネットワークのリクエストが送られないという現象です。最悪なケースでは HTTP サーバーが データの送信を停止します。特に、通常のデスクトップ PC よりも処理能力が低くネットワークのレイテンシが高い場合にこの傾向は強くなります(モバイル端末の世界へようこそ!)。 これに対する解決策はいくつかあります。 QtWebKit を別スレッドに移し、ネットワークをユーザースレッドに残す QNetworkAccessManager 全体を別スレッドに移す QNetworkAccessManager […]

Read More

QStrings と Unicode — QString::fromUtf8 の最適化

Published Monday April 4th, 2011 | Leave a comment
Posted in Qt | Tags: ,

この記事は Qt Blog の “QStrings and Unicode — optimising QString::fromUtf8” を翻訳したものです。 執筆: Thiago Macieira 2011年3月25日 Other blogs in this series: このシリーズのブログ記事 SIMD 対応による描画のパフォーマンスの改善 SIMD による文字列のパフォーマンスの改善(か?) SIMD による文字列のパフォーマンスの改善: リベンジ (fromLatin1) 関連 – String Theory(この記事は日本語訳されていません) 前々回 は Latin 1(ISO-8859-1)から QString の UTF-16 への変換の問題に挑戦しました。C++ のソースコードで使用されるほとんどの文字リテラルは ASCII の範囲内で、これは Latin 1 のサブセットであり UTF-16 に簡単に変換できることを意味します。このため、この処理のパフォーマンスはとても重要です。 しかし、2011 年にもなってなぜ ASCII に限定する必要があるのか私は疑問に思いました。つまり、英語で翻訳前のメッセージを書く場合であってもマイクロ(μ)や度(°)、コピーライト(©)、さらにはユーロ記号(€)などの ASCII の範囲外の文字を必要とすることがあるでしょう。特に、最後のユーロ記号は意図的に例示しました。それはその他の文字とは違って Latin […]

Read More

SIMD による文字列のパフォーマンスの改善: リベンジ (fromLatin1)

Published Thursday March 31st, 2011 | Leave a comment
Posted in Qt | Tags: , , ,

この記事は Qt Blog の “Improving string performance with SIMD: the revenge (fromLatin1)” を翻訳したものです。 執筆: Thiago Macieira 2011年3月23日 先週は退屈な日がありました。自分自身のモチベーションをあげるためにも、お気に入りの気晴らし方法の1つ、逆アセンブル結果を読むことにしました(決して暇なわけではないんですが)。これはコンパイラが、あるコードのセクションをどう最適化をしているのかを知るために日頃からやっていることです。これにより、何か新しいことを学んだり、改善の余地を発見することができるのです。先週は色々なことを学んだ週でした。 逆アセンブル結果を読むのはそこで何をしているかを理解している場合にのみ意味があります。アセンブリ言語を理解している必要があるのは言うまでもないことです。それ以上に、何が起きているかを理解している必要があります。ラスターペイントエンジンのような複雑なファイルは、全てが本当にぐちゃぐちゃになっているため全く意味がありません。逆に、qstring.o のような簡単なものを読むことは 昨年私がやったような 様々な成果を生み出します。

Read More
Get started today with Qt Download now