minore
This commit is contained in:
@@ -0,0 +1,139 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
int scan(void);
|
||||||
|
unsigned long func(int n);
|
||||||
|
void output(unsigned long sum);
|
||||||
|
void encr(unsigned long sum, char *cpum);
|
||||||
|
int cpumodel(char cpum[]);
|
||||||
|
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
int n;
|
||||||
|
unsigned long isum;
|
||||||
|
char cpum[64];
|
||||||
|
|
||||||
|
cpumodel(cpum);
|
||||||
|
|
||||||
|
printf("Buff: ");
|
||||||
|
if (getchar() == '1') {
|
||||||
|
setbuf(stdin, NULL);
|
||||||
|
printf("buff is off\n");
|
||||||
|
} else {
|
||||||
|
printf("buff is on\n");
|
||||||
|
}
|
||||||
|
while(getchar()!='\n');
|
||||||
|
|
||||||
|
n = scan();
|
||||||
|
if(n == 0) return 0;
|
||||||
|
isum = func(n);
|
||||||
|
|
||||||
|
output(isum);
|
||||||
|
encr(isum,cpum);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int scan(void){
|
||||||
|
int x, n;
|
||||||
|
n = 0;
|
||||||
|
|
||||||
|
printf("Enter num: 1-100 000\nNum: ");
|
||||||
|
|
||||||
|
while(((x = getchar())!='\n') && x != EOF){
|
||||||
|
if((x >= '0') && (x <= '9')){
|
||||||
|
n = (n*10) + (x-'0');
|
||||||
|
}
|
||||||
|
|
||||||
|
else{
|
||||||
|
if(x == '\n');
|
||||||
|
else(printf("Err \"%c\" is not a num.\n",x));
|
||||||
|
while((x = getchar())!='\n')
|
||||||
|
if(x == EOF) return 0;
|
||||||
|
printf("Num: ");
|
||||||
|
n = 0;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(n > 100000){
|
||||||
|
while((x = getchar())!='\n')
|
||||||
|
if(x == EOF) return 0;
|
||||||
|
n = 0;
|
||||||
|
printf("You enter n>100 000 Try again\nNum: ");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
if (x == EOF) return 0;
|
||||||
|
return(n);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
unsigned long func(int n){
|
||||||
|
int i;
|
||||||
|
unsigned long sum = 0;
|
||||||
|
unsigned char mem[65536];
|
||||||
|
char data[256 * 1024];
|
||||||
|
|
||||||
|
for(i = 1; i <= n; i++){
|
||||||
|
sum += i;
|
||||||
|
mem[i%65536] = (unsigned char)(i % 256);
|
||||||
|
data[i%(256*1024)] = (unsigned char)((sum + i) % 256U);
|
||||||
|
}
|
||||||
|
return sum;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void output(unsigned long sum){
|
||||||
|
int i = 0;
|
||||||
|
char buf[20];
|
||||||
|
|
||||||
|
printf("\nresult: ");
|
||||||
|
while(sum > 0){
|
||||||
|
buf[i++] = (char)('0' + (sum % 10));
|
||||||
|
sum /= 10;
|
||||||
|
}
|
||||||
|
while (i-- > 0)
|
||||||
|
putchar(buf[i]);
|
||||||
|
putchar('\n');
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int cpumodel(char cpum[]) {
|
||||||
|
int c, i = 0;
|
||||||
|
printf("\nEnter proc name: ");
|
||||||
|
while ((c = getchar()) != '\n' && c != EOF && i < 64 - 1) {
|
||||||
|
cpum[i++] = (char)c;
|
||||||
|
}
|
||||||
|
cpum[i] = '\0';
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void encr(unsigned long sum, char *cpum) {
|
||||||
|
char buf[20];
|
||||||
|
int i = 0;
|
||||||
|
int cpu_len = strlen(cpum);
|
||||||
|
|
||||||
|
if (cpu_len == 0) {
|
||||||
|
printf("CPU model is empty!\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sum == 0) {
|
||||||
|
buf[i++] = '0';
|
||||||
|
} else {
|
||||||
|
while (sum > 0) {
|
||||||
|
buf[i++] = '0' + (sum % 10);
|
||||||
|
sum /= 10;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("enc result: ");
|
||||||
|
for (int j = i - 1; j >= 0; j--) {
|
||||||
|
int digit = buf[j] - '0';
|
||||||
|
char cpu_char = cpum[(i - 1 - j) % cpu_len];
|
||||||
|
int enc = (digit + (int)cpu_char) % 10;
|
||||||
|
putchar('0' + enc);
|
||||||
|
}
|
||||||
|
putchar('\n');
|
||||||
|
}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
AMD Ryzen 5 5600X 6-Core Processor
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
model name : AMD Ryzen 5 5600X 6-Core Processor
|
||||||
|
cache size : 512 KB
|
||||||
|
cpu cores : 6
|
||||||
|
|
||||||
|
MemTotal: 16293648 kB
|
||||||
|
|
||||||
|
Caches (sum of all):
|
||||||
|
L1d: 192 KiB (6 instances)
|
||||||
|
L1i: 192 KiB (6 instances)
|
||||||
|
L2: 3 MiB (6 instances)
|
||||||
|
L3: 32 MiB (1 instance)
|
||||||
|
|
||||||
|
Кэш‑память расположена близко к ядрам процессора (обычно в том же кристалле), поэтому доступ к ней происходит за несколько тактов процессора, тогда как доступ к оперативной памяти требует десятки‑сот тактов из‑за физической дистанции, шины и контроллера памяти.
|
||||||
|
|
||||||
|
Параметр Кэш L1/L2/L3 Оперативная RAM
|
||||||
|
Время доступа 1–5 такт(ов) 50–150 такт(ов)
|
||||||
|
Емкость десятки‑сот КБ несколько ГБ
|
||||||
|
Стоимость (энергия/площадь) Высокая Низкая
|
||||||
|
|
||||||
|
Ryzen 5 5600X
|
||||||
|
Тактовая частота ядра: ~4.6 ГГц → один такт ≈ 0.22 нс.
|
||||||
|
Время доступа к L1: ~4 такт ≈ 0.9 нс.
|
||||||
|
Время доступа к DDR4‑3200 RAM: ~70 такт ≈ 15 нс.
|
||||||
|
Если 95 % инструкций и данных находятся в кэше, среднее время доступа будет близко к 1 нс, а не к 15 нс, что делает процессор эффективным несмотря на медленную RAM.
|
||||||
Executable
+34
@@ -0,0 +1,34 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
HOMECPU="homecpu.txt"
|
||||||
|
CURRENTCPU=$(grep -m1 'model name' /proc/cpuinfo | awk -F':' '{print $2}' | sed -E 's/^[ \t]+//')
|
||||||
|
|
||||||
|
# Извлекаем только модель (например, i7-9700K из полного названия)
|
||||||
|
EXTRACT_MODEL() {
|
||||||
|
echo "$1" | grep -oE '[iI]ntel|[aA]md|[iI][0-9]*-[0-9A-Z]*|[rR]yzen|[0-9A-Z]*-[0-9A-Z]*' | head -1
|
||||||
|
}
|
||||||
|
|
||||||
|
CURRENT_MODEL=$(EXTRACT_MODEL "$CURRENTCPU")
|
||||||
|
|
||||||
|
gcc ./code.c -o ./run
|
||||||
|
|
||||||
|
if [ ! -f "$HOMECPU" ]; then
|
||||||
|
echo "Домашняя модель CPU не найдена, используем текущую: $CURRENT_MODEL"
|
||||||
|
CPUMODEL="$CURRENT_MODEL"
|
||||||
|
else
|
||||||
|
HOMECPU_CONTENT=$(<"$HOMECPU")
|
||||||
|
HOME_MODEL=$(EXTRACT_MODEL "$HOMECPU_CONTENT")
|
||||||
|
echo "Домашняя модель CPU: $HOME_MODEL"
|
||||||
|
echo "Текущая модель CPU: $CURRENT_MODEL"
|
||||||
|
|
||||||
|
if [ "$CURRENT_MODEL" = "$HOME_MODEL" ]; then
|
||||||
|
echo "Модели совпадают, используем текущую модель"
|
||||||
|
CPUMODEL="$CURRENT_MODEL"
|
||||||
|
else
|
||||||
|
echo "Модели не совпадают, используем домашнюю модель"
|
||||||
|
CPUMODEL="$HOME_MODEL"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Отправляем модель CPU и ввод для программы
|
||||||
|
( printf "%s\n1\n" "$CPUMODEL"; cat ) | ./run
|
||||||
Reference in New Issue
Block a user