diff options
-rw-r--r-- | tensorflow/core/platform/profile_utils/cpu_utils.cc | 37 | ||||
-rw-r--r-- | tensorflow/stream_executor/host/host_gpu_executor.cc | 9 |
2 files changed, 26 insertions, 20 deletions
diff --git a/tensorflow/core/platform/profile_utils/cpu_utils.cc b/tensorflow/core/platform/profile_utils/cpu_utils.cc index 02de7d1362..b0136b52f4 100644 --- a/tensorflow/core/platform/profile_utils/cpu_utils.cc +++ b/tensorflow/core/platform/profile_utils/cpu_utils.cc @@ -15,6 +15,7 @@ limitations under the License. #include "tensorflow/core/platform/profile_utils/cpu_utils.h" +#include <fstream> #include <limits> #include <mutex> @@ -67,22 +68,32 @@ static ICpuUtilsHelper* cpu_utils_helper_instance_ = nullptr; #if defined(__ANDROID__) return GetCpuUtilsHelperSingletonInstance().CalculateCpuFrequency(); #elif defined(__linux__) - double bogomips; - FILE* fp = popen("grep '^bogomips' /proc/cpuinfo | head -1", "r"); - if (fp == nullptr) { - return INVALID_FREQUENCY; - } - const int retval_of_bogomips = fscanf(fp, "bogomips : %lf", &bogomips); - if (retval_of_bogomips <= 0) { + // Read the contents of /proc/cpuinfo. + std::ifstream cpuinfo("/proc/cpuinfo"); + if (!cpuinfo) { + LOG(WARNING) << "Failed to open /proc/cpuinfo"; return INVALID_FREQUENCY; } - pclose(fp); - const double freq_ghz = bogomips / 1000.0 / 2.0; - if (retval_of_bogomips != 1 || freq_ghz < 0.01) { - LOG(WARNING) << "Failed to get CPU frequency: " << freq_ghz << " Hz"; - return INVALID_FREQUENCY; + string line; + while (std::getline(cpuinfo, line)) { + double bogomips; + const int retval_of_bogomips = + sscanf(line.c_str(), "bogomips : %lf", &bogomips); + if (retval_of_bogomips > 0) { + const double freq_ghz = bogomips / 1000.0 / 2.0; + if (retval_of_bogomips != 1 || freq_ghz < 0.01) { + LOG(WARNING) << "Failed to get CPU frequency: " << freq_ghz << " Hz"; + return INVALID_FREQUENCY; + } + const int64 freq_n = + static_cast<int64>(freq_ghz * 1000.0 * 1000.0 * 1000.0); + LOG(INFO) << "CPU Frequency: " << freq_n << " Hz"; + return freq_n; + } } - return static_cast<int64>(freq_ghz * 1000.0 * 1000.0 * 1000.0); + LOG(WARNING) << "Failed to find bogomips in /proc/cpuinfo; cannot determine " + "CPU frequency"; + return INVALID_FREQUENCY; #elif defined(__APPLE__) int64 freq_hz; FILE* fp = diff --git a/tensorflow/stream_executor/host/host_gpu_executor.cc b/tensorflow/stream_executor/host/host_gpu_executor.cc index 2c4819651a..3cd97b3cf1 100644 --- a/tensorflow/stream_executor/host/host_gpu_executor.cc +++ b/tensorflow/stream_executor/host/host_gpu_executor.cc @@ -26,8 +26,6 @@ limitations under the License. #include "tensorflow/stream_executor/lib/statusor.h" #include "tensorflow/stream_executor/plugin_registry.h" -bool FLAGS_stream_executor_cpu_real_clock_rate = false; - namespace stream_executor { namespace host { @@ -190,11 +188,8 @@ DeviceDescription *HostExecutor::PopulateDeviceDescription() const { // doesn't result in thrashing or other badness? 4GiB chosen arbitrarily. builder.set_device_memory_size(static_cast<uint64>(4) * 1024 * 1024 * 1024); - float cycle_counter_frequency = 1e9; - if (FLAGS_stream_executor_cpu_real_clock_rate) { - cycle_counter_frequency = static_cast<float>( - tensorflow::profile_utils::CpuUtils::GetCycleCounterFrequency()); - } + float cycle_counter_frequency = static_cast<float>( + tensorflow::profile_utils::CpuUtils::GetCycleCounterFrequency()); builder.set_clock_rate_ghz(cycle_counter_frequency / 1e9); auto built = builder.Build(); |