CPU 機能
コレクションでコンテンツを整理
必要に応じて、コンテンツの保存と分類を行います。
CPU 機能をコード内で確認するには、いくつかの方法がありますが、それぞれに異なるトレードオフがあります。
ABI: プリプロセッサの定義済みマクロを使用する
通常は、#ifdef
と以下を併用して、ビルド時に ABI を指定しておくことをおすすめします。
__arm__
(32 ビット ARM の場合)
__aarch64__
(64 ビット ARM の場合)
__i386__
(32 ビット x86 の場合)
__x86_64__
(64 ビット x86 の場合)
32 ビット x86 は、予想される「__x86__
」ではなく「__i386__
」になることにご注意ください。
CPU コア数: libc の sysconf(3) を使用する
sysconf(3) は、_SC_NPROCESSORS_CONF
(システム内の CPU コアの数)と _SC_NPROCESSORS_ONLN
(現在オンラインになっている CPU コアの数)の両方をクエリできます。
機能: libc の getauxval(3) を使用する
API レベル 18 以降の場合、Android の C ライブラリで getauxval(3) を使用できます。AT_HWCAP
引数と AT_HWCAP2
引数は、CPU 固有の機能のリストを示すビットマスクを返します。NDK 内の各種 hwcap.h
ヘッダーで、各機能を示す定数を確認できます(arm64 の SHA512 命令の場合は HWCAP_SHA512
、arm の Thumb 整数除算命令の場合は HWCAP_IDIVT
)。
Google cpu_features ライブラリ
AT_HWCAP
の問題の 1 つとして、デバイスが誤って解釈されることがあります。たとえば、古いデバイスの場合に「整数除算命令をサポートしている」と示されても、実際にはサポートしていないことがあります。
Google の cpu_features ライブラリは、各 SoC に関する独自のナレッジを適用することで(/proc/cpuinfo
を解析して、対象の SoC を判別することで)、このような問題を回避します。
このライブラリは Google のファーストパーティ アプリチーム用に保持されており、これまでに同チームが実際に遭遇した、問題のある各デバイスについての回避策を備えています。
NDK cpufeatures ライブラリ(サポート終了)
NDK では cpufeatures
ライブラリ(サポート終了)を引き続き提供しています。これは、すでにこのライブラリを使用しているアプリとのソースの互換性を維持するためです。より完全な新しい cpu_features ライブラリとは異なり、この古いライブラリには多くの特定の SoC に対する回避策は含まれていません。
このページのコンテンツやコードサンプルは、コンテンツ ライセンスに記載のライセンスに従います。Java および OpenJDK は Oracle および関連会社の商標または登録商標です。
最終更新日 2024-02-21 UTC。
[{
"type": "thumb-down",
"id": "missingTheInformationINeed",
"label":"必要な情報がない"
},{
"type": "thumb-down",
"id": "tooComplicatedTooManySteps",
"label":"複雑すぎる / 手順が多すぎる"
},{
"type": "thumb-down",
"id": "outOfDate",
"label":"最新ではない"
},{
"type": "thumb-down",
"id": "translationIssue",
"label":"翻訳に関する問題"
},{
"type": "thumb-down",
"id": "samplesCodeIssue",
"label":"サンプル / コードに問題がある"
},{
"type": "thumb-down",
"id": "otherDown",
"label":"その他"
}]
[{
"type": "thumb-up",
"id": "easyToUnderstand",
"label":"わかりやすい"
},{
"type": "thumb-up",
"id": "solvedMyProblem",
"label":"問題の解決に役立った"
},{
"type": "thumb-up",
"id": "otherUp",
"label":"その他"
}]
{"lastModified": "\u6700\u7d42\u66f4\u65b0\u65e5 2024-02-21 UTC\u3002"}
[[["わかりやすい","easyToUnderstand","thumb-up"],["問題の解決に役立った","solvedMyProblem","thumb-up"],["その他","otherUp","thumb-up"]],[["必要な情報がない","missingTheInformationINeed","thumb-down"],["複雑すぎる / 手順が多すぎる","tooComplicatedTooManySteps","thumb-down"],["最新ではない","outOfDate","thumb-down"],["翻訳に関する問題","translationIssue","thumb-down"],["サンプル / コードに問題がある","samplesCodeIssue","thumb-down"],["その他","otherDown","thumb-down"]],["最終更新日 2024-02-21 UTC。"]]