Добавлен параметор -i(Количество этерации) изменён немного вывод (Болие компактный)
This commit is contained in:
parent
b10148056b
commit
d78601505a
1 changed files with 81 additions and 67 deletions
148
main.c
148
main.c
|
|
@ -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]);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue