Skip to content

Commit 7f811c2

Browse files
authored
Merge branch 'main' into zejun/kineto_for_pti_0.11
2 parents 54e6125 + 856c48c commit 7f811c2

File tree

11 files changed

+66
-26
lines changed

11 files changed

+66
-26
lines changed

libkineto/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,7 @@ set_target_properties(kineto_base kineto_api PROPERTIES
172172
set(KINETO_COMPILE_OPTIONS "-DKINETO_NAMESPACE=libkineto")
173173
list(APPEND KINETO_COMPILE_OPTIONS "-DFMT_HEADER_ONLY")
174174
list(APPEND KINETO_COMPILE_OPTIONS "-DENABLE_IPC_FABRIC")
175-
list(APPEND KINETO_COMPILE_OPTIONS "-DTMP_IMPL_MEMORY_PROFILING_ON_DEMAND")
175+
list(APPEND KINETO_COMPILE_OPTIONS)
176176
if(NOT MSVC)
177177
list(APPEND KINETO_COMPILE_OPTIONS "-std=c++17")
178178
else()

libkineto/include/ClientInterface.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,9 @@ class ClientInterface {
1818
virtual void prepare(bool, bool, bool, bool, bool) = 0;
1919
virtual void start() = 0;
2020
virtual void stop() = 0;
21-
#ifdef TMP_IMPL_MEMORY_PROFILING_ON_DEMAND
2221
virtual void start_memory_profile() = 0;
2322
virtual void stop_memory_profile() = 0;
2423
virtual void export_memory_profile(const std::string&) = 0;
25-
#endif
2624
};
2725

2826
} // namespace libkineto

libkineto/include/output_base.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,8 @@ class ActivityLogger {
6363
handleTraceStart(std::unordered_map<std::string, std::string>(), "");
6464
}
6565

66+
virtual void finalizeMemoryTrace(const std::string&, const Config&) = 0;
67+
6668
virtual void finalizeTrace(
6769
const Config& config,
6870
std::unique_ptr<ActivityBuffers> buffers,

libkineto/src/ActivityProfilerController.cpp

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -245,13 +245,33 @@ void ActivityProfilerController::profilerLoop() {
245245
}
246246

247247
void ActivityProfilerController::memoryProfilerLoop() {
248-
const std::string& path = asyncRequestConfig_->activitiesLogFile();
248+
std::string path = asyncRequestConfig_->activitiesLogFile();
249249
auto profile_time = asyncRequestConfig_->profileMemoryDuration();
250-
profiler_->performMemoryLoop(path, profile_time);
250+
std::unique_ptr<Config> config = asyncRequestConfig_->clone();
251+
while (!stopRunloop_) {
252+
// Perform Double-checked locking to reduce overhead of taking lock.
253+
if (asyncRequestConfig_ && !profiler_->isActive()) {
254+
std::lock_guard<std::mutex> lock(asyncConfigLock_);
255+
if (asyncRequestConfig_ && !profiler_->isActive()) {
256+
logger_ = makeLogger(*asyncRequestConfig_);
257+
path = asyncRequestConfig_->activitiesLogFile();
258+
profile_time = asyncRequestConfig_->profileMemoryDuration();
259+
config = asyncRequestConfig_->clone();
260+
asyncRequestConfig_ = nullptr;
261+
} else {
262+
continue;
263+
}
264+
} else {
265+
continue;
266+
}
267+
268+
profiler_->performMemoryLoop(path, profile_time, logger_.get(), *config);
269+
}
251270
}
252271

253272
void ActivityProfilerController::step() {
254-
// Do not remove this copy to currentIter. Otherwise count is not guaranteed.
273+
// Do not remove this copy to currentIter. Otherwise count is not
274+
// guaranteed.
255275
int64_t currentIter = ++iterationCount_;
256276
VLOG(0) << "Step called , iteration = " << currentIter;
257277

@@ -264,7 +284,6 @@ void ActivityProfilerController::step() {
264284
activateConfig(now);
265285
}
266286
}
267-
268287
if (profiler_->isActive()) {
269288
auto now = system_clock::now();
270289
auto next_wakeup_time = now + Config::kControllerIntervalMsecs;

libkineto/src/Config.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -399,8 +399,9 @@ bool Config::handleOption(const std::string& name, std::string& val) {
399399
perThreadBufferEnabled_ = toBool(val);
400400
} else if (!name.compare(kProfileMemory)) {
401401
memoryProfilerEnabled_ = toBool(val);
402-
activitiesLogFile_ = defaultMemoryTraceFileName();
403-
activitiesLogUrl_ = fmt::format("file://{}", activitiesLogFile_);
402+
if (memoryProfilerEnabled_) {
403+
activitiesLogFile_ = defaultMemoryTraceFileName();
404+
}
404405
} else if (!name.compare(kProfileMemoryDuration)) {
405406
profileMemoryDuration_ = toInt32(val);
406407
} else if (!name.compare(kActivitiesLogFileKey)) {

libkineto/src/CuptiActivityProfiler.cpp

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1421,16 +1421,21 @@ const time_point<system_clock> CuptiActivityProfiler::performRunLoopStep(
14211421

14221422
const void CuptiActivityProfiler::performMemoryLoop(
14231423
const string& path,
1424-
uint32_t profile_time) {
1425-
#ifdef TMP_IMPL_MEMORY_PROFILING_ON_DEMAND
1424+
uint32_t profile_time,
1425+
ActivityLogger* logger,
1426+
Config& config) {
1427+
currentRunloopState_ = RunloopState::CollectTrace;
14261428
if (libkineto::api().client()) {
14271429
libkineto::api().client()->start_memory_profile();
14281430
LOG(INFO) << "Running memory profiling for " << profile_time << " ms";
14291431
std::this_thread::sleep_for(std::chrono::milliseconds(profile_time));
1432+
LOG(INFO) << "Exporting memory profiling results to " << path;
14301433
libkineto::api().client()->export_memory_profile(path);
14311434
libkineto::api().client()->stop_memory_profile();
1435+
LOG(INFO) << "Finalizing trace";
1436+
logger->finalizeMemoryTrace(path, config);
14321437
}
1433-
#endif
1438+
currentRunloopState_ = RunloopState::WaitForRequest;
14341439
}
14351440

14361441
void CuptiActivityProfiler::finalizeTrace(

libkineto/src/CuptiActivityProfiler.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,11 @@ class CuptiActivityProfiler {
140140
const std::chrono::time_point<std::chrono::system_clock>& nextWakeupTime,
141141
int64_t currentIter = -1);
142142

143-
const void performMemoryLoop(const std::string& path, uint32_t profile_time);
143+
const void performMemoryLoop(
144+
const std::string& path,
145+
uint32_t profile_time,
146+
ActivityLogger* logger,
147+
Config& config);
144148

145149
// Used for async requests
146150
void setLogger(ActivityLogger* logger) {

libkineto/src/DeviceProperties.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ static const std::vector<gpuDeviceProp>& deviceProps() {
7070
static const std::string createDevicePropertiesJson(
7171
size_t id,
7272
const gpuDeviceProp& props) {
73-
std::string gpuSpecific = "";
73+
std::string gpuSpecific;
7474
#if defined(HAS_CUPTI)
7575
gpuSpecific = fmt::format(
7676
R"JSON(

libkineto/src/output_json.cpp

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,10 @@ void ChromeTraceLogger::openTraceFile() {
160160
}
161161
}
162162

163+
void ChromeTraceLogger::finalizeMemoryTrace(const std::string&, const Config&) {
164+
LOG(INFO) << "finalizeMemoryTrace not implemented for ChromeTraceLogger";
165+
}
166+
163167
ChromeTraceLogger::ChromeTraceLogger(const std::string& traceFileName) {
164168
fileName_ = traceFileName.empty() ? defaultFileName() : traceFileName;
165169
traceOf_.clear(std::ios_base::badbit);
@@ -399,7 +403,7 @@ void ChromeTraceLogger::handleActivity(const libkineto::ITraceActivity& op) {
399403
external_id = op.correlationId();
400404
}
401405
}
402-
std::string arg_values = "";
406+
std::string arg_values;
403407
if (external_id != 0) {
404408
arg_values.append(fmt::format("\"External id\": {}", external_id));
405409
}
@@ -526,7 +530,7 @@ void ChromeTraceLogger::handleActivity(const libkineto::ITraceActivity& op) {
526530
pgMap.insert({processGroupName, pg_config});
527531
}
528532

529-
std::string args = "";
533+
std::string args;
530534
if (!arg_values.empty()) {
531535
args = fmt::format(
532536
R"JSON(,

libkineto/src/output_json.h

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -35,21 +35,21 @@ class Config;
3535

3636
struct pgConfig {
3737
pgConfig() = default;
38-
std::string pg_name{""};
39-
std::string pg_desc{""};
40-
std::string backend_config{""};
41-
std::string pg_size{""};
42-
std::string ranks{""};
38+
std::string pg_name;
39+
std::string pg_desc;
40+
std::string backend_config;
41+
std::string pg_size;
42+
std::string ranks;
4343
};
4444

4545
struct DistributedInfo {
4646
DistributedInfo() = default;
4747

48-
std::string backend{""};
49-
std::string rank{""};
50-
std::string world_size{""};
51-
std::string pg_count{""};
52-
std::string nccl_version{""};
48+
std::string backend;
49+
std::string rank;
50+
std::string world_size;
51+
std::string pg_count;
52+
std::string nccl_version;
5353
bool distInfo_present_{false};
5454
};
5555

@@ -81,6 +81,8 @@ class ChromeTraceLogger : public libkineto::ActivityLogger {
8181
std::unordered_map<std::string, std::vector<std::string>>& metadata)
8282
override;
8383

84+
void finalizeMemoryTrace(const std::string&, const Config&) override;
85+
8486
std::string traceFileName() const {
8587
return fileName_;
8688
}

0 commit comments

Comments
 (0)