提交 728e7e88 编写于 作者: M minqiyang

Use xxHash as scope's hash algorithm

test=develop
上级 81651fca
......@@ -82,7 +82,7 @@ cc_test(variable_test SRCS variable_test.cc)
cc_library(threadpool SRCS threadpool.cc DEPS enforce)
cc_test(threadpool_test SRCS threadpool_test.cc DEPS threadpool)
cc_library(scope SRCS scope.cc DEPS glog threadpool)
cc_library(scope SRCS scope.cc DEPS glog threadpool xxhash)
cc_test(scope_test SRCS scope_test.cc DEPS scope)
cc_library(data_device_transform SRCS data_device_transform.cc DEPS tensor)
......
......@@ -201,7 +201,7 @@ void Scope::RenameInternal(const std::string& origin_name,
auto new_it = vars_.find(new_name);
PADDLE_ENFORCE(new_it == vars_.end(),
"The variable with name %s is already in the scope", new_name);
vars_[new_name].reset(origin_it.value().release());
vars_[new_name].reset(origin_it->second.release());
vars_.erase(origin_it);
}
......
......@@ -14,15 +14,18 @@ limitations under the License. */
#pragma once
extern "C" {
#include <xxhash.h>
}
#include <functional>
#include <list>
#include <memory>
#include <string>
#include <unordered_map>
#include <utility>
#include <vector>
#include <tsl/robin_map.h> // NOLINT
#include "paddle/fluid/framework/rw_lock.h"
#include "paddle/fluid/framework/variable.h"
#include "paddle/fluid/platform/macros.h"
......@@ -35,6 +38,14 @@ bool IsFastEagerDeletionModeEnabled();
class Scope;
namespace inner {
struct KeyHasher {
std::size_t operator()(const std::string& key) const {
return XXH32(key.c_str(), key.size(), 1);
}
};
} // namespace inner
/**
* @brief Scope that manage all variables.
*
......@@ -99,11 +110,14 @@ class Scope {
std::string Rename(const std::string& origin_name) const;
protected:
mutable tsl::robin_map<
std::string, std::unique_ptr<Variable>, std::hash<std::string>,
std::equal_to<std::string>,
std::allocator<std::pair<std::string, std::unique_ptr<Variable>>>, true>
mutable std::unordered_map<std::string, std::unique_ptr<Variable>,
inner::KeyHasher>
vars_;
// mutable tsl::robin_map<
// std::string, std::unique_ptr<Variable>, std::hash<std::string>,
// std::equal_to<std::string>,
// std::allocator<std::pair<std::string, std::unique_ptr<Variable>>>, true>
// vars_;
private:
// Call Scope::NewScope for a sub-scope.
......
......@@ -93,7 +93,7 @@ def cuda_profiler(output_file, output_mode=None, config=None):
with open(config_file, 'wb') as fp:
fp.writelines([six.b("%s\n" % item) for item in config])
#Comment this for nvprof
#core.nvprof_init(output_file, output_mode, config_file)
core.nvprof_init(output_file, output_mode, config_file)
# Enables profiler collection by the active CUDA profiling tool.
core.nvprof_start()
yield
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册