2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Arm64ECでx64/Arm64混在バイナリを実現!0か100か?いや50で行こう!

2
Posted at

一体いつから ――――― クリスマス当日に26件目のアドカレを投稿しないと錯覚していた

はい、グランドフィナーレしたはずだったのですが、書き忘れですね。

■ はじめに:溶け合う世界へ

異なるCPUアーキテクチャのバイナリを動かす方法、というとどんな手段を想像しますかね?おおよそ、こんな感じだと思います。

  • 力技で解釈→実行(QEMU)
  • どっちのバイナリも抱える(AppleのUniversal Binary)
  • バイナリを動かすときに動的変換(AppleのRosetta)
  • バイナリをインストールするときに動的変換(AppleのRosetta2)

いったいどこのだれが、「アーキテクチャの過渡期?だったら、どっちのバイナリを1つに混ぜればいーじゃん」とか思いつくんですかね!!本当、Microsoftの中の人は天才です!(最大限の誉め言葉)

■ Arm64EC

Windows 11からサポートされているArm64ECという仕組みは、上記のような手段と違って「異なるコードを混ぜても動かせる」という中々トリッキーなABIである。ライブラリじゃないよ!!ABIだよ!!(ここが重要)。

▢ 従来:Arm64ECがない世界

x64形式でしか提供されないバイナリがあります。動かしたい実行環境はArm64です。
手元にはソースコードは有るので、バイナリは作れます、と。

〇Arm64でリンク

x64形式のバイナリは、Arm64のバイナリと一緒にリンクできません。

お帰り下さい、ご主人様:no_good_tone1:(冷たい)

〇x64でリンク

x64形式のバイナリは、x64のバイナリと一緒にリンクできますよ!よかったですね!じゃあ、さっそく動かしますか!!

でも、Arm64上でエミュレーションしながら動かすので、
当然ながらパフォーマンス出ません・・・:no_good_tone3:

つまり、どんなに小さいユーティリティなバイナリでも
x64バイナリが1つでもあったら、全滅だったわけですよ。

▢ 現代:Arm64ECのある世界

Arm64ECがあると、ちょっと世界が変わります。

〇Arm64ECでリンク

x64形式のバイナリと、Arm64EC形式のバイナリがあるんですか。 混ぜちゃいましょう!!

Arm64EC形式のところは、CPU Native相当で動かしますね!:ok_woman_tone1:
x64形式のところ、エミュレーションで動かしますね!!:ok_woman_tone2:

本当に素晴らしい発想です。もはや力技の極みです(本当にほめている)。

■ OpenCVのArm64EC対応

(おいおいOpenCVはどこ行ったんだ、と思った方もいらっしゃるかもしれませんが・・・)

さて、OpenCV 4.13.0に向けて、気合でOpenCVもArm64EC対応いれたわけですよ。16ファイル直しちゃったんですよ(なので、この記事を書いています)。

https://github.com/opencv/opencv/pull/27416
https://github.com/opencv/opencv/pull/25903

ただ、残念ながら完璧ではないのですよね・・・
追加修正があると、こんな感じでポロポロぬけることもある。
まあ、しゃーないのです。

裏を返せば、OpenCVのContributorになってみたい方!!ここがチャンスですよ!!!
さあ、ベンチマークの時間だ、ヒャッハアアーー!!!!

■ まとめ

もう、x64バイナリしかない、と性能を諦めなくてもいいのです。
もう、Arm64バイナリに統一しなきゃ動かない、と嘆かなくていいのです。

Arm64ECは全部を包み込んでくれます、ありがとう……:angel:

え?パフォーマンスのボトルネックになるモジュールがx64なんだけど、どうしよっか、だって?

WRRRRRRRRYYYYYYYYYYYYYYY!!!
無ーーー駄無駄無駄無駄無駄無駄無駄無駄無駄無駄無駄ァァァァァァ!!!
そんなもの!!!Arm用にbuildしなおし一択だァァァァ!!!
:imp:

失礼、取り乱しました。

でもこのバイナリ混在できる柔軟性こそが、次の進化に繋がるステップなのです。世の中、0か100かばかりじゃない。たまーには50とかもいいもんです。

以上です、ありがとうございました。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?