@@ -196,18 +196,28 @@ static std::string pair_str(const std::pair<int, int> & p) {
196
196
}
197
197
198
198
static std::vector<int > parse_int_range (const std::string & s) {
199
- // first[-last[+step]][,first[-last[+step]]...]
200
- std::regex range_regex (R"( ^(\d+)(?:-(\d+)(?:\+(\d+))?)?(,|$))" );
199
+ // first[-last[(+|*)step]]
200
+ std::regex range_regex (R"( ^(\d+)(?:-(\d+)(?:([\+|\*])(\d+))?)?(?:,|$))" );
201
+
201
202
std::smatch match;
202
203
std::string::const_iterator search_start (s.cbegin ());
203
204
std::vector<int > result;
204
205
while (std::regex_search (search_start, s.cend (), match, range_regex)) {
205
- int first = std::stoi (match[1 ]);
206
- int last = match[2 ].matched ? std::stoi (match[2 ]) : first;
207
- int step = match[3 ].matched ? std::stoi (match[3 ]) : 1 ;
206
+ int first = std::stoi (match[1 ]);
207
+ int last = match[2 ].matched ? std::stoi (match[2 ]) : first;
208
+ char op = match[3 ].matched ? match[3 ].str ()[0 ] : ' +' ;
209
+ int step = match[4 ].matched ? std::stoi (match[4 ]) : 1 ;
208
210
209
- for (int i = first; i <= last; i += step ) {
211
+ for (int i = first; i <= last;) {
210
212
result.push_back (i);
213
+
214
+ if (op == ' +' ) {
215
+ i += step;
216
+ } else if (op == ' *' ) {
217
+ i *= step;
218
+ } else {
219
+ throw std::invalid_argument (" invalid range format" );
220
+ }
211
221
}
212
222
search_start = match.suffix ().first ;
213
223
}
@@ -275,7 +285,7 @@ static const cmd_params cmd_params_defaults = {
275
285
/* no_kv_offload */ { false },
276
286
/* flash_attn */ { false },
277
287
/* tensor_split */ { std::vector<float >(llama_max_devices (), 0 .0f ) },
278
- /* tensor_buft_overrides*/ { std::vector<llama_model_tensor_buft_override>{{ nullptr ,nullptr } } },
288
+ /* tensor_buft_overrides*/ { std::vector<llama_model_tensor_buft_override>{ { nullptr , nullptr } } },
279
289
/* use_mmap */ { true },
280
290
/* embeddings */ { false },
281
291
/* no_op_offload */ { false },
@@ -294,13 +304,29 @@ static void print_usage(int /* argc */, char ** argv) {
294
304
printf (" \n " );
295
305
printf (" options:\n " );
296
306
printf (" -h, --help\n " );
307
+ printf (" --numa <distribute|isolate|numactl> numa mode (default: disabled)\n " );
308
+ printf (" -r, --repetitions <n> number of times to repeat each test (default: %d)\n " ,
309
+ cmd_params_defaults.reps );
310
+ printf (" --prio <0|1|2|3> process/thread priority (default: %d)\n " ,
311
+ cmd_params_defaults.prio );
312
+ printf (" --delay <0...N> (seconds) delay between each test (default: %d)\n " ,
313
+ cmd_params_defaults.delay );
314
+ printf (" -o, --output <csv|json|jsonl|md|sql> output format printed to stdout (default: %s)\n " ,
315
+ output_format_str (cmd_params_defaults.output_format ));
316
+ printf (" -oe, --output-err <csv|json|jsonl|md|sql> output format printed to stderr (default: %s)\n " ,
317
+ output_format_str (cmd_params_defaults.output_format_stderr ));
318
+ printf (" -v, --verbose verbose output\n " );
319
+ printf (" --progress print test progress indicators\n " );
320
+ printf (" \n " );
321
+ printf (" test parameters:\n " );
297
322
printf (" -m, --model <filename> (default: %s)\n " , join (cmd_params_defaults.model , " ," ).c_str ());
298
323
printf (" -p, --n-prompt <n> (default: %s)\n " ,
299
324
join (cmd_params_defaults.n_prompt , " ," ).c_str ());
300
325
printf (" -n, --n-gen <n> (default: %s)\n " , join (cmd_params_defaults.n_gen , " ," ).c_str ());
301
326
printf (" -pg <pp,tg> (default: %s)\n " ,
302
327
join (transform_to_str (cmd_params_defaults.n_pg , pair_str), " ," ).c_str ());
303
- printf (" -d, --n-depth <n> (default: %s)\n " , join (cmd_params_defaults.n_depth , " ," ).c_str ());
328
+ printf (" -d, --n-depth <n> (default: %s)\n " ,
329
+ join (cmd_params_defaults.n_depth , " ," ).c_str ());
304
330
printf (" -b, --batch-size <n> (default: %s)\n " ,
305
331
join (cmd_params_defaults.n_batch , " ," ).c_str ());
306
332
printf (" -ub, --ubatch-size <n> (default: %s)\n " ,
@@ -332,25 +358,17 @@ static void print_usage(int /* argc */, char ** argv) {
332
358
join (cmd_params_defaults.flash_attn , " ," ).c_str ());
333
359
printf (" -mmp, --mmap <0|1> (default: %s)\n " ,
334
360
join (cmd_params_defaults.use_mmap , " ," ).c_str ());
335
- printf (" --numa <distribute|isolate|numactl> (default: disabled)\n " );
336
361
printf (" -embd, --embeddings <0|1> (default: %s)\n " ,
337
362
join (cmd_params_defaults.embeddings , " ," ).c_str ());
338
363
printf (" -ts, --tensor-split <ts0/ts1/..> (default: 0)\n " );
339
- printf (" -ot --override-tensors <tensor name pattern>=<buffer type>;... (default: disabled)\n " );
340
- printf (" -nopo, --no-op-offload <i> (default: 0)\n " );
341
- printf (" -r, --repetitions <n> (default: %d)\n " , cmd_params_defaults.reps );
342
- printf (" --prio <0|1|2|3> (default: %d)\n " , cmd_params_defaults.prio );
343
- printf (" --delay <0...N> (seconds) (default: %d)\n " , cmd_params_defaults.delay );
344
- printf (" -o, --output <csv|json|jsonl|md|sql> (default: %s)\n " ,
345
- output_format_str (cmd_params_defaults.output_format ));
346
- printf (" -oe, --output-err <csv|json|jsonl|md|sql> (default: %s)\n " ,
347
- output_format_str (cmd_params_defaults.output_format_stderr ));
348
- printf (" -v, --verbose (default: %s)\n " , cmd_params_defaults.verbose ? " 1" : " 0" );
349
- printf (" --progress (default: %s)\n " , cmd_params_defaults.progress ? " 1" : " 0" );
364
+ printf (" -ot --override-tensors <tensor name pattern>=<buffer type>;...\n " );
365
+ printf (" (default: disabled)\n " );
366
+ printf (" -nopo, --no-op-offload <0|1> (default: 0)\n " );
350
367
printf (" \n " );
351
368
printf (
352
- " Multiple values can be given for each parameter by separating them with ',' or by specifying the parameter "
353
- " multiple times. Ranges can be specified with 'first-last' or 'first-last+step'.\n " );
369
+ " Multiple values can be given for each parameter by separating them with ','\n "
370
+ " or by specifying the parameter multiple times. Ranges can be given as\n "
371
+ " 'start-end' or 'start-end+step' or 'start-end*mult'.\n " );
354
372
}
355
373
356
374
static ggml_type ggml_type_from_name (const std::string & s) {
@@ -618,13 +636,13 @@ static cmd_params parse_cmd_params(int argc, char ** argv) {
618
636
}
619
637
auto p = string_split<bool >(argv[i], split_delim);
620
638
params.embeddings .insert (params.embeddings .end (), p.begin (), p.end ());
621
- } else if (arg == " -nopo" || arg == " --no-op-offload" ) {
622
- if (++i >= argc) {
623
- invalid_param = true ;
624
- break ;
625
- }
626
- auto p = string_split<bool >(argv[i], split_delim);
627
- params.no_op_offload .insert (params.no_op_offload .end (), p.begin (), p.end ());
639
+ } else if (arg == " -nopo" || arg == " --no-op-offload" ) {
640
+ if (++i >= argc) {
641
+ invalid_param = true ;
642
+ break ;
643
+ }
644
+ auto p = string_split<bool >(argv[i], split_delim);
645
+ params.no_op_offload .insert (params.no_op_offload .end (), p.begin (), p.end ());
628
646
} else if (arg == " -ts" || arg == " --tensor-split" ) {
629
647
if (++i >= argc) {
630
648
invalid_param = true ;
0 commit comments