回答編集履歴
6
ちょっと読みやすくした
answer
CHANGED
@@ -22,12 +22,14 @@
|
|
22
22
|
|
23
23
|
- [CPUID - Wikipedia](https://en.wikipedia.org/wiki/CPUID)
|
24
24
|
|
25
|
-
EAX(`__cpuid`の第2引数`function_id`
|
25
|
+
EAXが1の場合(`__cpuid`の第2引数`function_id`に1を渡した場合)、EDX (`data[3]`) の28ビット目が、ハイパースレッディングの有効・無効を表しているようです。
|
26
26
|
|
27
|
+
> EAX=1 CPUID feature bits
|
28
|
+
>
|
27
|
-
| ビット | Short | 機能 |
|
29
|
+
> | ビット | Short | 機能 |
|
28
|
-
|------|-------|-----|
|
30
|
+
> |------|-------|-----|
|
29
|
-
| … | … | … |
|
31
|
+
> | … | … | … |
|
30
|
-
| 28 | htt | Hyper-threading |
|
32
|
+
> | 28 | htt | Hyper-threading |
|
31
33
|
|
32
34
|
- [論理/物理プロセッサコア数の取得 - yohhoyの日記](http://d.hatena.ne.jp/yohhoy/20140811/p1)
|
33
35
|
|
5
ハイパースレッディング状態を取得するための条件を記載
answer
CHANGED
@@ -22,7 +22,7 @@
|
|
22
22
|
|
23
23
|
- [CPUID - Wikipedia](https://en.wikipedia.org/wiki/CPUID)
|
24
24
|
|
25
|
-
EDX (`data[3]`) の28ビット目が、ハイパースレッディングの有効・無効を表しているようです。
|
25
|
+
EAX(`__cpuid`の第2引数`function_id`)が1の場合、EDX (`data[3]`) の28ビット目が、ハイパースレッディングの有効・無効を表しているようです。
|
26
26
|
|
27
27
|
| ビット | Short | 機能 |
|
28
28
|
|------|-------|-----|
|
4
Wikipediaからの引用を追加
answer
CHANGED
@@ -24,6 +24,11 @@
|
|
24
24
|
|
25
25
|
EDX (`data[3]`) の28ビット目が、ハイパースレッディングの有効・無効を表しているようです。
|
26
26
|
|
27
|
+
| ビット | Short | 機能 |
|
28
|
+
|------|-------|-----|
|
29
|
+
| … | … | … |
|
30
|
+
| 28 | htt | Hyper-threading |
|
31
|
+
|
27
32
|
- [論理/物理プロセッサコア数の取得 - yohhoyの日記](http://d.hatena.ne.jp/yohhoy/20140811/p1)
|
28
33
|
|
29
34
|
C++で物理コア数を取得するほかの方法としては、Boost Thread Libraryの`boost::thread::physical_concurrency()`静的メンバ関数を使用するものがあります。
|
3
ハイパースレッディングの有効・無効は、EAXではなくEDXの28ビット目だった
answer
CHANGED
@@ -22,7 +22,7 @@
|
|
22
22
|
|
23
23
|
- [CPUID - Wikipedia](https://en.wikipedia.org/wiki/CPUID)
|
24
24
|
|
25
|
-
|
25
|
+
EDX (`data[3]`) の28ビット目が、ハイパースレッディングの有効・無効を表しているようです。
|
26
26
|
|
27
27
|
- [論理/物理プロセッサコア数の取得 - yohhoyの日記](http://d.hatena.ne.jp/yohhoy/20140811/p1)
|
28
28
|
|
2
説明順を整理
answer
CHANGED
@@ -24,10 +24,10 @@
|
|
24
24
|
|
25
25
|
EAX=1 CPUID feature bitsの28ビット目が、ハイパースレッディングの有効・無効を表しているようです。
|
26
26
|
|
27
|
+
- [論理/物理プロセッサコア数の取得 - yohhoyの日記](http://d.hatena.ne.jp/yohhoy/20140811/p1)
|
28
|
+
|
27
29
|
C++で物理コア数を取得するほかの方法としては、Boost Thread Libraryの`boost::thread::physical_concurrency()`静的メンバ関数を使用するものがあります。
|
28
30
|
|
29
|
-
- [論理/物理プロセッサコア数の取得 - yohhoyの日記](http://d.hatena.ne.jp/yohhoy/20140811/p1)
|
30
|
-
|
31
31
|
そのWindows環境での実装は、以下のようになっています:
|
32
32
|
|
33
33
|
```cpp
|
1
引用したソースコードのコメントを日本語訳
answer
CHANGED
@@ -43,6 +43,7 @@
|
|
43
43
|
unsigned thread::physical_concurrency() BOOST_NOEXCEPT
|
44
44
|
{
|
45
45
|
// a bit too strict: Windows XP with SP3 would be sufficient
|
46
|
+
// Windows XP SP3より古いと実装は難しい
|
46
47
|
#if BOOST_PLAT_WINDOWS_RUNTIME \
|
47
48
|
|| ( BOOST_USE_WINAPI_VERSION <= BOOST_WINAPI_VERSION_WINXP ) \
|
48
49
|
|| ( ( defined(__MINGW32__) && !defined(__MINGW64__) ) && _WIN32_WINNT < 0x0600)
|