teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

6

ちょっと読みやすくした

2017/04/05 09:54

投稿

faithandbrave
faithandbrave

スコア132

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`)が1場合、EDX (`data[3]`) の28ビット目が、ハイパースレッディングの有効・無効を表しているようです。
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

ハイパースレッディング状態を取得するための条件を記載

2017/04/05 09:54

投稿

faithandbrave
faithandbrave

スコア132

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からの引用を追加

2017/04/05 09:50

投稿

faithandbrave
faithandbrave

スコア132

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ビット目だった

2017/04/05 09:47

投稿

faithandbrave
faithandbrave

スコア132

answer CHANGED
@@ -22,7 +22,7 @@
22
22
 
23
23
  - [CPUID - Wikipedia](https://en.wikipedia.org/wiki/CPUID)
24
24
 
25
- EAX=1 CPUID feature bitsの28ビット目が、ハイパースレッディングの有効・無効を表しているようです。
25
+ EDX (`data[3]`) の28ビット目が、ハイパースレッディングの有効・無効を表しているようです。
26
26
 
27
27
  - [論理/物理プロセッサコア数の取得 - yohhoyの日記](http://d.hatena.ne.jp/yohhoy/20140811/p1)
28
28
 

2

説明順を整理

2017/04/05 09:43

投稿

faithandbrave
faithandbrave

スコア132

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

引用したソースコードのコメントを日本語訳

2017/04/05 09:40

投稿

faithandbrave
faithandbrave

スコア132

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)