Qtブログ(日本語)

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

作成者: 鈴木 佑|Sep 3, 2018 1:53:06 AM

この記事は The Qt BlogQt 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 などと比べると Qt はよりよいパフォーマンスを発揮することができます。QML の JIT コンパイルに対応し、QML の実行エンジンにも様々な改善がなされたQt 5.9 は、64bit の ARMv8 プロセッサでは QML と JavaScript のパフォーマンスが大幅に改善されています。もちろん最新ではない 32bit の ARMv7 のようなプロセッサでも改善はされていますが、64bit の ARMv8 では際立っています。この記事で紹介する計測結果は組み込み Linux でのものですが、(Android や QNX といった) その他の OS でも同レベルの結果となっています。

QML と JavaScript で書かれた Qt Quick アプリケーションに有効なベンチマークとして、QML BenchV8 Bench があります(この "V8" はベンチマークの名前で、 Qt のエンジンとは関係ありません)。最近、現在 Qt が提供している LTS(5.6.3 と 5.9.5) に対してパフォーマンスの比較を同じ 64bit の ARMv8 プロセッサ上の組み込み Linux の環境で行いました。

まず、V8 Bench のテストセットによる JavaScript のパフォーマンスの比較を見てましょう:

各テストのパフォーマンスの結果を見ると Qt 5.9.5 で大幅に改善されたことがわかると思います。Qt 5.6.3 に対して平均で18倍高速に実行されています。主な要因としては、Qt 5.9.5 で 64bit ARMv8 プロセッサ向けに対応した JIT コンパイルがあげられます。新しいインストラクションセットの利用に起因するその他の改善も JavaScript と QML の高速化に寄与しています。

これに加えて、Qt Quick Controls にも大きな改善がありました。Qt Quick Controls に対する QML Bench の比較表をご覧ください。

Qt 5.6.3 で提供している Qt Quick Controls 1 は主にデスクトップアプリでの利用を想定していました。機能的にはとても便利なため多くのみなさんが Qt Quick Controls 1 を組み込み向けにも利用しようとしていましたが、パフォーマンス的な問題に直面することも多々ありました。このため、組み込みシステムでも使えるような Qt Quick Controls 2 を開発しました。これも Qt 5.9.5 が以前のバージョンに対してパフォーマンスが大きく改善された要因です。Qt Quick Controls 1 を組み込みシステムでスムーズに動作させるのが難しい場合は、Qt Quick Controls 2 に乗り換えることで8倍程度高速に動作することになり、問題は解消するでしょう。

最後の3つ目のグラフは QML Bench のその他の分野をまとめた結果です:

それぞれのカテゴリには複数のテストが含まれていて、別のエリアの結果は他のものと比較はできません。Qt 5.9.5 での改善がわかりやすいように、Qt 5.6.3 の結果を100で正規化してあります。このグラフはすべてのカテゴリにおいて改善が極めて顕著で、どのような Qt Quick/QML アプリケーションでも明らかなレベルの改善がなされていることを示しています。

今回の記事では、Qt の前回の LTS のリリース以降、64bit ARMv8 プロセッサ上で大幅に改善してきた Qt Quick のパフォーマンスについての概要を紹介しました。Qt 5.6.3 と Qt 5.9.5 で、QML Bench のすべてのテストに対する計測を行った結果、QML では 95%、JavaScript では 1785% もパフォーマンスが向上しました。実際のアプリケーションでどの程度この恩恵を受けるかに関しては、様々な要因が影響しますが、特にどの機能をどの程度使用しているのかに依存します。すべての機能は Qt 5.9.5 の方が高速に動作します。既存の機能のパフォーマンスの改善に加え、Qt 5.9 では新たにパフォーマンスを向上させる機能も提供しています。

私たちは改善を継続的に行っています。次回の LTS は今回のものよりさらに高速に動作するでしょう。Qt 5.9 と比較し、Qt 5.11 ベータ版を利用した計測では、JavaScript のパフォーマンスは 20% も高速化されています(Qt 5.6.3 と比較すると 22 倍です)。一般的な Qt Quick や QML の機能では同程度で、多少改善されているエリアも存在します。Qt 5.9 と同様に、Qt 5.12 LTS の向けたパフォーマンスの改善をパッチリリースごとに行っていく予定です。パフォーマンスについては常に監視をしていて、パフォーマンスが落ちた際にはすぐに修正ができる体制になっています。Qt Quick のパフォーマンスのモニタリングについては Eskil のこちらの記事 をご覧ください。Qt Quick では様々な分野でのパフォーマンスのテストを自動化していて、その数値を継続的に改善するようにしています。現時点でのテストの詳細と結果は、こちら で公開しています。