From 904d1fd17f5cf7cfe75db342e2f195d01f9a240b Mon Sep 17 00:00:00 2001 From: Dr-Noob Date: Sat, 31 Mar 2018 01:25:08 +0200 Subject: [PATCH] Added README --- README.md | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++ preview.png | Bin 0 -> 34128 bytes 2 files changed, 54 insertions(+) create mode 100644 README.md create mode 100644 preview.png diff --git a/README.md b/README.md new file mode 100644 index 0000000..cdd5492 --- /dev/null +++ b/README.md @@ -0,0 +1,54 @@ +# cpufetch + +Prints a fancy summary of the CPU with some advanced information + +### Platforms +This tool works on both 64 bits and 32 bits, but it's __Linux only__ because of its [implementation details](#implementation) + +### Usage and installation + +Just clone the repo and use `make` to compile it + +``` +git clone https://github.com/Dr-Noob/cpufetch +cd cpufetch +make +./cpufetch +``` + +### Example + +This is the output of `cpufetch` in a i7-4790K + +![Example](/preview.png) + +### Output + +Output is detailed as follows: + +| Field | Description | Possible Values | +|:----------:|:-----------------------:|:-----------------:| +| Name | Name of the CPU | Any valid CPU name | +| Arch |Architecture of the CPU(64 or 32 bits) | x86_64 or x86 | +| Frequency | Max frequency of the CPU(in GHz) | X.XX(GHz or MHz) +| N.Cores | Number of cores the CPU has. If CPU supports `Hyperthreading` or similar, this will show cores and threads separately | X(cores)X(threads) +| AVX | Type of AVX supported by the CPU or None. AVX instructions allows the CPU to vectorize the code with a witdh of 256 bits in single precision(or 512bits if AVX512 is supported) | AVX,AVX2,AVX512,None +| SSE | Same as AVX, but SSE family are 128bits witdh | SSE, SSE2, SSE3, SSSE3, SSE4a, SSE4_1, SSE4_2,None | +| FMA | Does this CPU support FMA(Fused Multiply Add)?This instruction allows the CPU to multiply and add a value on the same clock cycle | FMA3,FMA4,None | +| AES | Does this CPU support AES? This instruction is allows the CPU to make AES cypher efficiently | Yes or No | +| SHA | Does this CPU support SHA? This instruction is allows the CPU to make SHA hashing efficiently | Yes or No | +| L1 Size | Size(in bytes) of the L1 cache, separated in data and instructions | XXB(Data)XXB(instructions) | +| L2 Size | Size(in bytes) of the L2 cache(both are unified) | XXXKB or None | +| L3 Size | Same as L3 | XXXXKB or None | +| Peak FLOPS | Max FLOPS(Floating Point Operation Per Second) this CPU could theoretical achieve. This is calculated by: `N.Cores*Freq*2(Because 2 functional units)*2(If has FMA)*VectorWidth` | XXX.XX (G/T)FLOPs | + +`cpufetch` also prints a simple ascii art of the manufacturer logo. + +### Implementation + +`cpufetch` makes use of two techniques to fetch data: +* __cpuid__: CPU name, number of threads per core and instructions features are fetched via _cpuid_. See [this](http://www.sandpile.org/x86/cpuid.htm) for more information. +* __udev__: Cache and frequency are fetched via _udev_, by looking at specific files from `/sys/devices/system/cpu` + +### Bugs or improvements +Feel free to open a issue on the repo to report a issue or propose any improvement in the tool diff --git a/preview.png b/preview.png new file mode 100644 index 0000000000000000000000000000000000000000..735eafc87681b1f1567db0aec387b0ca8089cb53 GIT binary patch literal 34128 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