Добавлен параметор -i(Количество этерации) изменён немного вывод (Болие компактный)

This commit is contained in:
romenskiy 2025-06-20 15:54:19 +03:00
parent b10148056b
commit d78601505a

148
main.c
View file

@ -54,24 +54,30 @@ unsigned long int get_mem_available_mb() {
return (available - available/100*10)*1024;
}
int parse_t_flag(int argc, char *argv[]) {
for (int i = 1; i < argc; ++i) {
// Вариант -t4
if (strncmp(argv[i], "-t", 2) == 0) {
// Если есть еще что-то после -t, например -t4
if (strlen(argv[i]) > 2) {
char *num_str = argv[i] + 2;
if (isdigit(num_str[0])) {
return atoi(num_str);
}
int parse_ti_flags(int argc, char *argv[], int *t, int *i) {
*t = -1;
*i = 1;
for (int idx = 1; idx < argc; ++idx) {
// -tN или -t N
if (strncmp(argv[idx], "-t", 2) == 0) {
if (strlen(argv[idx]) > 2 && isdigit(argv[idx][2])) {
*t = atoi(argv[idx] + 2);
} else if (idx + 1 < argc && isdigit(argv[idx + 1][0])) {
*t = atoi(argv[idx + 1]);
idx++; // пропускаем это число
}
// Вариант -t 4
else if (i + 1 < argc && isdigit(argv[i + 1][0])) {
return atoi(argv[i + 1]);
}
// -iN или -i N
else if (strncmp(argv[idx], "-i", 2) == 0) {
if (strlen(argv[idx]) > 2 && isdigit(argv[idx][2])) {
*i = atoi(argv[idx] + 2);
} else if (idx + 1 < argc && isdigit(argv[idx + 1][0])) {
*i = atoi(argv[idx + 1]);
idx++; // пропускаем это число
}
}
}
return -1; // -1 если флаг не найден
return (*t != -1 || *i != -1) ? 0 : -1;
}
@ -91,62 +97,71 @@ int main(int argc, char *argv[]) {
}
//struct tred_pizdec* meta[];
//pthread_t thread[];
int err = 0;
struct tred_pizdec** meta = malloc(sizeof(struct tred_pizdec) * 4);
pthread_t *thread = malloc(sizeof(pthread_t) * 4);
int tred = parse_t_flag(argc, argv);
if (tred != -1){
// Основные паттерны 0x00000000, 0xFFFFFFFF, 0xAAAAAAAA, 0x55555555
for (size_t p = 0; p < sizeof(test_patterns)/sizeof(test_patterns[0]); ++p){
printf("Запушен патерн 0x%08X\n", test_patterns[p]);
for (bool i = 0;(i != 4); i++){
meta[i] = malloc(sizeof(struct tred_pizdec));
meta[i]->id = p;
meta[i]->mem = mem;
meta[i]->words_stop = words/4*(i+1);
meta[i]->words_start = i * words/4;
DEBUG_PRINT("words_stop: %zu\n",meta[i]->words_stop);
DEBUG_PRINT("words_start:%zu\n",meta[i]->words_start);
pthread_create(&thread[i], NULL, fill_pattern_multi_tred, (void*)meta[i]);
//pthread_join(thread[i], NULL);
int tred, iterations;
parse_ti_flags(argc, argv, &tred, &iterations);
printf("iterations: %i\n", iterations);
for (;iterations != 0; iterations--){
if (tred != -1){
// Основные паттерны 0x00000000, 0xFFFFFFFF, 0xAAAAAAAA, 0x55555555
for (size_t p = 0; p < sizeof(test_patterns)/sizeof(test_patterns[0]); ++p){
printf("\rЗапушен патерн 0x%08X", test_patterns[p]);
fflush(stdout);
for (bool i = 0;(i != 4); i++){
meta[i] = malloc(sizeof(struct tred_pizdec));
meta[i]->id = p;
meta[i]->mem = mem;
meta[i]->words_stop = words/4*(i+1);
meta[i]->words_start = i * words/4;
DEBUG_PRINT("words_stop: %zu\n",meta[i]->words_stop);
DEBUG_PRINT("words_start:%zu\n",meta[i]->words_start);
pthread_create(&thread[i], NULL, fill_pattern_multi_tred, (void*)meta[i]);
//pthread_join(thread[i], NULL);
}
for (bool i = 0;(i != 4); i++)
pthread_join(thread[i], NULL);
//fill_pattern(mem, words, test_patterns[p]);
//printf("Жду\n");
//usleep(10000000);
printf("\r-- Проверяю ");
fflush(stdout);
//int err = check_pattern(mem, words, test_patterns[p]);
for (bool i = 0;(i != 4); i++){
meta[i] = malloc(sizeof(struct tred_pizdec));
meta[i]->id = p;
meta[i]->mem = mem;
meta[i]->words_stop = words/4*(i+1);
meta[i]->words_start = i * words/4;
DEBUG_PRINT("words_stop: %zu\n",meta[i]->words_stop);
DEBUG_PRINT("words_start:%zu\n",meta[i]->words_start);
pthread_create(&thread[i], NULL, fill_increment_multi_tred, (void*)meta[i]);
//pthread_join(thread[i], NULL);
}
for (bool i = 0;(i != 4); i++){
pthread_join(thread[i], NULL);
err += meta[i]->return_error;
free(meta[i]);
}
if (err == 0){
printf("\rOK\n");
fflush(stdout);
}
else printf("Errors: %d\n", err);
}
for (bool i = 0;(i != 4); i++)
pthread_join(thread[i], NULL);
//fill_pattern(mem, words, test_patterns[p]);
printf("Жду\n");
//usleep(10000000);
printf("Проверяю\n");
//int err = check_pattern(mem, words, test_patterns[p]);
for (bool i = 0;(i != 4); i++){
meta[i] = malloc(sizeof(struct tred_pizdec));
meta[i]->id = p;
meta[i]->mem = mem;
meta[i]->words_stop = words/4*(i+1);
meta[i]->words_start = i * words/4;
DEBUG_PRINT("words_stop: %zu\n",meta[i]->words_stop);
DEBUG_PRINT("words_start:%zu\n",meta[i]->words_start);
pthread_create(&thread[i], NULL, fill_increment_multi_tred, (void*)meta[i]);
//pthread_join(thread[i], NULL);
}
int err=0;
for (bool i = 0;(i != 4); i++){
pthread_join(thread[i], NULL);
err += meta[i]->return_error;
free(meta[i]);
}
if (err == 0) printf("OK\n");
else printf("Errors: %d\n", err);
}
}
else{
// Основные паттерны 0x00000000, 0xFFFFFFFF, 0xAAAAAAAA, 0x55555555
for (size_t p = 0; p < sizeof(test_patterns)/sizeof(test_patterns[0]); ++p){
printf("Запушен патерн 0x%08X\n", test_patterns[p]);
fill_pattern(mem, words, test_patterns[p]);
printf("Жду\n");
int err = check_pattern(mem, words, test_patterns[p]);
if (err == 0) printf("OK\n");
else printf("Errors: %d\n", err);
else{
// Основные паттерны 0x00000000, 0xFFFFFFFF, 0xAAAAAAAA, 0x55555555
for (size_t p = 0; p < sizeof(test_patterns)/sizeof(test_patterns[0]); ++p){
printf("Запушен патерн 0x%08X", test_patterns[p]);
fill_pattern(mem, words, test_patterns[p]);
printf("Жду\n");
err += check_pattern(mem, words, test_patterns[p]);
if (err == 0) printf("OK\n");
else printf("Errors: %d\n", err);
}
}
}
@ -154,7 +169,6 @@ int main(int argc, char *argv[]) {
printf("Запушен патерн инкрементации\n");
fill_increment(mem, words);
//usleep(10000000);
int err = 0;
for (size_t i = 0; i < words; i++) {
if (mem[i] != (uint32_t)i) {
printf("Ошибка в тесте %zu: должен быть: 0x%08X, фактический: 0x%08X\n", i, (uint32_t)i, mem[i]);