@@ -357,61 +357,6 @@ inline void CPUCacheFlush(int begin_index, const TVMArgs& args) {
357357 }
358358}
359359
360- PackedFunc WrapTimeEvaluator (PackedFunc pf, Device dev, int number, int repeat, int min_repeat_ms,
361- PackedFunc f_preproc) {
362- ICHECK (pf != nullptr );
363-
364- if (static_cast <int >(dev.device_type ) == static_cast <int >(kDLMicroDev )) {
365- auto get_micro_time_evaluator = runtime::Registry::Get (" micro._GetMicroTimeEvaluator" );
366- ICHECK (get_micro_time_evaluator != nullptr ) << " micro backend not enabled" ;
367- return (*get_micro_time_evaluator)(pf, dev, number, repeat);
368- }
369-
370- auto ftimer = [pf, dev, number, repeat, min_repeat_ms, f_preproc](TVMArgs args,
371- TVMRetValue* rv) mutable {
372- TVMRetValue temp;
373- std::ostringstream os;
374- // skip first time call, to activate lazy compilation components.
375- pf.CallPacked (args, &temp);
376-
377- DeviceAPI::Get (dev)->StreamSync (dev, nullptr );
378-
379- for (int i = 0 ; i < repeat; ++i) {
380- if (f_preproc != nullptr ) {
381- f_preproc.CallPacked (args, &temp);
382- }
383- double duration_ms = 0.0 ;
384-
385- do {
386- if (duration_ms > 0.0 ) {
387- number = static_cast <int >(std::max ((min_repeat_ms / (duration_ms / number) + 1 ),
388- number * 1.618 )); // 1.618 is chosen by random
389- }
390-
391- Timer t = Timer::Start (dev);
392- // start timing
393- for (int i = 0 ; i < number; ++i) {
394- pf.CallPacked (args, &temp);
395- }
396- t->Stop ();
397- int64_t t_nanos = t->SyncAndGetElapsedNanos ();
398- duration_ms = t_nanos / 1e6 ;
399- } while (duration_ms < min_repeat_ms);
400-
401- double speed = duration_ms / 1e3 / number;
402- os.write (reinterpret_cast <char *>(&speed), sizeof (speed));
403- }
404-
405- std::string blob = os.str ();
406- TVMByteArray arr;
407- arr.size = blob.length ();
408- arr.data = blob.data ();
409- // return the time.
410- *rv = arr;
411- };
412- return PackedFunc (ftimer);
413- }
414-
415360TVM_REGISTER_GLOBAL (" runtime.RPCTimeEvaluator" )
416361 .set_body_typed([](Optional<Module> opt_mod, std::string name, int device_type, int device_id,
417362 int number, int repeat, int min_repeat_ms, std::string f_preproc_name) {
@@ -434,7 +379,7 @@ TVM_REGISTER_GLOBAL("runtime.RPCTimeEvaluator")
434379 }
435380 PackedFunc pf = m.GetFunction (name, true );
436381 CHECK (pf != nullptr ) << " Cannot find " << name << " in the global registry" ;
437- return WrapTimeEvaluator (pf, dev, number, repeat, min_repeat_ms, f_preproc);
382+ return profiling:: WrapTimeEvaluator (pf, dev, number, repeat, min_repeat_ms, f_preproc);
438383 }
439384 } else {
440385 auto * pf = runtime::Registry::Get (name);
@@ -446,7 +391,7 @@ TVM_REGISTER_GLOBAL("runtime.RPCTimeEvaluator")
446391 << " Cannot find " << f_preproc_name << " in the global function" ;
447392 f_preproc = *pf_preproc;
448393 }
449- return WrapTimeEvaluator (*pf, dev, number, repeat, min_repeat_ms, f_preproc);
394+ return profiling:: WrapTimeEvaluator (*pf, dev, number, repeat, min_repeat_ms, f_preproc);
450395 }
451396 });
452397
0 commit comments