| 245 | } // namespace |
| 246 | |
| 247 | Status XlaCompilationCache::CompileStrict( |
| 248 | Entry* entry, const XlaCompiler::Options& options, |
| 249 | const std::vector<XlaCompiler::Argument>& args, |
| 250 | const string &function_name, |
| 251 | const std::function<Status(XlaCompiler* compiler, |
| 252 | const std::vector<XlaCompiler::Argument>& args, |
| 253 | XlaCompiler::CompilationResult*)>& compile_fn) { |
| 254 | tensorflow::Env* env = tensorflow::Env::Default(); |
| 255 | const uint64 compile_start_us = env->NowMicros(); |
| 256 | |
| 257 | XlaCompiler compiler(options); |
| 258 | entry->compile_state = CompileState::kCompiled; |
| 259 | |
| 260 | entry->compilation_status = |
| 261 | compile_fn(&compiler, args, &entry->compilation_result); |
| 262 | TF_RETURN_IF_ERROR(entry->compilation_status); |
| 263 | CHECK_EQ(entry->executable.get(), nullptr); |
| 264 | entry->compilation_status = |
| 265 | BuildExecutable(options, entry->compilation_result, &entry->executable); |
| 266 | |
| 267 | const uint64 compile_end_us = env->NowMicros(); |
| 268 | const uint64 compile_time_us = compile_end_us - compile_start_us; |
| 269 | metrics::UpdateXlaCompilationTime(compile_time_us); |
| 270 | { |
| 271 | mutex_lock lock(cluster_compile_stats_mu_); |
| 272 | auto it = cluster_compile_stats_.find(function_name); |
| 273 | const uint64 compile_time_s = compile_time_us / 1.0e6; |
| 274 | it->second.compile_count++; |
| 275 | it->second.cumulative_compile_time_us += compile_time_us; |
| 276 | it->second.max_compile_time_s = std::max(it->second.max_compile_time_s, |
| 277 | compile_time_s); |
| 278 | LogOnceXlaCompiledFirstCluster(); |
| 279 | VLOG(1) << "compiled " << function_name << " " |
| 280 | << it->second.compile_count |
| 281 | << " times, compile time: " << compile_time_us |
| 282 | << " us, cumulative: " << it->second.cumulative_compile_time_us |
| 283 | << " us (" |
| 284 | << tensorflow::strings::HumanReadableElapsedTime(compile_time_s) |
| 285 | << " / " |
| 286 | << tensorflow::strings::HumanReadableElapsedTime( |
| 287 | it->second.cumulative_compile_time_us / 1.0e6) |
| 288 | << ")"; |
| 289 | |
| 290 | XlaJitCompilationActivity jit_compilation_activity; |
| 291 | jit_compilation_activity.set_cluster_name(function_name); |
| 292 | jit_compilation_activity.set_compile_count(it->second.compile_count); |
| 293 | jit_compilation_activity.set_compile_time_us(compile_time_us); |
| 294 | jit_compilation_activity.set_cumulative_compile_time_us( |
| 295 | it->second.cumulative_compile_time_us); |
| 296 | TF_RETURN_IF_ERROR( |
| 297 | BroadcastXlaActivity(std::move(jit_compilation_activity))); |
| 298 | } |
| 299 | |
| 300 | return Status::OK(); |
| 301 | } |
| 302 | |
| 303 | Status XlaCompilationCache::CompileAsynchronous( |
| 304 | Entry* entry, const XlaCompiler::Options& options, |
nothing calls this directly
no test coverage detected