27

プログラムで実行されているCPUのキャッシュラインサイズをC++で読み取ってほしい。

これは移植可能ではないことを知っているので、Linux用のソリューションとWindows用のソリューションが必要になります(他のシステムのソリューションは他の人にも役立つ可能性があるので、知っている場合は投稿してください)。

Linuxの場合、/ proc / cpuinfoの内容を読み取り、cache_alignmentで始まる行を解析できます。たぶん、APIの呼び出しを含むより良い方法があります。

Windowsの場合、私にはまったくわかりません。

4

7 に答える 7

18

Win32では、必要な情報を含むを含むGetLogicalProcessorInformationを返します。SYSTEM_LOGICAL_PROCESSOR_INFORMATIONCACHE_DESCRIPTOR

于 2008-09-29T19:38:50.060 に答える
5

Linux では、/proc/cpuinfo を読み取るためのアーキテクチャに依存しない C API であるproccpuinfo ライブラリを試してください。

于 2008-09-29T19:49:21.890 に答える
4

x86 の場合、CPUID命令。Google で簡単に検索すると、win32 および c++ 用のライブラリがいくつか見つかります。インライン アセンブラ経由でも CPUID を使用しました。

いくつかの詳細情報:

于 2008-09-29T19:46:10.697 に答える
3

少なくともSCOunix(http://uw714doc.sco.com/en/man/html.3C/sysconf.3C.html)にはsysconfの_SC_CACHE_LINEがあるようです。おそらく他のプラットフォームにも似たようなものがありますか?

于 2008-09-29T19:38:19.997 に答える
3

Windows の場合

#include <Windows.h>
#include <iostream>

using std::cout; using std::endl;

int main()
{
    SYSTEM_INFO systemInfo;
    GetSystemInfo(&systemInfo);
    cout << "Page Size Is: " << systemInfo.dwPageSize;
    getchar();
}

Linux の場合

http://linux.die.net/man/2/getpagesize

于 2016-09-13T09:25:46.607 に答える
0

NtQuerySystemInformationからが必要だと思いますntdll.dll

于 2008-09-29T19:45:14.927 に答える