| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
5 files changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -244,14 +244,14 @@ class Executor { | |||
| 244 | 244 | ||
| 245 | 245 | std::unordered_set<std::shared_ptr<ObserverInterface>> _observers; | |
| 246 | 246 | ||
| 247 | - ObserverInterface* _default_observer; | ||
| 247 | + TFProfObserver* _tfprof; | ||
| 248 | 248 | ||
| 249 | 249 | PerThread& _per_thread() const; | |
| 250 | 250 | ||
| 251 | 251 | bool _wait_for_task(Worker&, Node*&); | |
| 252 | 252 | ||
| 253 | - void _instantiate_default_observer(); | ||
| 254 | - void _flush_default_observer(); | ||
| 253 | + void _instantiate_tfprof(); | ||
| 254 | + void _flush_tfprof(); | ||
| 255 | 255 | void _observer_prologue(Worker&, Node*); | |
| 256 | 256 | void _observer_epilogue(Worker&, Node*); | |
| 257 | 257 | void _spawn(size_t, Domain); | |
@@ -319,7 +319,7 @@ inline Executor::Executor(size_t N, size_t M) : | |||
| 319 | 319 | _spawn(M, CUDA); | |
| 320 | 320 | ||
| 321 | 321 | // initiate the observer if requested | |
| 322 | - _instantiate_default_observer(); | ||
| 322 | + _instantiate_tfprof(); | ||
| 323 | 323 | } | |
| 324 | 324 | ||
| 325 | 325 | #else | |
@@ -344,7 +344,7 @@ inline Executor::Executor(size_t N) : | |||
| 344 | 344 | _spawn(N, HOST); | |
| 345 | 345 | ||
| 346 | 346 | // instantite the default observer if requested | |
| 347 | - _instantiate_default_observer(); | ||
| 347 | + _instantiate_tfprof(); | ||
| 348 | 348 | } | |
| 349 | 349 | #endif | |
| 350 | 350 | ||
@@ -376,50 +376,24 @@ inline Executor::~Executor() { | |||
| 376 | 376 | #endif | |
| 377 | 377 | ||
| 378 | 378 | // flush the default observer | |
| 379 | - _flush_default_observer(); | ||
| 379 | + _flush_tfprof(); | ||
| 380 | 380 | } | |
| 381 | 381 | ||
| 382 | - // Procedure: _instantiate_default_observer | ||
| 383 | - inline void Executor::_instantiate_default_observer() { | ||
| 384 | - | ||
| 382 | + // Procedure: _instantiate_tfprof | ||
| 383 | + inline void Executor::_instantiate_tfprof() { | ||
| 385 | 384 | // TF_OBSERVER_TYPE | |
| 386 | - auto env = std::getenv("TF_OBSERVER_TYPE"); | ||
| 387 | - | ||
| 388 | - if(env) { | ||
| 389 | - auto type = static_cast<ObserverType>(std::atoi(env)); | ||
| 390 | - | ||
| 391 | - switch(type) { | ||
| 392 | - case CHROME_TRACING_OBSERVER: | ||
| 393 | - _default_observer = make_observer<ChromeTracingObserver>().get(); | ||
| 394 | - break; | ||
| 395 | - | ||
| 396 | - case TASKFLOW_BOARD_OBSERVER: | ||
| 397 | - _default_observer = make_observer<TaskflowBoardObserver>().get(); | ||
| 398 | - break; | ||
| 399 | - | ||
| 400 | - default: | ||
| 401 | - TF_THROW("unsupported observer type id: ", type); | ||
| 402 | - break; | ||
| 403 | - } | ||
| 404 | - } | ||
| 405 | - else { | ||
| 406 | - _default_observer = nullptr; | ||
| 407 | - } | ||
| 385 | + _tfprof = std::getenv("TF_ENABLE_PROFILER") ? | ||
| 386 | + make_observer<TFProfObserver>().get() : nullptr; | ||
| 408 | 387 | } | |
| 409 | 388 | ||
| 410 | - // Procedure: _flush_default_observer | ||
| 411 | - inline void Executor::_flush_default_observer() { | ||
| 412 | - if(_default_observer) { | ||
| 413 | - const char* env = std::getenv("TF_OBSERVER_FILE"); | ||
| 414 | - if(env) { | ||
| 415 | - char buf[4096]; | ||
| 416 | - std::sprintf(buf, "%s_%p.tfb", env, this); | ||
| 417 | - std::ofstream ofs(buf); | ||
| 418 | - _default_observer->dump(ofs); | ||
| 419 | - } | ||
| 420 | - else { | ||
| 421 | - _default_observer->dump(std::cout); | ||
| 422 | - } | ||
| 389 | + // Procedure: _flush_tfprof | ||
| 390 | + inline void Executor::_flush_tfprof() { | ||
| 391 | + | ||
| 392 | + if(_tfprof) { | ||
| 393 | + std::ostringstream fpath; | ||
| 394 | + fpath << std::getenv("TF_ENABLE_PROFILER") << _tfprof->_uuid << ".tfp"; | ||
| 395 | + std::ofstream ofs(fpath.str()); | ||
| 396 | + _tfprof->dump(ofs); | ||
| 423 | 397 | } | |
| 424 | 398 | } | |
| 425 | 399 | ||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -6,6 +6,7 @@ | |||
| 6 | 6 | #include "../utility/traits.hpp" | |
| 7 | 7 | #include "../utility/passive_vector.hpp" | |
| 8 | 8 | #include "../utility/singleton.hpp" | |
| 9 | + #include "../utility/uuid.hpp" | ||
| 9 | 10 | #include "../nstd/variant.hpp" | |
| 10 | 11 | ||
| 11 | 12 | #if defined(__CUDA__) || defined(__CUDACC__) | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -54,12 +54,6 @@ class ObserverInterface { | |||
| 54 | 54 | @param task_view a constant wrapper object to the task | |
| 55 | 55 | */ | |
| 56 | 56 | virtual void on_exit(unsigned worker_id, TaskView task_view) = 0; | |
| 57 | - | ||
| 58 | - /** | ||
| 59 | - @brief method to dump the observed data | ||
| 60 | - @param ostream the output stream to dump | ||
| 61 | - */ | ||
| 62 | - virtual void dump(std::ostream& ostream) const = 0; | ||
| 63 | 57 | }; | |
| 64 | 58 | ||
| 65 | 59 | // ---------------------------------------------------------------------------- | |
@@ -108,7 +102,7 @@ class ChromeTracingObserver : public ObserverInterface { | |||
| 108 | 102 | @brief dump the timelines in JSON format to an ostream | |
| 109 | 103 | @param ostream the target std::ostream to dump | |
| 110 | 104 | */ | |
| 111 | - inline void dump(std::ostream& ostream) const override final; | ||
| 105 | + inline void dump(std::ostream& ostream) const; | ||
| 112 | 106 | ||
| 113 | 107 | /** | |
| 114 | 108 | @brief dump the timelines in JSON to a std::string | |
@@ -259,16 +253,16 @@ inline size_t ChromeTracingObserver::num_tasks() const { | |||
| 259 | 253 | } | |
| 260 | 254 | ||
| 261 | 255 | // ---------------------------------------------------------------------------- | |
| 262 | - // TaskflowBoardObserver definition | ||
| 256 | + // TFProfObserver definition | ||
| 263 | 257 | // ---------------------------------------------------------------------------- | |
| 264 | 258 | ||
| 265 | 259 | /** | |
| 266 | - @class: TaskflowBoardObserver | ||
| 260 | + @class: TFProfObserver | ||
| 267 | 261 | ||
| 268 | 262 | @brief observer designed based on taskflow board format | |
| 269 | 263 | ||
| 270 | 264 | */ | |
| 271 | - class TaskflowBoardObserver : public ObserverInterface { | ||
| 265 | + class TFProfObserver : public ObserverInterface { | ||
| 272 | 266 | ||
| 273 | 267 | friend class Executor; | |
| 274 | 268 | ||
@@ -302,12 +296,12 @@ class TaskflowBoardObserver : public ObserverInterface { | |||
| 302 | 296 | }; | |
| 303 | 297 | ||
| 304 | 298 | public: | |
| 305 | - | ||
| 299 | + | ||
| 306 | 300 | /** | |
| 307 | 301 | @brief dump the timelines in JSON format to an ostream | |
| 308 | 302 | @param ostream the target std::ostream to dump | |
| 309 | 303 | */ | |
| 310 | - inline void dump(std::ostream& ostream) const override final; | ||
| 304 | + inline void dump(std::ostream& ostream) const; | ||
| 311 | 305 | ||
| 312 | 306 | /** | |
| 313 | 307 | @brief dump the timelines in JSON to a std::string | |
@@ -333,10 +327,12 @@ class TaskflowBoardObserver : public ObserverInterface { | |||
| 333 | 327 | inline void on_exit(unsigned worker_id, TaskView task_view) override final; | |
| 334 | 328 | ||
| 335 | 329 | Timeline _timeline; | |
| 330 | + | ||
| 331 | + UUID _uuid; | ||
| 336 | 332 | }; | |
| 337 | - | ||
| 333 | + | ||
| 338 | 334 | // constructor | |
| 339 | - inline TaskflowBoardObserver::Segment::Segment( | ||
| 335 | + inline TFProfObserver::Segment::Segment( | ||
| 340 | 336 | const std::string& n, | |
| 341 | 337 | TaskType t, | |
| 342 | 338 | std::chrono::time_point<std::chrono::steady_clock> b | |
@@ -345,7 +341,7 @@ inline TaskflowBoardObserver::Segment::Segment( | |||
| 345 | 341 | } | |
| 346 | 342 | ||
| 347 | 343 | // constructor | |
| 348 | - inline TaskflowBoardObserver::Segment::Segment( | ||
| 344 | + inline TFProfObserver::Segment::Segment( | ||
| 349 | 345 | const std::string& n, | |
| 350 | 346 | TaskType t, | |
| 351 | 347 | std::chrono::time_point<std::chrono::steady_clock> b, | |
@@ -355,7 +351,7 @@ inline TaskflowBoardObserver::Segment::Segment( | |||
| 355 | 351 | } | |
| 356 | 352 | ||
| 357 | 353 | // Procedure: set_up | |
| 358 | - inline void TaskflowBoardObserver::set_up(unsigned num_workers) { | ||
| 354 | + inline void TFProfObserver::set_up(unsigned num_workers) { | ||
| 359 | 355 | ||
| 360 | 356 | _timeline.segments.resize(num_workers); | |
| 361 | 357 | ||
@@ -367,27 +363,27 @@ inline void TaskflowBoardObserver::set_up(unsigned num_workers) { | |||
| 367 | 363 | } | |
| 368 | 364 | ||
| 369 | 365 | // Procedure: on_entry | |
| 370 | - inline void TaskflowBoardObserver::on_entry(unsigned w, TaskView tv) { | ||
| 366 | + inline void TFProfObserver::on_entry(unsigned w, TaskView tv) { | ||
| 371 | 367 | _timeline.segments[w].emplace_back( | |
| 372 | 368 | tv.name(), tv.type(), std::chrono::steady_clock::now() | |
| 373 | 369 | ); | |
| 374 | 370 | } | |
| 375 | 371 | ||
| 376 | 372 | // Procedure: on_exit | |
| 377 | - inline void TaskflowBoardObserver::on_exit(unsigned w, TaskView) { | ||
| 373 | + inline void TFProfObserver::on_exit(unsigned w, TaskView) { | ||
| 378 | 374 | assert(_timeline.segments[w].size() > 0); | |
| 379 | 375 | _timeline.segments[w].back().end = std::chrono::steady_clock::now(); | |
| 380 | 376 | } | |
| 381 | 377 | ||
| 382 | 378 | // Function: clear | |
| 383 | - inline void TaskflowBoardObserver::clear() { | ||
| 379 | + inline void TFProfObserver::clear() { | ||
| 384 | 380 | for(size_t w=0; w<_timeline.segments.size(); ++w) { | |
| 385 | 381 | _timeline.segments[w].clear(); | |
| 386 | 382 | } | |
| 387 | 383 | } | |
| 388 | 384 | ||
| 389 | 385 | // Procedure: dump | |
| 390 | - inline void TaskflowBoardObserver::dump(std::ostream& os) const { | ||
| 386 | + inline void TFProfObserver::dump(std::ostream& os) const { | ||
| 391 | 387 | ||
| 392 | 388 | size_t first; | |
| 393 | 389 | ||
@@ -403,7 +399,7 @@ inline void TaskflowBoardObserver::dump(std::ostream& os) const { | |||
| 403 | 399 | return; | |
| 404 | 400 | } | |
| 405 | 401 | ||
| 406 | - os << "{\"group\":\"executor[" << this << "]\",\"data\":["; | ||
| 402 | + os << "{\"executor\":\"" << _uuid << "\",\"data\":["; | ||
| 407 | 403 | ||
| 408 | 404 | for(size_t w=first; w<_timeline.segments.size(); w++) { | |
| 409 | 405 | ||
@@ -415,15 +411,15 @@ inline void TaskflowBoardObserver::dump(std::ostream& os) const { | |||
| 415 | 411 | os << ','; | |
| 416 | 412 | } | |
| 417 | 413 | ||
| 418 | - os << "{\"label\":\"worker " << w << "\",\"data\":["; | ||
| 414 | + os << "{\"worker\":\"worker " << w << "\",\"data\":["; | ||
| 419 | 415 | for(size_t i=0; i<_timeline.segments[w].size(); ++i) { | |
| 420 | 416 | ||
| 421 | 417 | const auto& s = _timeline.segments[w][i]; | |
| 422 | 418 | ||
| 423 | 419 | if(i) os << ','; | |
| 424 | 420 | ||
| 425 | - // timeRange | ||
| 426 | - os << "{\"timeRange\":[" | ||
| 421 | + // span | ||
| 422 | + os << "{\"span\":[" | ||
| 427 | 423 | << std::chrono::duration_cast<std::chrono::microseconds>( | |
| 428 | 424 | s.beg - _timeline.origin | |
| 429 | 425 | ).count() << "," | |
@@ -441,8 +437,8 @@ inline void TaskflowBoardObserver::dump(std::ostream& os) const { | |||
| 441 | 437 | } | |
| 442 | 438 | os << "\","; | |
| 443 | 439 | ||
| 444 | - // category "val": "Condition Task", | ||
| 445 | - os << "\"val\":\"" << task_type_to_string(s.type) << "\""; | ||
| 440 | + // category "type": "Condition Task", | ||
| 441 | + os << "\"type\":\"" << task_type_to_string(s.type) << "\""; | ||
| 446 | 442 | ||
| 447 | 443 | os << "}"; | |
| 448 | 444 | } | |
@@ -453,14 +449,14 @@ inline void TaskflowBoardObserver::dump(std::ostream& os) const { | |||
| 453 | 449 | } | |
| 454 | 450 | ||
| 455 | 451 | // Function: dump | |
| 456 | - inline std::string TaskflowBoardObserver::dump() const { | ||
| 452 | + inline std::string TFProfObserver::dump() const { | ||
| 457 | 453 | std::ostringstream oss; | |
| 458 | 454 | dump(oss); | |
| 459 | 455 | return oss.str(); | |
| 460 | 456 | } | |
| 461 | 457 | ||
| 462 | 458 | // Function: num_tasks | |
| 463 | - inline size_t TaskflowBoardObserver::num_tasks() const { | ||
| 459 | + inline size_t TFProfObserver::num_tasks() const { | ||
| 464 | 460 | return std::accumulate( | |
| 465 | 461 | _timeline.segments.begin(), _timeline.segments.end(), size_t{0}, | |
| 466 | 462 | [](size_t sum, const auto& exe){ | |
@@ -479,8 +475,8 @@ built-in observer types | |||
| 479 | 475 | ||
| 480 | 476 | */ | |
| 481 | 477 | enum ObserverType { | |
| 482 | - CHROME_TRACING_OBSERVER = 1, | ||
| 483 | - TASKFLOW_BOARD_OBSERVER = 2 | ||
| 478 | + TFPROF = 1, | ||
| 479 | + CHROME = 2 | ||
| 484 | 480 | }; | |
| 485 | 481 | ||
| 486 | 482 | /** | |
@@ -489,9 +485,9 @@ enum ObserverType { | |||
| 489 | 485 | const char* observer_type_to_string(ObserverType type) { | |
| 490 | 486 | const char* val; | |
| 491 | 487 | switch(type) { | |
| 492 | - case CHROME_TRACING_OBSERVER: val = "ChromeTracingObserver"; break; | ||
| 493 | - case TASKFLOW_BOARD_OBSERVER: val = "TaskflowBoardObserver"; break; | ||
| 494 | - default: val = "undefined"; break; | ||
| 488 | + case TFPROF: val = "TFProf"; break; | ||
| 489 | + case CHROME: val = "Chrome"; break; | ||
| 490 | + default: val = "undefined"; break; | ||
| 495 | 491 | } | |
| 496 | 492 | return val; | |
| 497 | 493 | } | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -33,15 +33,15 @@ const char* task_type_to_string(TaskType type) { | |||
| 33 | 33 | const char* val; | |
| 34 | 34 | ||
| 35 | 35 | switch(type) { | |
| 36 | - case PLACEHOLDER_TASK: val = "placeholder"; break; | ||
| 36 | + case PLACEHOLDER_TASK: val = "placeholder"; break; | ||
| 37 | 37 | #ifdef TF_ENABLE_CUDA | |
| 38 | - case CUDAFLOW_TASK: val = "cudaflow"; break; | ||
| 38 | + case CUDAFLOW_TASK: val = "cudaflow"; break; | ||
| 39 | 39 | #endif | |
| 40 | - case STATIC_TASK: val = "static task"; break; | ||
| 41 | - case DYNAMIC_TASK: val = "dynamic task"; break; | ||
| 42 | - case CONDITION_TASK: val = "condition task"; break; | ||
| 43 | - case MODULE_TASK: val = "module task"; break; | ||
| 44 | - default: val = "undefined"; break; | ||
| 40 | + case STATIC_TASK: val = "static"; break; | ||
| 41 | + case DYNAMIC_TASK: val = "subflow"; break; | ||
| 42 | + case CONDITION_TASK: val = "condition"; break; | ||
| 43 | + case MODULE_TASK: val = "module"; break; | ||
| 44 | + default: val = "undefined"; break; | ||
| 45 | 45 | } | |
| 46 | 46 | ||
| 47 | 47 | return val; | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -19,7 +19,7 @@ class Executor; | |||
| 19 | 19 | class WorkerView; | |
| 20 | 20 | class ObserverInterface; | |
| 21 | 21 | class ChromeTracingObserver; | |
| 22 | - class TaskflowBoardObserver; | ||
| 22 | + class TFProfObserver; | ||
| 23 | 23 | ||
| 24 | 24 | // cudaflow | |
| 25 | 25 | class cudaNode; | |
| Back | FazBrowse Home | New Git URL |
0 commit comments