Fixed freq bug. Improved Makefile and fixed some minor errors

This commit is contained in:
Dr-Noob
2018-05-21 15:36:32 +02:00
parent 2628516460
commit 49d59d6708
5 changed files with 42 additions and 26 deletions

View File

@@ -1,6 +1,6 @@
CXX=gcc CXX=gcc
CXXFLAGS=-g CXXFLAGS=-g -Wall -Werror -fstack-protector-all -pedantic -Wno-unused
SOURCE=main.c standart.c extended.c cpuid.c udev.c printer.c SOURCE=main.c standart.c extended.c cpuid.c udev.c printer.c
HEADERS=standart.h extended.h cpuid.h udev.h printer.h ascii.h HEADERS=standart.h extended.h cpuid.h udev.h printer.h ascii.h

6
main.c
View File

@@ -25,12 +25,12 @@ Peak FLOPS: 512 GFLOP/s(in simple precision)
***/ ***/
int main() { int main() {
struct cpuInfo* cpu = getCPUInfo(cpu); struct cpuInfo* cpu = getCPUInfo();
if(cpu == NULL) if(cpu == NULL)
return EXIT_FAILURE; return EXIT_FAILURE;
struct cache* cach = new_cache(cach); struct cache* cach = new_cache();
struct frequency* freq = new_frequency(freq); struct frequency* freq = new_frequency();
struct ascii* ascii = set_ascii(getCPUVendorInternal(cpu)); struct ascii* ascii = set_ascii(getCPUVendorInternal(cpu));
char* cpuName = getString_CPUName(); char* cpuName = getString_CPUName();

View File

@@ -2,9 +2,11 @@
#include <stdlib.h> #include <stdlib.h>
#include <unistd.h> #include <unistd.h>
#include <string.h> #include <string.h>
#include <assert.h>
#include "standart.h" #include "standart.h"
#include "cpuid.h" #include "cpuid.h"
#include "udev.h"
#define BOOLEAN_TRUE 1 #define BOOLEAN_TRUE 1
#define BOOLEAN_FALSE 0 #define BOOLEAN_FALSE 0
@@ -99,6 +101,7 @@ VENDOR getCPUVendor(unsigned eax,unsigned ebx,unsigned ecx,unsigned edx) {
struct cpuInfo* getCPUInfo() { struct cpuInfo* getCPUInfo() {
struct cpuInfo* cpu = malloc(sizeof(struct cpuInfo)); struct cpuInfo* cpu = malloc(sizeof(struct cpuInfo));
memset(cpu,0,sizeof(struct cpuInfo));
initializeCpuInfo(cpu); initializeCpuInfo(cpu);
unsigned eax = 0; unsigned eax = 0;
@@ -222,7 +225,15 @@ char* getPeakPerformance(struct cpuInfo* cpu, long freq) {
//7 for GFLOP/s and 6 for digits,eg 412.14 //7 for GFLOP/s and 6 for digits,eg 412.14
int size = 7+6+1+1; int size = 7+6+1+1;
assert(strlen(STRING_UNKNOWN)+1 <= size);
char* string = malloc(sizeof(char)*size); char* string = malloc(sizeof(char)*size);
//First check we have consistent data
if(freq == UNKNOWN) {
snprintf(string,strlen(STRING_UNKNOWN)+1,STRING_UNKNOWN);
return string;
}
float flops = (cpu->nThreads/cpu->HT)*freq*2; float flops = (cpu->nThreads/cpu->HT)*freq*2;
if(cpu->FMA3 || cpu->FMA4) if(cpu->FMA3 || cpu->FMA4)

34
udev.c
View File

@@ -2,6 +2,7 @@
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include <unistd.h> #include <unistd.h>
#include <assert.h>
#include "udev.h" #include "udev.h"
@@ -29,13 +30,13 @@ int getSize(char* buf, int size) {
char* end = strstr (buf,"K"); char* end = strstr (buf,"K");
if(end == NULL) { if(end == NULL) {
printf("ERROR in getSize(strstr)\n"); printf("ERROR in getSize(strstr)\n");
return NO_CACHE; return UNKNOWN;
} }
*end = 0; *end = 0;
int cachsize = atoi(buf); int cachsize = atoi(buf);
if(cachsize == 0) { if(cachsize == 0) {
printf("ERROR in getSize(atoi)\n"); printf("ERROR in getSize(atoi)\n");
return NO_CACHE; return UNKNOWN;
} }
return cachsize; return cachsize;
} }
@@ -43,7 +44,7 @@ int getSize(char* buf, int size) {
/*** /***
Returns size(in bytes) of cache described by path or Returns size(in bytes) of cache described by path or
NO_CACHE if the cache doest no exists UNKNOWN if the cache doest no exists
***/ ***/
@@ -54,7 +55,7 @@ int getCache(char* path) {
if(file == NULL) { if(file == NULL) {
//Doest not exist //Doest not exist
return NO_CACHE; return UNKNOWN;
} }
//File exists, read it //File exists, read it
@@ -88,7 +89,7 @@ long getFrequencyFromFile(char* path) {
if(file == NULL) { if(file == NULL) {
//Doest not exist //Doest not exist
return NO_CACHE; return UNKNOWN;
} }
//File exists, read it //File exists, read it
@@ -107,7 +108,7 @@ long getFrequencyFromFile(char* path) {
free(buf); free(buf);
if(ret == 0) { if(ret == 0) {
printf("error in getFrequencyFromFile\n"); printf("error in getFrequencyFromFile\n");
return NO_CACHE; return UNKNOWN;
} }
fclose(file); fclose(file);
return (long)ret*1000; return (long)ret*1000;
@@ -129,7 +130,7 @@ char* getString_L1(struct cache* cach) {
} }
char* getString_L2(struct cache* cach) { char* getString_L2(struct cache* cach) {
if(cach->L2 == NO_CACHE) { if(cach->L2 == UNKNOWN) {
char* string = malloc(sizeof(char)*5); char* string = malloc(sizeof(char)*5);
snprintf(string,5,STRING_NONE); snprintf(string,5,STRING_NONE);
return string; return string;
@@ -144,7 +145,7 @@ char* getString_L2(struct cache* cach) {
} }
char* getString_L3(struct cache* cach) { char* getString_L3(struct cache* cach) {
if(cach->L3 == NO_CACHE) { if(cach->L3 == UNKNOWN) {
char* string = malloc(sizeof(char)*5); char* string = malloc(sizeof(char)*5);
snprintf(string,5,STRING_NONE); snprintf(string,5,STRING_NONE);
return string; return string;
@@ -161,8 +162,11 @@ char* getString_L3(struct cache* cach) {
char* getString_MaxFrequency(struct frequency* freq) { char* getString_MaxFrequency(struct frequency* freq) {
//Max 3 digits and 3 for '(M/G)Hz' plus 1 for '\0' //Max 3 digits and 3 for '(M/G)Hz' plus 1 for '\0'
int size = (4+3+1); int size = (4+3+1);
assert(strlen(STRING_UNKNOWN)+1 <= size);
char* string = malloc(sizeof(char)*size); char* string = malloc(sizeof(char)*size);
if(freq->max >= 1000000000) if(freq->max == UNKNOWN)
snprintf(string,strlen(STRING_UNKNOWN)+1,STRING_UNKNOWN);
else if(freq->max >= 1000000000)
snprintf(string,size,"%.2f"STRING_GIGAHERZ,(float)(freq->max)/1000000000); snprintf(string,size,"%.2f"STRING_GIGAHERZ,(float)(freq->max)/1000000000);
else else
snprintf(string,size,"%.2f"STRING_MEGAHERZ,(float)(freq->max)/1000000); snprintf(string,size,"%.2f"STRING_MEGAHERZ,(float)(freq->max)/1000000);
@@ -171,8 +175,8 @@ char* getString_MaxFrequency(struct frequency* freq) {
/*** CREATES AND FREES ***/ /*** CREATES AND FREES ***/
struct cache* new_cache(struct cache* cach) { struct cache* new_cache() {
cach = malloc(sizeof(struct cache)); struct cache* cach = malloc(sizeof(struct cache));
cach->L1i = getCache(_PATH_CACHE_L1i); cach->L1i = getCache(_PATH_CACHE_L1i);
cach->L1d = getCache(_PATH_CACHE_L1d); cach->L1d = getCache(_PATH_CACHE_L1d);
cach->L2 = getCache(_PATH_CACHE_L2); cach->L2 = getCache(_PATH_CACHE_L2);
@@ -180,8 +184,8 @@ struct cache* new_cache(struct cache* cach) {
return cach; return cach;
} }
struct frequency* new_frequency(struct frequency* freq) { struct frequency* new_frequency() {
freq = malloc(sizeof(struct frequency)); struct frequency* freq = malloc(sizeof(struct frequency));
freq->max = getFrequencyFromFile(_PATH_FREQUENCY_MAX); freq->max = getFrequencyFromFile(_PATH_FREQUENCY_MAX);
freq->min = getFrequencyFromFile(_PATH_FREQUENCY_MIN); freq->min = getFrequencyFromFile(_PATH_FREQUENCY_MIN);
return freq; return freq;
@@ -205,6 +209,6 @@ void debugCache(struct cache* cach) {
} }
void debugFrequency(struct frequency* freq) { void debugFrequency(struct frequency* freq) {
printf("max f=%dMhz\n",freq->max); printf("max f=%ldMhz\n",freq->max);
printf("min f=%dMhz\n",freq->min); printf("min f=%ldMhz\n",freq->min);
} }

7
udev.h
View File

@@ -19,11 +19,12 @@
/*** CONSTANTS ***/ /*** CONSTANTS ***/
#define NO_CACHE -1 #define UNKNOWN -1
#define DEFAULT_FILE_SIZE 4096 #define DEFAULT_FILE_SIZE 4096
#define DEFAULT_BLOCK_SIZE 128 #define DEFAULT_BLOCK_SIZE 128
/*** STRINGS ***/ /*** STRINGS ***/
#define STRING_UNKNOWN "Unknown"
#define STRING_NONE "None" #define STRING_NONE "None"
#define STRING_MEGAHERZ "MHz" #define STRING_MEGAHERZ "MHz"
#define STRING_GIGAHERZ "GHz" #define STRING_GIGAHERZ "GHz"
@@ -36,14 +37,14 @@ struct frequency;
/*** FUNCTIONS ***/ /*** FUNCTIONS ***/
struct cache* new_cache(struct cache* cach); struct cache* new_cache();
void debugCache(struct cache* cach); void debugCache(struct cache* cach);
void freeCache(struct cache* cach); void freeCache(struct cache* cach);
char* getString_L1(struct cache* cach); char* getString_L1(struct cache* cach);
char* getString_L2(struct cache* cach); char* getString_L2(struct cache* cach);
char* getString_L3(struct cache* cach); char* getString_L3(struct cache* cach);
struct frequency* new_frequency(struct frequency* freq); struct frequency* new_frequency();
void debugFrequency(struct frequency* freq); void debugFrequency(struct frequency* freq);
void freeFrequency(struct frequency* freq); void freeFrequency(struct frequency* freq);
char* getString_MaxFrequency(struct frequency* freq); char* getString_MaxFrequency(struct frequency* freq);