Skip to content

Commit 96141ce

Browse files
committed
app/Graph/acc_check.cpp
1 parent 5c17b22 commit 96141ce

2 files changed

Lines changed: 76 additions & 59 deletions

File tree

.github/workflows/ci.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -388,22 +388,22 @@ jobs:
388388
model_file: GoogLeNet.onnx
389389
model_path: docs/models/GoogLeNet.onnx
390390
model_url: ''
391-
extra_args: "--parallel tbb 10000"
391+
extra_args: "--parallel tbb 1000 100"
392392
- model: densenet
393393
parser: parser_onnx.py
394394
model_file: densenet121_Opset16.onnx
395395
model_url: https://github.com/onnx/models/raw/refs/heads/main/Computer_Vision/densenet121_Opset16_timm/densenet121_Opset16.onnx?download=
396-
extra_args: "--parallel tbb 1000"
396+
extra_args: "--parallel tbb 1000 100"
397397
- model: resnet
398398
parser: parser_onnx.py
399399
model_file: resnest101e_Opset16.onnx
400400
model_url: https://github.com/onnx/models/raw/refs/heads/main/Computer_Vision/resnest101e_Opset16_timm/resnest101e_Opset16.onnx?download=
401-
extra_args: "--parallel omp 1000"
401+
extra_args: "--parallel tbb 1000 100"
402402
- model: yolo
403403
parser: parser_onnx.py
404404
model_file: yolo11x-cls.pt
405405
model_url: https://github.com/ultralytics/assets/releases/download/v8.4.0/yolo11x-cls.pt
406-
extra_args: "--parallel stl 1000"
406+
extra_args: "--parallel tbb 1000 100"
407407

408408
steps:
409409
- uses: actions/checkout@v4

app/Graph/acc_check.cpp

Lines changed: 72 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -15,66 +15,83 @@ using namespace it_lab_ai;
1515
int main(int argc, char* argv[]) {
1616
std::string model_name = "alexnet_mnist";
1717
RuntimeOptions options;
18-
size_t num_photo = 1000;
19-
size_t batch_size = 32;
20-
21-
for (int i = 1; i < argc; ++i) {
22-
if (std::string(argv[i]) == "--model" && i + 1 < argc) {
23-
model_name = argv[++i];
24-
} else if (std::string(argv[i]) == "--onednn") {
25-
options.backend = Backend::kOneDnn;
26-
if (options.par_backend != ParBackend::kSeq) {
27-
std::cout << "Warning: oneDNN backend is not compatible with parallel "
28-
"execution. Disabling parallelism."
29-
<< '\n';
30-
options.par_backend = ParBackend::kSeq;
31-
}
32-
} else if (std::string(argv[i]) == "--parallel" && i + 1 < argc) {
33-
if (options.backend == Backend::kOneDnn) {
34-
std::cout << "Warning: Parallel execution is not compatible with "
35-
"oneDNN backend. Ignoring --parallel option."
36-
<< '\n';
37-
i++;
38-
continue;
39-
}
18+
// По умолчанию
19+
size_t num_photo = 1000;
20+
size_t batch_size = 32;
21+
22+
// Сначала соберём все аргументы, не являющиеся ключами
23+
std::vector<size_t> numeric_args;
24+
25+
for (int i = 1; i < argc; ++i) {
26+
std::string arg = argv[i];
27+
if (arg == "--model" && i + 1 < argc) {
28+
model_name = argv[++i];
29+
}
30+
else if (arg == "--onednn") {
31+
options.backend = Backend::kOneDnn;
32+
if (options.par_backend != ParBackend::kSeq) {
33+
std::cout << "Warning: oneDNN backend is not compatible with parallel execution. Disabling parallelism.\n";
34+
options.par_backend = ParBackend::kSeq;
35+
}
36+
}
37+
else if (arg == "--parallel" && i + 1 < argc) {
38+
if (options.backend == Backend::kOneDnn) {
39+
std::cout << "Warning: Parallel execution is not compatible with oneDNN backend. Ignoring --parallel option.\n";
40+
++i; // пропускаем следующий аргумент (название бэкенда)
41+
continue;
42+
}
43+
std::string backend_str = argv[++i];
44+
if (backend_str == "tbb")
45+
options.par_backend = ParBackend::kTbb;
46+
else if (backend_str == "threads" || backend_str == "stl")
47+
options.par_backend = ParBackend::kThreads;
48+
else if (backend_str == "omp")
49+
options.par_backend = ParBackend::kOmp;
50+
else {
51+
std::cerr << "Unknown parallel backend: " << backend_str << ". Using default (Threads).\n";
52+
options.par_backend = ParBackend::kThreads;
53+
}
54+
}
55+
else if (arg == "--threads" && i + 1 < argc) {
56+
options.threads = std::stoi(argv[++i]);
57+
}
58+
else {
59+
// Попробуем преобразовать аргумент в число
60+
try {
61+
size_t val = std::stoul(arg);
62+
numeric_args.push_back(val);
63+
} catch (...) {
64+
std::cerr << "Warning: unknown argument ignored: " << arg << "\n";
65+
}
66+
}
67+
}
4068

41-
std::string backend_str = argv[++i];
42-
if (backend_str == "tbb") {
43-
options.par_backend = ParBackend::kTbb;
44-
} else if (backend_str == "threads" || backend_str == "stl") {
45-
options.par_backend = ParBackend::kThreads;
46-
} else if (backend_str == "omp") {
47-
options.par_backend = ParBackend::kOmp;
48-
} else {
49-
std::cerr << "Unknown parallel backend: " << backend_str
50-
<< ". Using default (Threads)." << '\n';
51-
options.par_backend = ParBackend::kThreads;
52-
}
53-
} else if (std::string(argv[i]) == "--threads" && i + 1 < argc) {
54-
options.threads = std::stoi(argv[++i]);
69+
// Интерпретируем собранные числа:
70+
// первое (или единственное) -> num_photo
71+
// второе (если есть) -> batch_size
72+
if (!numeric_args.empty()) {
73+
size_t val = numeric_args[0];
74+
if (val < 1) {
75+
std::cerr << "Warning: num_photo cannot be less than 1. Using 1.\n";
76+
num_photo = 1;
77+
} else if (val > 50000) {
78+
std::cerr << "Warning: num_photo cannot exceed 50000. Using 50000.\n";
79+
num_photo = 50000;
5580
} else {
56-
try {
57-
size_t input_value = std::stoul(argv[i]);
58-
59-
if (input_value < 1) {
60-
std::cerr << "Warning: num_photo cannot be less than 1. Using 1."
61-
<< '\n';
62-
num_photo = 1;
63-
} else if (input_value > 50000) {
64-
std::cerr << "Warning: num_photo cannot exceed 50000. Using 50000."
65-
<< '\n';
66-
num_photo = 50000;
67-
} else {
68-
num_photo = input_value;
81+
num_photo = val;
82+
}
83+
84+
if (numeric_args.size() >= 2) {
85+
batch_size = numeric_args[1];
86+
if (batch_size < 1) {
87+
std::cerr << "Warning: batch_size cannot be less than 1. Using 1.\n";
88+
batch_size = 1;
6989
}
70-
} catch (const std::exception& e) {
71-
std::cerr << "Error: Invalid numeric argument: " << e.what() << argv[i]
72-
<< ". Using default value: 1000" << '\n';
73-
num_photo = 1000;
74-
}
90+
// Можно добавить верхнее ограничение, например, 2048
7591
}
76-
}
92+
}
7793

94+
std::cout<< "batch = " << batch_size <<'\n';
7895
std::string dataset_path;
7996
if (model_name == "alexnet_mnist") {
8097
dataset_path = MNIST_PATH;

0 commit comments

Comments
 (0)