web-dev-qa-db-ja.com

RAMがシングル、デュアル、またはクアッドチャネルで実行されているかどうかをウィンドウに確認するにはどうすればよいですか?

現在のRAM構成を検出するにはどうすればよいですか?RAMが現在シングル、デュアル、またはクアッドチャネルで実行されているかどうかをウィンドウに確認する必要があります。

私はたくさん検索しましたが、このサイトや他のサイトで同様の質問は見つかりませんでした。これは私にとって非常に驚くべきことです。

私はC++を使用していますが、この質問は実際にはすべてのプログラミング言語に同じように当てはまります。これは、Windows関数またはpowershell/cmdコマンドが情報を提供するためです。必要。

15
JohnAl

InterleavePositionはあなたが探しているものです。 1つはデュアルチャネルで3つのスティックを実行しているため、2,2,2として登場しました。このコマンドの出力を使用できるように、シングルチャネルを実行しているマシンを識別する方法を確認する必要があります。

wmic memorychip get InterleavePosition

編集:3本のスティックを備えたデュアルチャネルについては実際にはわかりません。いくつかの研究は、最近のほとんどのマザーボードが奇妙なものを単一のチャネルにすることを示唆しています。

したがって、MSDNから、これは、インターリーブメモリに関するシステム情報を掘り下げるという観点から作業する必要があるものです。

Position of the physical memory in an interleave. For example, in a 2:1 interleave, a value of "1" indicates that the memory is in the "even" position.

This property is inherited from CIM_PhysicalMemory.

0 - Noninterleaved

1 - First position

2 - Second position

さらに、これを言うInterleaveDataDepth

InterleaveDataDepth

Unsigned 16-bit integer maximum number of consecutive rows of data that are accessed in a single interleaved transfer from the memory device. If the value is 0 (zero), the memory is not interleaved.

ちなみに、インターリーブは「相互に共有する」という意味のファンシーな言葉で、最近のマルチチャネルに似ていますが、同じものではありません。インターリーブメモリに関するwikiから:

これは、主にインターリーブメモリがメインメモリとメモリコントローラの間にチャネルを追加しないため、マルチチャネルメモリアーキテクチャとは異なります。ただし、チャネルインターリーブも可能です... []

これを使用して、cmd.exeを使用してデュアルチャネルに4つのRAMスティックがあるように見えることを共有します:

example of dual channel memory output from wmic

編集:何人かの人々は、これらの値が一部のマシンで問題なく機能することを確認しましたが、不可解な/意味のない値を返すことが多すぎます。

5
Dylan Moore

SMBIOS仕様を見てください: システム管理BIOS(SMBIOS)リファレンス仕様 。実際、最新バージョンの日付は2018年5月14日です。

ステップ1:古いバージョンの場合は7.6 Memory Controller Information (Type 5)から_Current Interleave_を読み取り、その方法に関する注意事項に従う必要があります。最新の構造を読みます。

ステップ2:メモリデバイスを以下から取得する必要があります:

7.38メモリーチャネル(タイプ37)
オフセット名長さ値説明
 06hメモリデバイス数(n)BYTEこのチャネルに関連付けられている
メモリデバイス(タイプ11h)の数
この値は、 
次のロード/処理ペア。 

Count(n)メモリデバイスとそれに関連するチャネルを読む必要があります。

ステップ3:まとめると、次のようなテーブルになります。

_Channel 1: DIMM #0
Channel 1: DIMM #1
Channel 2: DIMM #0
Channel 2: DIMM #1
_

幸い、SMBIOS仕様にはいくつかの例があります。

たとえば、セクション_7.7.3 Memory subsystem_を見てください。

04h;現在使用されている双方向インターリーブ

仕様は頻繁に変更される可能性があり、一部は廃止されているため、すぐに使用できるWindows WMI/APIには依存しません。私が提案できる最善の方法は、RAW SMBIOS DATAを一度に読み取り、上記のような単純なテーブルを作成することです。方法は次のとおりです。 SMBIOS Demystified

さらに、実際の実効チャネル速度についてこれ以上推測することはできないと思います。各DIMMモジュールの速度に関するその他の情報を収集する必要がある場合があります。

私見、そのようなタスクのソースコードを投稿することは、現在の質問の範囲をはるかに超えているので、いくつかのリンクがあります:そのトピックに関する最良の参照は dmidecode ですが、Delphiに満足しているので、このDelphi/FPCの投稿を参照することをお勧めします: Delphiを使用してSMBiosテーブルを読み取る

0
deblocker