タグ検索

 

外部リンク

Top Page > Info > [Unity]Unity5はC#をC++化する技術でパフォーマンス大幅UPするかも

[Unity]Unity5はC#をC++化する技術でパフォーマンス大幅UPするかも

2014-05-20

UnityのIL2CPP(C#をC++に変換する技術)だが、別のプラットフォームにも使うらしい。(正しくはC#の吐いたアセンブリをC++に直す)

そもそも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がバージョンアップし、汚いリフレクションは排除され、彼女が出来る(出来ません)
関連記事

ーーー
この記事が気に入ったらシェアしてくれると嬉しいです

Info コメント: 0 トラックバック: 0

次の記事 >






    



管理者にだけ公開させる

トラックバックURL
→ http://terasur.blog.fc2.com/tb.php/791-6dede9b6

この記事にトラックバックする(FC2ブログユーザー)

| |