CPU Upgrade:
How to easily check your CPU Vendor, Model,
Internal speed, and L1 cache mode settings.

by Jan Steunebrink
Last updated on Februari 2, 2023

CPU Identification Utility - CHKCPU v1.27.1 - 25th anniversary 'Retro update' edition

This CHKCPU 'Retro' update is the first version to support 16-bit CPUs, and more 386/486 CPU models as well

Introduction

After a CPU and/or motherboard upgrade, it can be difficult to find the correct motherboard jumper or BIOS settings for clockspeed, clock multiplier, and (for 486 only) internal cache Write-Back/Write-Through mode selection.
I wrote a utility, called CHKCPU, to have an easy check on these settings.
On the other hand, CHKCPU is also useful for checking the CPU type and speed on a given machine and, due to its text-based output, information from CHKCPU can easily be used to get CPU info from each machine in a network by calling CHKCPU from the network log-on script or via a remote execution tool.

CHKCPU comes in two flavors, a DOS version and a Win32 console mode version. I've named the Win32 version CHKCPU32 to distinguish it from the DOS version. Both versions give approximately the same text-based output.
You can download both programs here and in each zip a text-file is included with more information about the program and the changes I've made in this revision.
DOS version: CHKCPU v1.27.1
Win32 version: CHKCPU32 v2.15
Both programs have the same update status regarding the CPU model data, and they are both freeware.

The programs

CHKCPU can be run from the DOS prompt or from a DOS-box within Windows. CHKCPU is designed to run under DOS 5.0 or higher, or any 32-bit version of Windows. For most CPUs however, the Clock multiplier and Bus clock speed can only be indicated in 'Real mode' DOS.
CHKCPU32 is designed to run in the command window of any 32-bit or 64-bit Windows version (Win95 or higher). Because CHKCPU32 is a true Windows program, it gives a better speed indication accuracy on high speed CPUs than the 16-bit CHKCPU when run under Windows. This is especially true under WinNT4 and all later Windows versions.
In addition, CHKCPU32 can display the number of CPUs and Cores in a system.

Main differences between CHKCPU and CHKCPU32
Feature CHKCPU CHKCPU32 Remarks
Support for DOS Yes No CHKCPU32 is the 32-bit successor of the 16-bit CHKCPU DOS version.
Support for Windows Yes, but only 32-bit Windows Yes, any 32-bit or 64-bit Windows version CHKCPU32 has better speed indication accuracy under WinNT4 and later Windows versions.
CHKCPU32 is 64-bit Windows aware and makes use of additional CPU Topology support of 64-bit Windows.
CPU support 8086/8088 and up 586 and up Support for NexGen and UMC CPUs has been dropped from CHKCPU32.
Use CHKCPU if 8086/8088, 80286, 386, 486, NexGen, or Vortex86 support is needed.
Multiplier/FSB support Yes No For most CPUs, CHKCPU will display the multiplier and busspeed in Real mode DOS only.
Multi Core/CPU support No Yes CHKCPU32 shows the processor topology in a system on 3 levels:
Physical CPU count, Core count per CPU, Total number of logical processors (=Threads).
Note: As with any Win32 process, CHKCPU32 is limited to 32 Threads under 32-bit Windows.
Under 64-bit Windows however, CHKCPU32 is able to detect up to 256 logical processors.
XML output No Yes CHKCPU32 can display various CPU details in XML format.
Intended for easy parsing of specific CPU data for use in another program.
L1 Cache Mode indication Yes No As this indication lost its meaning on modern Pentium class CPUs, it has been dropped from CHKCPU32.

To make using the text-based Chkcpu(32) easier under Windows, I have packed a batch file in the zip of both programs. This batch-file allows a quick check on the CPU details, without opening a command window and typing the required commands. Just unzip the CHKCPU(32).BAT and CHKCPU(32).EXE files in a folder and double-click on the CHKCPU(32).BAT file in explorer.

Output examples

On my upgraded 586 PC, CHKCPU displays the following information:
 CPU Identification utility v1.27.1               (c) 1997-2022 Jan Steunebrink
 ------------------------------------------------------------------------------
 CPU Vendor and Model: AMD K6-III+ 450/475/500/550
 Internal CPU speed  : 601.2 MHz  (using internal Time Stamp Counter)
 Clock Multiplier    : 6.0 
 Bus clock speed     : 100.2 MHz
 CPU-ID Vendor string: AuthenticAMD
 CPU-ID Name string  : AMD-K6(tm)-III Processor
 CPU-ID Signature    : 0005D0
                       |||||+- Stepping or sub-model no.
                       ||||+- Model: Indicates CPU Model and 486 L1 cache mode
                       |||+- Family: 4=486, Am5x86, Cx5x86
                       |||           5=Pentium, Nx586, Cx6x86, K5/K6, C6, mP6
                       |||           6=PentiumPro/II/III, CxMII/III, Athlon, C3
                       |||           F=Pentium4, Athlon64
                       ||+- Type: 0=Standard, 1=Overdrive, 2=2nd Dual Pentium
                       |+- Ext. Model: Extends the Base Model to an 8-bit value
                       +- Ext. Family: Extends the Base Family value
 Current CPU mode    : Real
 Internal (L1) cache : Enabled in Write-Back mode

Apart from this 'Normal' display, CHKCPU supports command-line switches to get another format or to display additional CPU information.
You can get a list of these switches with the command CHKCPU /? or /H
The following switches are supported: Switches can be combined. Example: CHKCPU /S /C gives a short display of the CPU type only. The speed is not displayed.
Note that on 8086/8088-80286 CPUs only the /C, /S, and /H or /? switches are supported.

Except for the /I switch, CHKCPU32 supports the same switches, adds an /X switch for the XML mode, and uses the /R switch for another purpose:


On my Celeron M laptop, running Windows 7 32-bit, CHKCPU32 /V shows:
 CPU Identification utility v2.15                 (c) 1997-2022 Jan Steunebrink
 ------------------------------------------------------------------------------
 CPU Vendor and Model: Intel Celeron M 410/420/423/430 C0-step
 Internal CPU speed  : 1729.0 MHz
 System CPU count    : 1 Physical CPU(s), 1 Core(s) per CPU, 1 Thread(s)
 CPU-ID Vendor string: GenuineIntel
 CPU-ID Name string  : Intel(R) Celeron(R) M CPU        430  @ 1.73GHz
 CPU-ID Signature    : 0006E8
 CPU Features        : Floating-Point Unit on chip  : Yes
                       Time Stamp Counter           : Yes
                       Enhanced SpeedStep Technology: No
                       Hyper-Threading Technology   : No
                       Execute Disable protection   : Yes
                       64-bit support               : No
                       Virtualization Technology    : No
 Instr set extensions: MMX, SSE, SSE2, SSE3
 Size of L1 cache    : 64 KB
 Integrated L2 cache : 1024 KB
 Integrated L3 cache : None

CHKCPU32 /V under Windows 10 64-bit on my AMD Desktop box looks like:
 CPU Identification utility v2.15                 (c) 1997-2022 Jan Steunebrink
 ------------------------------------------------------------------------------
 CPU Vendor and Model: AMD Ryzen 5 3600/3600X Six-Core B0-rev.
 Internal CPU speed  : 3599.9 MHz
 System CPU count    : 1 Physical CPU(s), 6 Core(s) per CPU, 12 Thread(s)
 CPU-ID Vendor string: AuthenticAMD
 CPU-ID Name string  : AMD Ryzen 5 3600 6-Core Processor              
 CPU-ID Signature    : 870F10
 CPU Features        : Floating-Point Unit on chip  : Yes
                       Time Stamp Counter           : Yes
                       Cool'n'Quiet support         : Yes
                       Hyper-Threading Technology   : Yes
                       Execute Disable protection   : Yes
                       64-bit support               : Yes
                       Virtualization Technology    : Yes
 Instr set extensions: MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, SSE4A,
                       AES, AVX, AVX2, F16C, FMA3, SHA
 Size of L1 cache    : 6 x 64 KB
 Integrated L2 cache : 6 x 512 KB
 Integrated L3 cache : 32768 KB

Specific CPU Family and Vendor support

CHKCPU recognizes any 8086/8088 or higher CPU, however detailed information can only be displayed for CPUs which support the CPUID instruction or Cyrix CPUs with Device Identification Register (DIR) support. This covers some 486 and all 586/Pentium and higher CPUs.
CHKCPU recognizes CPUs from Intel, AMD, NEC, NexGen, Cyrix/IBM/TI, UMC, IDT, VIA, Rise, Transmeta, SiS, and DMP.
If the program is run on a 8086/8088/80286/386 or (non-Cyrix) 486 CPU without CPUID support, the CPU will be indicated as a 'Classic' model with proper CPU and/or FPU identification and a shortened display with only speed and (if present) cache information will follow.

CHKCPU32 is meant to be used on 586/Pentium or higher CPUs only. CPUs which do not know the CPUID instruction are not supported by CHKCPU32. In addition, CHKCPU32 relies solely on the TSC for CPU speed measurement.
CHKCPU32 recognizes CPUs from Intel, AMD, Cyrix/IBM, IDT, VIA, Rise, and Transmeta.

Clock multiplier and CPU speed

Since the Intel 486DX2 hit the market, most CPUs run internally faster than externally.
The Internal CPU speed display indicates the true internal CPU clock speed.
The internal CPU clock speed = Bus clock X Clock multiplier.
The Bus clock is the speed of the motherboard clock.
On Pentium class CPUs, the multiplier factor is usually selectable in steps of 0.5 (x1.5, x2, x2.5, x3 etc.).
Some CPUs have a fixed multiplier factor (Celeron, PentiumIII/4), and some use fractional factors like x1.75 (K5) or x2.33 (Winchip-2A).

Most CPUs provide data on which Clock multiplier setting they are running. CHKCPU will display the Clock multiplier when available, and also calculate and displays the Bus clock speed in this case.
Note that the classic Pentiums, like the Intel Pentium I, Pentium MMX, and AMD K6 do not provide any clock multiplier data.

For Intel CPUs the internal speed equals the rating. So a Pentium 200 will run internally at 200 MHz. (66.6 x 3)
For AMD, Cyrix, and Rise CPUs the internal speed can be lower than the PR rating due newer and more efficient design.
For the K6-2 and later AMD CPUs upto 1400MHz, the internal speed equals the rating but modern CPUs use a performance figure as rating.

CHKCPU measures the CPU speed by accurately timing the execution of a bunch of slow 'Divide' instructions.
For Pentium class CPUs however, the internal Time Stamp Counter (TSC) is used whenever possible to further improve the accuracy of the speed measurement.
A message behind the CPU speed display indicates if the TSC is used.
As using the TSC would crash CHKCPU when the CPU is in 'Virtual mode', the CPU speed measurement switches back to the (less accurate) instruction timing method when the CPU is not in 'Real or Protected mode'.

CHKCPU32 measures the CPU speed by accurately timing the increment of the CPU's internal Time Stamp Counter (TSC). As a timebase, the Windows own PerformanceCounter is used which in turn is based on one of the motherboard's hardware timers.
When the /R switch is used, the displayed CPU speed is a value measured by Windows early during the boot process and stored in the Registry. This value can therefore deviate from the actual CPU speed when running CHKCPU32.

Other display details

The CPU-ID Name string is only displayed when supported by the CPU. This name string is stored in the CPU and is usually programmed into the CPU by the manufacturer or by the BIOS at boottime.

CHKCPU32 only:
The 'System CPU count' display indicates the hardware topology of enabled logical processors in the system on 3 levels:
1) Number of physical CPU packages
2) Number of Cores per CPU package
3) Total number of logical processors (=Threads).
Without Hyper-Threading, the number of logical processors is equal to the number of Cores per CPU times the number of physical CPU packages. But with Hyper-Threading enabled, the indicated number of logical processors is double the number of physical cores in a system.

Internal (L1) cache mode

CHKCPU only:
The program detects if the internal (Level 1) cache is disabled or enabled.
If enabled, the program indicates if the cache operates in the Write-Through (read only cache) or Write-Back (read and write cache) mode.
For the 486 CPU family, this information is derived from the CPU-ID signature.
For Cyrix 486/5x86 CPUs, configuration control register #2 (C2h) bit 1 supplies this information.

The Pentium and higher CPU families normally operate their L1 cache in Write-Back mode.
Exceptions are: the Nx586, the Intel Pentium 63/83 ODP (P24T), the Cyrix 6x86/6x86MX/MII, and the DMP Vortex86.
The Nx586 and Vortex86 have only Write-Through mode and are indicated as such.
The P24T can operate in either the Write-Through or Write-Back mode. For this CPU, CHKCPU uses a special routine to detect the difference.
The Cyrix 6x86 series usually operates in Write-Back mode but can be switched to Write-Through mode by enabling CR0 bit 29 (NW - No Write-back). (Note that the Cyrix MediaGX/GXm has the definition of this NW bit reversed and on this model it is named NW - No Write-Through.) CHKCPU checks this NW bit and displays the L1 cache mode accordingly.
For all other Pentium class CPUs, CHKCPU assumes Write-Back mode.

Acknowledgments

I could not have written these programs without the hard work of these people:

Feedback requested

If you encounter an "Unknown" message, please send me an E-mail with your CPU details and the CHKCPU(32) /V and CHKCPU(32) /D outputs.
In the zip-file containing CHKCPU(32).EXE, I've enclosed a REPORT(32).BAT file to collect the CHKCPU(32) outputs in a MYCPU(32).TXT file for easy reporting. The accompanying REPORT(32).TXT file explains the use of REPORT(32).BAT.
Alternately, you can use DOS's redirect and append functions to get the outputs in a file.
E.g. CHKCPU /V > MYCPU.TXT and CHKCPU /D >> MYCPU.TXT
or CHKCPU32 /V > MYCPU32.TXT and CHKCPU32 /D >> MYCPU32.TXT


Any comments? Please send a message to J.Steunebrink@net.HCC.nl

Color-line

Back to IndexBack to the Index page