Meta Quest 3 対応版 TVLauncherGo

新しい Meta Quest 3 はフルカラーのパススルーに対応しており、仮想ディスプレイとしても非常に使いやすくなりました。公式の「リモート ディスプレイ」アプリを使えば PC のリモートディスプレイとして使えますし、同様のソフトは他にもあります。

また 2D アプリを複数枚並べて置けるため、ブラウザと同時に PC 画面を並べたりとマルチモニタのような使い方ができます。

F-Droid でインストールした Termux が起動したので、ssh ターミナルとして使ってみました。Bluetooth 接続したキーボードとマウスも使えており、KCM Remap による日本語配列への変更も普通の設定画面からできました。

以前のように Oculus TV アプリを使わなくても、アプリライブラリから直接インストールしたアプリを起動できます。(検索欄クリック→「すべて」を「提供元不明」に切り替え)

そのままだと縦長の小さいウィンドウになりますが、クイック設定から「ビューを切り替える」と自由にリサイズできるようになります。ただしビューを戻すとまた小さいウィンドウに戻ってしまいます。

そこで以前作成した TVLauncherGo を Quest 2/3 に対応させてみました。

標準でアプリ起動できるためほとんど意味のないランチャーですが、3種類の起動サイズを持たせてあります。

そのため TVLauncherGo 経由で転送したアプリを呼び出すと、ある程度任意の大きさでアプリを開けるようになります。ビューを切り替えなくても Termux も大きくなりました。

Large で起動すると更に巨大なサイズで Termux を開けます。

ビューを切り替えた方が簡単ですが、狭い場所でパススルーを使う場合は距離が近くて位置を調整できるこちらの方が使いやすいかもしれません。

関連エントリ

ROG Ally Zen4 vfpbench の結果

ROG Ally で Z1 Extreme (Zen4) に触ることができたため vfpbench の結果を調べました。ポータブル機でも 8 core あるため基本性能が高く、CPU だけでも単精度で 1 TFLOPS を超えています。

SingleThread SP max: 137.726 GFLOPS
SingleThread DP max: 68.841 GFLOPS
MultiThread SP max: 1120.448 GFLOPS
MultiThread DP max: 603.461 GFLOPS

また Zen4 は AVX512 に対応しています。AVX512 は bit 幅だけでなくレジスタ本数も倍増しており、AVX(256bit) と比べるとレジスタだけで 4倍のデータ量を扱うことができます。

Zen4 は 256bit の積和と 256bit 加算パイプラインをそれぞれ 2本の合計 4本備えています。そのため FMA だけなら同時に 2命令実行可能なので、理論上のピーク性能値は

8(avx) x 2(fma) x 2(pipe) x 8(core) x 3.3(clock) = 844.8 GFLOPS

となります。
vfpbench の結果を見ても単コアで fma の IPC が 2 です。(A)

                                      TIME(s)   MFLOPS      MOPS     FOP   IPC
FMA vfmaddps (32bit x8) n12       :    0.459   103632.4     6477.0  ( 16.0 2.0) -- (A)

ただしこれだけでは 844.8 GFLOPS であり 1 TFLOPS に届きません。

Zen 4 は積和の他に加算パイプも 2本あるため、積和命令と並行して加算命令も実行させられる可能性があります。

実際に mul + add の組み合わせ (B) では 3.9、ほぼ 4命令同時に走っておりピーク FLOPS 値が fma x2 とほぼ同等になっています。

                                      TIME(s)   MFLOPS      MOPS     FOP   IPC
AVX vmul+addps (32bit x8) n8      :    0.152   104158.5    13019.8  (  8.0 3.9) -- (B)
FMA vfma+adps (32bit x8) n12      :    0.322   110800.7     9233.4  ( 12.0 2.8) -- (C)
FMA vfma+mlps (32bit x8) n12      :    0.458    77839.3     6486.6  ( 12.0 2.0) -- (D)

同じように fma + add の (C) も IPC が 2を超えるのですが、2.8 とおよそ 3命令、1.4 倍にしかなりませんでした。それでも FOP が 3/4 で IPC が 1.4 倍なので、FLOPS 値も fma x 2 の (A) より (C) の方が上がっています。これで 844.8 GFLOPS を超えられます。

なお乗算命令は積和と同じ実行パイプを使用するため、fma + mul の組み合わせ (D) では IPC が 2のまま変わりません。

まとめると、256bit の場合 乗算+加算の場合は最大 4、積和が含まれる場合は最大 3命令同時に実行できる可能性があります。

この結果は Zen2 とは異なっています。Zen2 でも 256bit 積和 + 加算 がそれぞれ 2本の合計 4本で構成は同じですが、mul + add のケースでも最大 3命令、fma + add では 2命令までしか実行できませんでした。

AVX512 の結果を見ると、やはり 512bit では fma (E) は同時に 1命令になっています。よって fma だけのピーク FLOPS は 256bit fma x2 と変わりません。

                                      TIME(s)   MFLOPS      MOPS     FOP   IPC
AVX512 vfmaddps (32bit x16) n12   :    0.916   103842.0     3245.1  ( 32.0 1.0) -- (E)
AVX512 vfma+aps (32bit x16) n12   :    0.518   137726.3     5738.6  ( 24.0 1.7) -- (F)

ですが、fma + add の場合 (F) は約 1.8命令 (0.916/0.518 = 1.768) あり、256bit AVX の 3命令時よりも並列度が上がっていることがわかります。仮に同時に発行できる命令数が 3 op に制限されていても、AVX512 ならその影響を受けづらいということでしょうか。

現在の vfpbench には 512bit の add + mul の計測値が含まれていないので実際は不明ですが、Zen4 の場合 AVX512 の 512bit 命令でも 乗算+加算 の組み合わせは同時に 2命令実行できる可能性があります。

今回の計測値で最も高い数値が出ていたのは AVX512 512bit の fma + add の場合です。24/32 * 1.768 * 844.8 GFLOPS = 1120 GFLOPS

まとめると、

  • Zen4 は Zen2 よりも同時に実行できる fp 演算命令数が多い
  • Zen4 では 256bit 命令よりも AVX512 512bit 命令の方がピークの演算能力が高い

もちろん実際のアプリケーションで理論上の性能が出るわけではありませんのでご了承ください。

なお Intel IceLake の場合は 256bit 積和 x 2 の実行パイプなので、256bit 未満で最大 2命令、AVX512 の 512bit では同時 1命令になります。
詳しくはこちら

blog 移行

サーバー側の事情があり、Nucleus から WordPress へ移行を行いました。

データの移行には変換スクリプトを作成して、REST API で書き込んでいます。変換したのは blog の記事 (item) と画像、category、そして comment です。

●前回の移行

blog 移行は 2回目です。

前回 blog データの移行を行ったときは外部 blog だったので、直接データベースにアクセスすることができませんでした。export ツールはあったものの、出力テキストには記事 id が含まれていないために自分自身へのリンクがどの記事を指しているのかわかりません。

そこで自分自身へのリンクを解決するために、script から http で直接旧 blog のページにアクセスし、日付情報を取得してリンク先を解決する方法を取りました。

その経験から、自分自身へのリンクは blog 固有の記事 id ではなく、できるだけ日付で行うようにしていました。1日1投稿の制限を守れば、id が分からなくてもリンク先の記事が特定できるためです。

●今回の移行

今回は直接データベースにアクセスできるため、変換自体は問題ありませんでした。記事 id (item id) を使ったリンクでも問題なく置き換えできており、日付で自己参照していた意味はありませんでした。

ただし今回は同じサイトということもあり、できるだけ Nucleus 時代の固有 URL を維持するように心がけました。Nucleus の記事 id を WordPress の slug (n+番号) として登録して、従来の記事 id でも容易にアクセスできるようにしています。

実際の置き換えそのものは mod rewrite で行っています。

例えば Nuclues の ~/item/番号 のリンクの変換は

RewriteRule ^item/(\d+) n$1 [R=301,L]

となります。

同じように Nucleus 時代のリンクがエラーにならないよう、archive の日付、category の番号、query を使った「?itemid=番号」や「?virtualpath=」なども変換を行っています。

RewriteCond %{QUERY_STRING} ^virtualpath=(.*)$
RewriteRule ^(.*)$  %1/? [QSD,R=301,L]
RewriteCond %{QUERY_STRING} ^itemid=(.*)$
RewriteRule ^(.*)$  n%1/? [QSD,R=301,L]
RewriteRule ^archive/1/(\d+)-(\d+)-(.*)$  $1/$2/$3 [R=301,L]
RewriteRule ^category/(\d+)  category/cat$1 [R=301,L]

実際に使用したスクリプトをこちらに上げておきます。

https://github.com/hiroog/nucleustowp

Oculus Quest 2 のスペックと TVLauncherGo の呼び出し

Oculus Quest 2 を入手しました。性能が上がりつつ価格も下がっており、今 VR を始めるなら間違いなくこれが候補にあがるのではないかと思います。ケーブルも外部センサーも不要なモバイル VR でありながらルームスケールに対応しており、Oculus Link を使えば PC の VR ゲームもプレイできます。

Oculus Quest 1 とスペックを比較してみます。

Oculus Quest Oculus Quest 2
SoC Snapdragon 835 Snapdragon XR2
CPU Kryo 280 (A73 + A53) Kryo 585 (A77 + A55)
CPU Clock 2.5GHz / 1.9GHz 2.8GHz / 2.4GHz / 1.8GHz
RAM 4GB 6GB
GPU Adreno 540 Adreno 650
OS Adnroid 7.1 (API 25) Android 10 (API 29)
Display OLED 1440 x 1600 x2 LCD 1832 x 1920 x2
IPD調節 無段階 3段階のみ
発売 2019/05 2020/10
価格 49800円 (64GB) 37100円 (64GB)

VR HMD はハイエンド向けとモバイル向けに分かれています。ハイエンド向けではトラッキングの精度やトラッカーの数でまだまだ Lighthouse 方式が優勢でしょう。モバイル向けでは仕様的に Oculus Quest で完成されており、Quest 2 はさらなる機能強化が図られています。

まずパネル解像度が上がっており、片目だけで Full HD の 1.7倍 (1920×1832) に達しています。Quest 1 と比べても明らかにドットの隙間が見えにくくなっているのがわかります。

HMD ROM 価格 重さ RAM 画面 解像度比
Oculus Go 32GB 23800円 $199 468g 3GB 2560×1440 1.00
Oculus Go 64GB 29800円 $249 468g 3GB 2560×1440 1.00
Oculus Quest 64GB 49800円 $399 571g 4GB 2880×1600 1.25
Oculus Quest 128GB 62800円 $499 571g 4GB 2880×1600 1.25
Oculus Quest2 64GB 37100円 $299 503g 6GB 3664×1920 1.91
Oculus Quest2 256GB 49200円 $399 503g 6GB 3664×1920 1.91

ガーディアンの外に出ると外部カメラの画像に切り替わりますが、Quest 2 の方が歪みが減って明るくなっており、そのまま違和感なく歩けます。

プロセッサも強化されています。スペックを調べると CPU は 1+3+4 構成の Octa core で、それぞれ 2.8GHz, 2.4GHz, 1.8GHz でした。GPU も Adreno 650 だったので、Snapdragon XR2 は Snapdrago 865 をベースにしていると思われます。

基本性能が強化された反面、コストダウンが見える部分もあります。Oculus Go と同じゴムバンドになっており、軽量化されているものの装着時の安定度は Quest 1 の方が上です。また小型化のためか内部の空間に余裕がなくなり、スペーサーを入れてもメガネがかなり入りづらくなっています。

一番残念だったのが、画面を見ながら IPD の微調整ができなくなっていることです。一旦 HMD を外してから直接レンズ部分をずらす必要があり、切り替えも 3段階のみとなっています。

また新しく Oculus デバイスをセットアップする場合は Facebook アカウントが必要です。

● Bluetooth Keyboard

Oculus Quest の UI は更新されており、外部ツールを使わなくても設定から Bluetooth Keyboard をペアリングできるようになっています。Quest 1 でもできるようになっています。

・設定 → テスト機能 → Bluetooth ペアリング

ただしキーボードレイアウトの変更はできないので、日本語配列などレイアウトを切り替えたい場合はやはり TVLauncerGo などの外部ツールから Android 本来の設定画面を呼び出す必要があります。レイアウト変更手順は下記の通り。

・TVLauncerGo → 設定 → システム → 言語と入力 → 物理キーボード → 物理キーボードを選択 → キーボードレイアウトの設定

● TVLauncherGo の呼び出し

Oculus Quest 1 と同じように TVLauncherGo が動きました。アカウントを開発者登録してから PC と USB で接続し、adb コマンドでインストールしています。

Oculus Go で一般 Android アプリを起動できるランチャーを作ってみた
GitHub: TVLauncherGo

Oculus TV がシステムに統合されているため、以前の解説と起動方法は異なっています。

1. Oculus ボタンのメニューから「アプリ」を選択
2. 右上のプルダウンを「すべて」にする
3. 右上の「テレビ」を選択
4. テレビアプリの左から「チャンネル」→「提供元不明のアプリ」

Quest2 TVLauncherGo

Quest2 TVLauncherGo

もしくは下記の方法でも直接呼び出せます。

1. アプリの右上のプルダウンを「提供元不明」にする
2. 直接 TV Launcher Go を選ぶ。

Quest2 TVLauncherGo

● Termux / UserLAnd

Termux は Version によっては動かないことがあるようです。昨年 2020/10 月に試したときは、Quest 1 で使っていた古いバージョンを使用しました。

UserLAnd は問題なくインストールできました。VNC を使うときに注意が必要な点も Quest 1 と同じです。Termux は単独で起動できますが、UserLAnd は TVLauncherGo 経由で呼び出す必要があります。詳しくは下記をご覧ください。

Oculus Quest も文章書き&開発マシンにする

なお Android 10 になったため CTRL+SPACE の入力ができなくなっています。Quest 1 は Android 7.1 なので入力できました。

UserLAnd : Android 9.0 で Ctrl + SPACE を使えるようにする

関連エントリ
Oculus Quest で Rift のゲームをプレイする (Oculus Link)
Oculus Quest 5万円ちょうどで買えるフルスペック VR
Oculus Quest も文章書き&開発マシンにする
Android/Oculus Go/Daydream の画面をミラーリングするツールを作ってみた
Oculus Go で一般 Android アプリを起動できるランチャーを作ってみた
VR で物が大きく見えたり小さく見えたりするわけ
Oculus Go は VR ができる新しい携帯ゲーム機

PlayStation 5 の RAM 容量とストレージ

PlayStation はおよそ 6~7 年で新しい機種が出ています。歴代のメモリ容量を比べてみると、一世代毎にちょうど 16倍に増えていることがわかります。この法則で行けば PlayStation 5 のメモリ容量は 8GB × 16 で 128GB になるはず、なのですが実際は 16 GB で 2倍に増えただけでした。(PS5 Press release)

発売年 PlayStation RAM 容量 前世代比
1994 PlayStation 2 MB
2000 PlayStation 2 32 MB 16倍
2006 PlayStation 3 512 MB 16倍
2013 PlayStation 4 8 GB 16倍
2020 PlayStation 5 16 GB (128 GB?) 2倍 (16倍?)

RAM 128GB は PC を見てもコスト的にまだ厳しいように見えますし、VRAM を 128GB 搭載したビデオカードもまだ出ていません。

期待されるメモリ容量との差をカバーしているのがおそらく高速 SSD になります。今の世代で力が入っているのはむしろストレージの方で、この 7年の変化は RAM よりも SSD の方が大きかったのでしょう。

専用 SSD によってロード時間を限りなく短縮できるならメモリ容量の限界を超えることに繋がります。限られたコストで中途半端に RAM を増やすよりも、ストレージに力を入れた方がより効果的だとの判断があったのではないかと思います。

なお上の表には若干ごまかしがあります。昔の機種は VRAM や Sound Memory が別だったので、それらを含めると PS1/PS2 の容量は増えます。さらに PS3 は最初から VRAM 込みの値になってます。修正すると下記の通り。

発売年 PlayStation System Memory Memory 合計 前世代比
1994 PlayStation 2 MB 3 MB
2000 PlayStation 2 32 MB 38 MB 13倍
2006 PlayStation 3 256 MB 512 MB 13倍
2013 PlayStation 4 8 GB 8 GB 16倍
2020 PlayStation 5 16 GB 16 GB 2倍

関連エントリ
PlayStation 4
PS3 PPU は速いのか