[Unity]Unity5はC#をC++化する技術でパフォーマンス大幅UPするかも
UnityのIL2CPP(C#をC++に変換する技術)だが、別のプラットフォームにも使うらしい。(正しくはC#の吐いたアセンブリをC++に直す)
そもそもIL2CPPはWebGL 具体的にはasm.jsに対応する為の技術として公開されていた。で、これを他のプラットフォームでも行う事が今日のUnity公式ブログにあった。
The future of scripting in Unity
(ユニティのスクリプトの未来)
凄く要約すると、こんな感じ。
C++化してパフォーマンスアップ…
これは地味に大きいと思う。何だかんだ言ってC#よりC++の方が細かくチューン出来るから正しくチューン出来るなら高速で実行できるし(特に大きなバイト列)。Unityの処理の一部をC++化する話は実は少し使えて、この記事では大体ボトルネックの処理を25倍くらい高速化したらしい。自分も検証した記事をその内上げる。
面白いのが、システム自体がC++化することでマーシャルのコストがほぼ0になりそうな事。(この方法をサポートするかは不明だが)C++(アンマネージドコード)とC#(マネージドコード)がメッセージをやりとりする際、メモリの情報を一旦コピー等してお互い安全に使えるようにする。これがマーシャルでネイティブプラグインのコストな訳だが、これがお互いアンマネージドコードになることでコスト0になる事が予想される。(現状もunsafeやref使う事で突破出来ていそうな感じはあるが)
もっと極端に言えば、C++のソースをプロジェクトにぶち込めばC#から読んでくれるようになるかも。
もしコレが可能なら、基本的なゲームの流れはコーディングが容易で学習コストの低いC#で記述し、パフォーマンスが必要な部分(AIとか当たり判定、シリアライズ)はC++でコードを自作して最適化する・・・といった手法が来るかもしれない。(この辺りはUnityがどの程度C++のコードを最適化するかによって有用性は変わる)
もう一つ、.NETのバージョンが上がる事をほのめかしてる。Unityの.net(mono)は2.0改な訳だけど、それをついでに現代版にするとの事。ちなみにUnity Editor(ゲームを実行していない部分)はIL2CPP変換を前提とした.NETではなくmonoを継続して使う模様。一応どっちもアップデートされるっぽいかな。
ちなみにAOTなので、リフレクションやその他諸々のライブラリは使えない模様。要するにiOSと同じ制限。まあC++だし仕方な無いね。(でも静的リフレクションは使えたらいいなあ)
そう!
IL2CPPの力でUnityは最適化され、拡張性が上がり、.NETがバージョンアップし、汚いリフレクションは排除され、彼女が出来る(出来ません)
ーーー
この記事が気に入ったらシェアしてくれると嬉しいです
そもそもIL2CPPはWebGL 具体的にはasm.jsに対応する為の技術として公開されていた。で、これを他のプラットフォームでも行う事が今日のUnity公式ブログにあった。
The future of scripting in Unity
(ユニティのスクリプトの未来)
凄く要約すると、こんな感じ。
・C#コードもC++化して最適化がかけられるのでパフォーマンスが2〜3倍上がる
・静的解析もできるんで深く最適化出来る
・.NET(Mono)がアップデートされるかも。Microsoftと共同で互換性を担保
・静的解析によりGCが減るらしい(スコープが短い処理はスタックに置くとか?)
・とりあえずWebGL版が上手く行ったら他にも移植する
・AOTと同じ制約
C++化してパフォーマンスアップ…
これは地味に大きいと思う。何だかんだ言ってC#よりC++の方が細かくチューン出来るから正しくチューン出来るなら高速で実行できるし(特に大きなバイト列)。Unityの処理の一部をC++化する話は実は少し使えて、この記事では大体ボトルネックの処理を25倍くらい高速化したらしい。自分も検証した記事をその内上げる。
面白いのが、システム自体がC++化することでマーシャルのコストがほぼ0になりそうな事。(この方法をサポートするかは不明だが)C++(アンマネージドコード)とC#(マネージドコード)がメッセージをやりとりする際、メモリの情報を一旦コピー等してお互い安全に使えるようにする。これがマーシャルでネイティブプラグインのコストな訳だが、これがお互いアンマネージドコードになることでコスト0になる事が予想される。(現状もunsafeやref使う事で突破出来ていそうな感じはあるが)
もっと極端に言えば、C++のソースをプロジェクトにぶち込めばC#から読んでくれるようになるかも。
もしコレが可能なら、基本的なゲームの流れはコーディングが容易で学習コストの低いC#で記述し、パフォーマンスが必要な部分(AIとか当たり判定、シリアライズ)はC++でコードを自作して最適化する・・・といった手法が来るかもしれない。(この辺りはUnityがどの程度C++のコードを最適化するかによって有用性は変わる)
もう一つ、.NETのバージョンが上がる事をほのめかしてる。Unityの.net(mono)は2.0改な訳だけど、それをついでに現代版にするとの事。ちなみにUnity Editor(ゲームを実行していない部分)はIL2CPP変換を前提とした.NETではなくmonoを継続して使う模様。一応どっちもアップデートされるっぽいかな。
ちなみにAOTなので、リフレクションやその他諸々のライブラリは使えない模様。要するにiOSと同じ制限。まあC++だし仕方な無いね。(でも静的リフレクションは使えたらいいなあ)
そう!
IL2CPPの力でUnityは最適化され、拡張性が上がり、.NETがバージョンアップし、汚いリフレクションは排除され、彼女が出来る(出来ません)
- 関連記事
- [Unity]Unity5はC#をC++化する技術でパフォーマンス大幅UPするかも
- [Unity]アルファ入りPVRTCへのアプローチ
- [Unity]他の人はタブの配置をどうしているのだろうか
- [Unity]new GUIはUnity 4.6で来る
- [Unity]Flappy Birdライクなゲーム試作
- [Unity]Unite2014
- [Unity]自動化されたパフォーマンスの回帰テストについて
ーーー
この記事が気に入ったらシェアしてくれると嬉しいです
| |