forked from mindspore-Ecosystem/mindspore
Move some ir files which backend optpass dumped to the fold: verbose_ir_files
This commit is contained in:
parent
02a942ef56
commit
fa6c23358a
|
@ -67,8 +67,11 @@ bool PassManager::Run(const FuncGraphPtr &func_graph, const std::vector<PassPtr>
|
|||
MS_LOG(INFO) << "Run pass hwopt_" + name() + "_" << num << "_" + pass->name() + " in " << cost << " us";
|
||||
#endif
|
||||
if (save_graphs) {
|
||||
auto file_name = "hwopt_" + name() + "_" + std::to_string(num) + "_" + pass->name() + ".ir";
|
||||
DumpIR(file_name, func_graph, true);
|
||||
std::ostringstream oss;
|
||||
oss << "verbose_ir_files"
|
||||
<< "/";
|
||||
oss << "hwopt_" + name() + "_" + std::to_string(num) + "_" + pass->name() + ".ir";
|
||||
DumpIR(oss.str(), func_graph, true);
|
||||
}
|
||||
num++;
|
||||
}
|
||||
|
|
|
@ -4,6 +4,7 @@ set(_DEBUG_SRC_LIST
|
|||
"${CMAKE_CURRENT_SOURCE_DIR}/draw.cc"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/dump_proto.cc"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/trace.cc"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/common.cc"
|
||||
)
|
||||
|
||||
if (ENABLE_DEBUGGER)
|
||||
|
@ -12,7 +13,6 @@ if (ENABLE_DEBUGGER)
|
|||
"${CMAKE_CURRENT_SOURCE_DIR}/debugger/grpc_client.cc"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/debugger/proto_exporter.cc"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/debug_services.cc"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/common.cc"
|
||||
)
|
||||
endif (ENABLE_DEBUGGER)
|
||||
|
||||
|
|
|
@ -28,6 +28,7 @@
|
|||
#include "backend/session/anf_runtime_algorithm.h"
|
||||
#include "frontend/parallel/ops_info/operator_info.h"
|
||||
#include "pipeline/jit/base.h"
|
||||
#include "debug/common.h"
|
||||
|
||||
namespace mindspore {
|
||||
const std::string ToShortString(const TypeId &typeId) {
|
||||
|
@ -483,35 +484,23 @@ void DumpIR(const std::string &filename, const FuncGraphPtr &graph, bool dump_fu
|
|||
if (graph == nullptr) {
|
||||
return;
|
||||
}
|
||||
auto real_filename = pipeline::GetSaveGraphsPathName(AddGlobalId(filename));
|
||||
if (real_filename.size() > PATH_MAX) {
|
||||
MS_LOG(ERROR) << "File path " << real_filename << " is too long.";
|
||||
auto path = pipeline::GetSaveGraphsPathName(AddGlobalId(filename));
|
||||
auto realpath = Common::GetRealPath(path);
|
||||
if (!realpath.has_value()) {
|
||||
MS_LOG(ERROR) << "Get real path failed. path=" << path;
|
||||
return;
|
||||
}
|
||||
char real_path[PATH_MAX] = {0};
|
||||
#if defined(_WIN32) || defined(_WIN64)
|
||||
if (_fullpath(real_path, filename.c_str(), PATH_MAX) == nullptr) {
|
||||
MS_LOG(DEBUG) << "dir " << filename << " does not exit.";
|
||||
}
|
||||
#else
|
||||
if (nullptr == realpath(real_filename.c_str(), real_path)) {
|
||||
MS_LOG(DEBUG) << "Dir " << real_filename << " does not exit.";
|
||||
}
|
||||
#endif
|
||||
|
||||
OrderedMap<AnfNodePtr, int32_t> para_map;
|
||||
std::string path_string = real_path;
|
||||
ChangeFileMode(path_string, S_IRWXU);
|
||||
std::ofstream fout(real_path);
|
||||
ChangeFileMode(realpath.value(), S_IRWXU);
|
||||
std::ofstream fout(realpath.value());
|
||||
std::ostringstream buffer;
|
||||
|
||||
if (!fout.is_open()) {
|
||||
MS_LOG(ERROR) << "Open dump file '" << real_path << "' failed!";
|
||||
MS_LOG(ERROR) << "Open dump file '" << realpath.value() << "' failed!";
|
||||
return;
|
||||
}
|
||||
|
||||
auto nodes = TopoSort(graph->get_return(), SuccDeeperSimple, AlwaysInclude);
|
||||
|
||||
OrderedMap<AnfNodePtr, int32_t> para_map;
|
||||
// dump global info
|
||||
DumpGlobalInfoEntry(graph, buffer);
|
||||
DumpParams(graph, buffer, ¶_map);
|
||||
|
@ -528,7 +517,7 @@ void DumpIR(const std::string &filename, const FuncGraphPtr &graph, bool dump_fu
|
|||
|
||||
fout.close();
|
||||
// set file mode to read only by user
|
||||
ChangeFileMode(path_string, S_IRUSR);
|
||||
ChangeFileMode(realpath.value(), S_IRUSR);
|
||||
}
|
||||
#else
|
||||
void DumpIR(const std::string &, const FuncGraphPtr &, bool) {
|
||||
|
|
|
@ -43,11 +43,19 @@ std::optional<std::string> Common::GetRealPath(const std::string &input_path) {
|
|||
MS_LOG(ERROR) << "CreateNotExistDirs Failed!";
|
||||
return std::nullopt;
|
||||
}
|
||||
|
||||
#if defined(SYSTEM_ENV_POSIX)
|
||||
if (nullptr == realpath(prefix_path.c_str(), real_path)) {
|
||||
MS_LOG(ERROR) << "dir " << prefix_path << " does not exit.";
|
||||
MS_LOG(ERROR) << "dir " << prefix_path << " does not exist.";
|
||||
return std::nullopt;
|
||||
}
|
||||
#elif defined(SYSTEM_ENV_WINDOWS)
|
||||
if (nullptr == _fullpath(real_path, prefix_path.c_str(), PATH_MAX)) {
|
||||
MS_LOG(ERROR) << "dir " << prefix_path << " does not exist.";
|
||||
return std::nullopt;
|
||||
}
|
||||
#else
|
||||
MS_LOG(EXCEPTION) << "Unsupported platform.";
|
||||
#endif
|
||||
out_path = std::string(real_path) + last_path;
|
||||
}
|
||||
|
||||
|
@ -56,9 +64,17 @@ std::optional<std::string> Common::GetRealPath(const std::string &input_path) {
|
|||
MS_LOG(ERROR) << "Prefix path is too longer!";
|
||||
return std::nullopt;
|
||||
}
|
||||
#if defined(SYSTEM_ENV_POSIX)
|
||||
if (nullptr == realpath(input_path.c_str(), real_path)) {
|
||||
MS_LOG(ERROR) << "File " << input_path << " does not exit, it will be created.";
|
||||
MS_LOG(ERROR) << "File " << input_path << " does not exist, it will be created.";
|
||||
}
|
||||
#elif defined(SYSTEM_ENV_WINDOWS)
|
||||
if (nullptr == _fullpath(real_path, input_path.c_str(), PATH_MAX)) {
|
||||
MS_LOG(ERROR) << "File " << input_path << " does not exist, it will be created.";
|
||||
}
|
||||
#else
|
||||
MS_LOG(EXCEPTION) << "Unsupported platform.";
|
||||
#endif
|
||||
out_path = std::string(real_path);
|
||||
}
|
||||
return out_path;
|
||||
|
|
|
@ -23,6 +23,7 @@
|
|||
#include <unordered_map>
|
||||
#include <cstdlib>
|
||||
#include <algorithm>
|
||||
#include <iomanip>
|
||||
|
||||
#include "ir/param_info.h"
|
||||
#include "pipeline/jit/pass.h"
|
||||
|
@ -85,7 +86,7 @@ std::unordered_map<abstract::AbstractBasePtrList, int, abstract::AbstractBasePtr
|
|||
namespace {
|
||||
std::string GetBaseNameForIR(int stage_idx, const std::string &action_name) {
|
||||
std::ostringstream oss;
|
||||
oss << stage_idx << "_" << action_name;
|
||||
oss << std::setfill('0') << std::setw(2) << stage_idx << "_" << action_name;
|
||||
return oss.str();
|
||||
}
|
||||
|
||||
|
|
|
@ -49,7 +49,7 @@ using uint64 = uint64_t;
|
|||
|
||||
#define SYSTEM_ENV_POSIX
|
||||
|
||||
#elif defined(_WIN32)
|
||||
#elif defined(_WIN32) || defined(_WIN64)
|
||||
|
||||
#define SYSTEM_ENV_WINDOWS
|
||||
|
||||
|
|
|
@ -34,6 +34,9 @@ class Env {
|
|||
#if defined(SYSTEM_ENV_POSIX)
|
||||
auto fs = std::make_shared<PosixFileSystem>();
|
||||
return fs;
|
||||
#elif defined(SYSTEM_ENV_WINDOWS)
|
||||
auto fs = std::make_shared<WinFileSystem>();
|
||||
return fs;
|
||||
#else
|
||||
MS_LOG(EXCEPTION) << "Now not support the platform.";
|
||||
#endif
|
||||
|
|
|
@ -16,14 +16,18 @@
|
|||
|
||||
#include "utils/system/file_system.h"
|
||||
|
||||
#if defined(SYSTEM_ENV_POSIX)
|
||||
#include <sys/stat.h>
|
||||
#include <unistd.h>
|
||||
#elif defined(SYSTEM_ENV_WINDOWS)
|
||||
#include <direct.h>
|
||||
#endif
|
||||
|
||||
namespace mindspore {
|
||||
namespace system {
|
||||
|
||||
#if defined(SYSTEM_ENV_POSIX)
|
||||
// Implement the Posix file systen
|
||||
// Implement the Posix file system
|
||||
WriteFilePtr PosixFileSystem::CreateWriteFile(const string &file_name) {
|
||||
if (file_name.empty()) {
|
||||
MS_LOG(ERROR) << "Create write file failed because the file name is null.";
|
||||
|
@ -49,7 +53,7 @@ bool PosixFileSystem::FileExist(const string &file_name) {
|
|||
}
|
||||
auto result = access(file_name.c_str(), F_OK);
|
||||
if (result != 0) {
|
||||
MS_LOG(INFO) << "The file(" << file_name << ") not exist.";
|
||||
MS_LOG(DEBUG) << "The file(" << file_name << ") not exist.";
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
|
@ -62,7 +66,7 @@ bool PosixFileSystem::DeleteFile(const string &file_name) {
|
|||
}
|
||||
auto result = unlink(file_name.c_str());
|
||||
if (result != 0) {
|
||||
MS_LOG(ERROR) << "Delete the file(" << file_name << ") is falire, error(" << errno << ").";
|
||||
MS_LOG(ERROR) << "Delete the file(" << file_name << ") is failed, error(" << errno << ").";
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
|
@ -77,7 +81,7 @@ bool PosixFileSystem::CreateDir(const string &dir_name) {
|
|||
auto result = mkdir(dir_name.c_str(), DEFAULT_MKDIR_MODE);
|
||||
if (result != 0) {
|
||||
if (errno != EEXIST) {
|
||||
MS_LOG(ERROR) << "Create the dir(" << dir_name << ") is falire, error(" << errno << ").";
|
||||
MS_LOG(ERROR) << "Create the dir(" << dir_name << ") is failed, error(" << errno << ").";
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
@ -98,5 +102,147 @@ bool PosixFileSystem::DeleteDir(const string &dir_name) {
|
|||
}
|
||||
#endif
|
||||
|
||||
#if defined(SYSTEM_ENV_WINDOWS)
|
||||
// Implement the Windows file system
|
||||
WriteFilePtr WinFileSystem::CreateWriteFile(const string &file_name) {
|
||||
if (file_name.empty()) {
|
||||
MS_LOG(ERROR) << "Create write file failed because the file name is null.";
|
||||
return nullptr;
|
||||
}
|
||||
auto fp = std::make_shared<WinWriteFile>(file_name);
|
||||
if (fp == nullptr) {
|
||||
MS_LOG(ERROR) << "Create write file(" << file_name << ") failed.";
|
||||
return nullptr;
|
||||
}
|
||||
bool result = fp->Open();
|
||||
if (!result) {
|
||||
MS_LOG(ERROR) << "Open the write file(" << file_name << ") failed.";
|
||||
return nullptr;
|
||||
}
|
||||
return fp;
|
||||
}
|
||||
|
||||
bool WinFileSystem::FileExist(const string &file_name) {
|
||||
if (file_name.empty()) {
|
||||
MS_LOG(WARNING) << "The file name is null.";
|
||||
return false;
|
||||
}
|
||||
auto result = access(file_name.c_str(), F_OK);
|
||||
if (result != 0) {
|
||||
MS_LOG(DEBUG) << "The file(" << file_name << ") not exist.";
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool WinFileSystem::CreateDir(const string &dir_name) {
|
||||
if (dir_name.empty()) {
|
||||
MS_LOG(WARNING) << "The directory name is null.";
|
||||
return false;
|
||||
}
|
||||
auto result = mkdir(dir_name.c_str());
|
||||
if (result != 0) {
|
||||
MS_LOG(ERROR) << "Create the dir(" << dir_name << ") is failed, error(" << result << ").";
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool WinFileSystem::DeleteDir(const string &dir_name) {
|
||||
if (dir_name.empty()) {
|
||||
MS_LOG(WARNING) << "The directory name is null.";
|
||||
return false;
|
||||
}
|
||||
auto result = rmdir(dir_name.c_str());
|
||||
if (result != 0) {
|
||||
MS_LOG(ERROR) << "Delete the dir(" << dir_name << ") is failed, error(" << result << ").";
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool WinFileSystem::DeleteFile(const string &file_name) {
|
||||
if (file_name.empty()) {
|
||||
MS_LOG(WARNING) << "The file name is null.";
|
||||
return false;
|
||||
}
|
||||
auto result = unlink(file_name.c_str());
|
||||
if (result != 0) {
|
||||
MS_LOG(ERROR) << "Delete the file(" << file_name << ") is failed, error(" << errno << ").";
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool WinWriteFile::Open() {
|
||||
if (file_ != nullptr) {
|
||||
MS_LOG(WARNING) << "The File(" << file_name_ << ") already open.";
|
||||
return true;
|
||||
}
|
||||
// check the path
|
||||
if (nullptr == file_name_.c_str()) {
|
||||
MS_LOG(EXCEPTION) << "The file path is null.";
|
||||
}
|
||||
char path[PATH_MAX + 1] = {0x00};
|
||||
if (file_name_.size() > PATH_MAX || nullptr == _fullpath(path, file_name_.c_str(), PATH_MAX)) {
|
||||
MS_LOG(EXCEPTION) << "Convert to real path fail, file name is " << file_name_ << ".";
|
||||
}
|
||||
|
||||
// open the file
|
||||
file_ = fopen(path, "w+");
|
||||
if (file_ == nullptr) {
|
||||
MS_LOG(ERROR) << "File(" << path << ") IO ERROR: " << errno << ".";
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool WinWriteFile::Write(const std::string &data) {
|
||||
MS_LOG(DEBUG) << "Write data(" << data.size() << ") to file(" << this->file_name_ << ").";
|
||||
size_t r = fwrite(data.data(), 1, data.size(), file_);
|
||||
if (r != data.size()) {
|
||||
MS_LOG(ERROR) << "File(" << file_name_ << ") IO ERROR: " << errno << ".";
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool WinWriteFile::Close() {
|
||||
if (file_ == nullptr) {
|
||||
MS_LOG(WARNING) << "File(" << file_name_ << ") already close.";
|
||||
return true;
|
||||
}
|
||||
bool result = true;
|
||||
if (fclose(file_) != 0) {
|
||||
MS_LOG(ERROR) << "File(" << file_name_ << ") IO ERROR: " << errno << ".";
|
||||
result = false;
|
||||
}
|
||||
file_ = nullptr;
|
||||
return result;
|
||||
}
|
||||
|
||||
bool WinWriteFile::Flush() {
|
||||
if (fflush(file_) != 0) {
|
||||
MS_LOG(ERROR) << "File(" << file_name_ << ") IO ERROR: " << EBADF << ".";
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool WinWriteFile::Sync() { return Flush(); }
|
||||
|
||||
WinWriteFile::~WinWriteFile() {
|
||||
try {
|
||||
if (file_ != nullptr) {
|
||||
(void)fclose(file_);
|
||||
file_ = nullptr;
|
||||
}
|
||||
} catch (const std::exception &e) {
|
||||
MS_LOG(ERROR) << "Exception when closing file.";
|
||||
} catch (...) {
|
||||
MS_LOG(ERROR) << "Non standard exception when closing file.";
|
||||
}
|
||||
}
|
||||
#endif
|
||||
} // namespace system
|
||||
} // namespace mindspore
|
||||
|
|
|
@ -198,6 +198,51 @@ class PosixWriteFile : public WriteFile {
|
|||
};
|
||||
#endif
|
||||
|
||||
#if defined(SYSTEM_ENV_WINDOWS)
|
||||
// File system of create or delete directory for windows system
|
||||
class WinFileSystem : public FileSystem {
|
||||
public:
|
||||
WinFileSystem() = default;
|
||||
|
||||
~WinFileSystem() override = default;
|
||||
|
||||
// create a new write file
|
||||
WriteFilePtr CreateWriteFile(const string &file_name) override;
|
||||
|
||||
// check the file is exist?
|
||||
bool FileExist(const string &file_name) override;
|
||||
|
||||
// delete the file
|
||||
bool DeleteFile(const string &file_name) override;
|
||||
|
||||
// Create a Directory
|
||||
bool CreateDir(const string &dir_name) override;
|
||||
|
||||
// Delete the specified directory.
|
||||
bool DeleteDir(const string &dir_name) override;
|
||||
};
|
||||
|
||||
// A file that can be read and write for windows
|
||||
class WinWriteFile : public WriteFile {
|
||||
public:
|
||||
explicit WinWriteFile(const string &file_name) : WriteFile(file_name), file_(nullptr) {}
|
||||
|
||||
~WinWriteFile() override;
|
||||
|
||||
bool Open() override;
|
||||
|
||||
bool Write(const std::string &data) override;
|
||||
|
||||
bool Close() override;
|
||||
|
||||
bool Flush() override;
|
||||
|
||||
bool Sync() override;
|
||||
|
||||
private:
|
||||
FILE *file_;
|
||||
};
|
||||
#endif
|
||||
} // namespace system
|
||||
} // namespace mindspore
|
||||
|
||||
|
|
|
@ -14,6 +14,7 @@
|
|||
# ============================================================================
|
||||
""" test_backend """
|
||||
import os
|
||||
import shutil
|
||||
import pytest
|
||||
|
||||
import mindspore.nn as nn
|
||||
|
@ -86,6 +87,6 @@ def teardown_module():
|
|||
if not os.path.exists(item_name):
|
||||
continue
|
||||
if os.path.isdir(item_name):
|
||||
os.rmdir(item_name)
|
||||
shutil.rmtree(item_name)
|
||||
elif os.path.isfile(item_name):
|
||||
os.remove(item_name)
|
||||
|
|
|
@ -14,6 +14,7 @@
|
|||
# ============================================================================
|
||||
""" test_context """
|
||||
import os
|
||||
import shutil
|
||||
import pytest
|
||||
|
||||
from mindspore import context
|
||||
|
@ -150,6 +151,6 @@ def teardown_module():
|
|||
if not os.path.exists(item_name):
|
||||
continue
|
||||
if os.path.isdir(item_name):
|
||||
os.rmdir(item_name)
|
||||
shutil.rmtree(item_name)
|
||||
elif os.path.isfile(item_name):
|
||||
os.remove(item_name)
|
||||
|
|
Loading…
Reference in New Issue