« マルチプラットフォームのGUIツールキット | メイン | CPU判定処理の結果など »

2016年01月02日

吉里吉里Z 開発:: 吉里吉里ZのCPU判定処理を変更したので確認のお願いと64bit版

    

アセンブリで記述されていたCPU判定処理をイントリンシックを使いC++で書き直し、SSE2以降のSIMD命令対応判定を追加しました。

CPUの判定が正しく機能していることを確認していただけると助かります(特に非IntelのAMDなどのCPUで)。
この対応で SSE2 より後の命令を入れやすくなったのと、64bit 対応等がやりやすくなります。

CPU判定処理変更版 + 64bit版履歴
2016/01/02 18:15 : cpuid_check_20160102.zip 初回リリース
2016/01/02 18:42 : cpuid_check_20160102_002.zip Corei7 920 / Atom Z3735F で判定失敗、AVXレジスタ判定修正後問題なく動作
2016/01/02 19:13 : cpuid_check_20160102_003.zip AMD A10-5700 TSC が間違っていたので修正後一致
2016/01/02 21:06 : cpuid_check_20160103.zip RDTSCP,RDRAND,RDSEEDを追加、FPU判定をcpuidから取得

確認していただきたいのは、以下の二点です。

1. check.bat と check_old.bat を実行比較して「(info) CPU #0 : FPU:yes MMX:yes」~ 「(info) finally detected CPU features :」の内容で TSC までの yes/no と 末尾の「Intel(GenuineIntel) 」などの文字列、EAX=の後の値、EBX=の後の値が同じかどうか。
2. SSE2以降のSSE3 ~ AVX2, FMA3, AES(-NI) の yes/no が他のcpuz等のソフトで表示される対応状況と同じかどうか。


確認後、ツイッターやコメントで以下の部分をコピペして報告もらえると助かります。
「(info) CPU #0 : FPU:yes MMX:yes 3DN:no SSE:yes CMOVcc:yes E3DN:no EMMX:yes SSE2:yes TSC:yes SSE3:yes SSSE3:yes SSE41:yes SSE42:yes SSE4A:no AVX:yes AVX2:yes FMA3:yes AES:yes Intel(GenuineIntel) [Intel(R) Core(TM) i7-4770T CPU @ 2.50GHz] CPUID(1)/EAX=000306C3 CPUID(1)/EBX=00100800」

----

結果をもらったものなど
CPU #0 : FPU:yes MMX:yes 3DN:no SSE:yes CMOVcc:yes E3DN:no EMMX:yes SSE2:yes TSC:yes SSE3:yes SSSE3:yes SSE41:yes SSE42:yes SSE4A:no AVX:yes AVX2:yes FMA3:yes AES:yes Intel(GenuineIntel) [Intel(R) Core(TM) i7-4770T CPU @ 2.50GHz] CPUID(1)/EAX=000306C3 CPUID(1)/EBX=00100800

CPU #0 : FPU:yes MMX:yes 3DN:no SSE:yes CMOVcc:yes E3DN:no EMMX:yes SSE2:yes TSC:yes SSE3:yes SSSE3:yes SSE41:yes SSE42:yes SSE4A:no AVX:yes AVX2:yes FMA3:yes AES:yes Intel(GenuineIntel) [Intel(R) Core(TM) i7-5820K CPU @ 3.30GHz] CPUID(1)/EAX=000306F2 CPUID(1)/EBX=00100800

SSE3:yes SSSE3:yes SSE41:yes SSE42:yes SSE4A :no AVX:no AVX2:no FMA3:no AES:no Intel(GenuineIntel) [Intel(R) Core(TM) i7 CPU 920 @ 2.67GHz] CPUID(1)/EAX=000106A5 CPUID(1)/EBX=00100800

CPU #0 : FPU:yes MMX:yes 3DN:no SSE:yes CMOVcc:yes E3DN:no EMMX:yes SSE2:yes TSC:yes SSE3:yes SSSE3:yes SSE41:yes SSE42:yes SSE4A:yes AVX:yes AVX2:no FMA3:yes AES:yes AMD(AuthenticAMD) [AMD A10-5700 APU with Radeon(tm) HD Graphics ] CPUID(1)/EAX=00610F01 CPUID(1)/EBX=00040800

CPU #0 : FPU:yes MMX:yes 3DN:no SSE:yes CMOVcc:yes E3DN:no EMMX:yes SSE2:yes TSC:yes SSE3:yes SSSE3:yes SSE41:yes SSE42:yes SSE4A:no AVX:yes AVX2:no FMA3:no AES:yes Intel(GenuineIntel) [ Intel(R) Core(TM) i7-2720QM CPU @ 2.20GHz] CPUID(1)/EAX=000206A7 CPUID(1)/EBX=00100800

CPU #0 : FPU:yes MMX:yes 3DN:no SSE:yes CMOVcc:yes E3DN:no EMMX:yes SSE2:yes TSC:yes SSE3:yes SSSE3:yes SSE41:yes SSE42:yes SSE4A:no AVX:no AVX2:no FMA3:no AES:no (略) [Intel(R) Core(TM) i7 CPU 930 @ 2.80GHz] CPUID(1)/EAX=000106A5 CPUID(1)/EBX=00100800

CPU #0 : FPU:yes MMX:yes 3DN:no SSE:yes CMOVcc:yes E3DN:no EMMX:yes SSE2:yes TSC:yes SSE3:yes SSSE3:yes SSE41:no SSE42:no SSE4A:no AVX:no AVX2:no FMA3:no AES:no Intel(GenuineIntel) [Intel(R) Core(TM)2 Duo CPU U7500 @ 1.06GHz] CPUID(1)/EAX=000006FD CPUID(1)/EBX=00020800

CPU #0 : FPU:yes MMX:yes 3DN:no SSE:yes CMOVcc:yes E3DN:no EMMX:yes SSE2:yes TSC:yes SSE3:yes SSSE3:yes SSE41:yes SSE42:yes SSE4A:no AVX:yes AVX2:no FMA3:no AES:yes Intel(GenuineIntel) [ Intel(R) Core(TM) i7-3520M CPU @ 2.90GHz] CPUID(1)/EAX=000306A9 CPUID(1)/EBX=00100800

CPU #0 : FPU:yes MMX:yes 3DN:no SSE:yes CMOVcc:yes E3DN:no EMMX:yes SSE2:yes TSC:yes SSE3:yes SSSE3:yes SSE41:no SSE42:no SSE4A:no AVX:no AVX2:no FMA3:no AES:no Intel(GenuineIntel) [Intel(R) Core(TM)2 Duo CPU U7600 @ 1.20GHz] CPUID(1)/EAX=000006FD CPUID(1)/EBX=00020800

CPU #0 : FPU:yes MMX:yes 3DN:no SSE:yes CMOVcc:yes E3DN:no EMMX:yes SSE2:yes TSC:yes SSE3:yes SSSE3:yes SSE41:yes SSE42:yes SSE4A:no AVX:yes AVX2:no FMA3:no AES:yes Intel(GenuineIntel) [ Intel(R) Core(TM) i5-3317U CPU @ 1.70GHz] CPUID(1)/EAX=000306A9 CPUID(1)/EBX=00100800

CPU #0 : FPU:yes MMX:yes 3DN:no SSE:yes CMOVcc:yes E3DN:no EMMX:yes SSE2:yes TSC:yes SSE3:yes SSSE3:yes SSE41:yes SSE42:yes SSE4A:no AVX:no AVX2:no FMA3:no AES:no Intel(GenuineIntel) [Intel(R) Core(TM) i5 CPU U 470 @ 1.33GHz] CPUID(1)/EAX=00020655 CPUID(1)/EBX=00100800

CPU #0 : FPU:yes MMX:yes 3DN:no SSE:yes CMOVcc:yes E3DN:no EMMX:yes SSE2:yes TSC:yes SSE3:yes SSSE3:yes SSE41:yes SSE42:yes SSE4A:no AVX:no AVX2:no FMA3:no AES:yes Intel(GenuineIntel) [ Intel(R) Atom(TM) CPU Z3740 @ 1.33GHz] CPUID(1)/EAX=00030673 CPUID(1)/EBX=00100800

CPU #0 : FPU:yes MMX:yes 3DN:no SSE:yes CMOVcc:yes E3DN:no EMMX:yes SSE2:yes TSC:yes SSE3:yes SSSE3:yes SSE41:no SSE42:no SSE4A:no AVX:no AVX2:no FMA3:no AES:no Intel(GenuineIntel) [ Intel(R) Atom(TM) CPU Z2760 @ 1.80GHz] CPUID(1)/EAX=00030651 CPUID(1)/EBX=00040800
----
64bit版

基本的に前回の吉里吉里Z 64bit版試作と同じです。
最新版にマージして dev_64bit ブランチに入れました。

Phase Vocoder は、主に開発時に使用されると思われるので、後回しでいいとして JPEG 読み込みとグラフィック部分の SIMD 対応は先に対応して、64bit 版を使えるようにしたいところ。
64bit 化でどのような不具合があるかわからないので、今後リリース時にテスト版として 64bit を同梱して確認してもらう機会を増やしていくことを考え中。
プラグインは 32/64bit の両方で必要になるので、64bit の場合は plugin64 フォルダを優先的に読み込むように変更して、32bit 版の dll は plugin フォルダ、64bit 版の dll は plugin64 フォルダに入れることで共存可能にすることを検討中。

64bit 版が出来ても、使用可能メモリ量が増えると言うメリットはゲームでは薄いので、あまり要望としてはないだろうか?
Android や Mac OSX に対応するとなると 64bit 対応も入ってくるのであった方がいいと思う。
後は、プロセス一覧で(32ビット)と言う注釈がなくなるのとネイティブ64bit対応している感がすっきりして気持ちいいくらい。


投稿者 Takenori : 2016年01月02日 18:15




comments powered by Disqus
Total : Today : Yesterday : なかのひと