经过一些性能实验后,似乎使用char16_t数组可能会提升性能有时高达40-50%,但似乎在没有任何复制和分配的情况下使用std :: u16string应该和C数组一样快.然而,基准却显示出相反的结果.
这是我为基准编写的代码(它使用Google Benchmark lib):
#include "benchmark/benchmark.h"
#include <string>
static std::u16string str;
static char16_t *str2;
static void BM_Strings(benchmark::State &state) {
while (state.KeepRunning()) {
for (size_t i = 0; i < str.size(); i++){
benchmark::DoNotOptimize(str[i]);
}
}
}
static void BM_CharArray(benchmark::State &state) {
while (state.KeepRunning()) {
for (size_t i = 0; i < str.size(); i++){
benchmark::DoNotOptimize(str2[i]);
}
}
}
BENCHMARK(BM_Strings);
BENCHMARK(BM_CharArray);
static void init(){
str = u"Various applications of randomness have led to the development of several different methods ";
str2 …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用ExternalProject_Add将外部项目作为库添加到我的项目中:
ExternalProject_Add(
xgboost
GIT_REPOSITORY https://github.com/dmlc/xgboost.git
GIT_TAG v0.60
PREFIX ${CMAKE_CURRENT_BINARY_DIR}
INSTALL_COMMAND ""
)
Run Code Online (Sandbox Code Playgroud)
另外,我正在定义库目标并将外部项目添加为依赖项:
set(XGBOOST_PREFIX_PATH "${CMAKE_CURRENT_BINARY_DIR}/src")
set(XGBOOST_BINARY_PATH "${XGBOOST_PREFIX_PATH}/xgboost-build")
set(XGBOOST_BINARY_INCLUDE "${XGBOOST_PREFIX_PATH}/xgboost/include;${XGBOOST_PREFIX_PATH}/xgboost/dmlc-core/include;${XGBOOST_PREFIX_PATH}/xgboost/rabit/include")
add_library(libxgboost IMPORTED STATIC GLOBAL)
add_dependencies(libxgboost xgboost)
set_target_properties(libxgboost PROPERTIES
"IMPORTED_LOCATION" "${XGBOOST_BINARY_PATH}/liblibxgboost.dylib"
"IMPORTED_LINK_INTERFACE_LIBRARIES" "${CMAKE_THREAD_LIBS_INIT}"
"INTERFACE_INCLUDE_DIRECTORIES" "${XGBOOST_BINARY_INCLUDE}"
)
Run Code Online (Sandbox Code Playgroud)
在另一个CMakeLists.txt中:
add_library(somelib STATIC SomeLib.cpp)
target_include_directories(somelib PUBLIC libxgboost)
target_link_libraries(somelib libxgboost)
Run Code Online (Sandbox Code Playgroud)
问题是cmake INTERFACE_INCLUDE_DIRECTORIES不允许导出不存在的包含目录。
还有其他方法可以使所有依赖libxgboost的目标都自动包含头文件吗?
更新:
错误信息:
CMake Error in somelib/CMakeLists.txt:
Imported target "libxgboost" includes non-existent path
"build/xgboost/src/xgboost/include"
in its INTERFACE_INCLUDE_DIRECTORIES. Possible reasons include:
* The path was deleted, renamed, or moved to another location.
* An …Run Code Online (Sandbox Code Playgroud) 我正在尝试将类权重添加为我的模型的超参数,但是为了计算权重,我需要读取输入数据,这发生在input_fn中,然后传递给它estimator.fit().输出input_fn只是要素,标签应具有相同的形状num_examples*num_features.我的问题 - 有没有办法将数据从input_fn传播到model_fn的超参数映射?或者作为替代 - 也许有一个input_fn数据集的包装器允许过度采样少数/下采样多数以及批处理 - 在这种情况下我不需要任何参数来传播.
我试图在tensorflow模型中使用现有的嵌入,嵌入的大小大于2Gb,这使得我最初的尝试不成功:
embedding_var = tf.get_variable(
"embeddings",
shape=GLOVE_MATRIX.shape,
initializer=tf.constant_initializer(np.array(GLOVE_MATRIX))
)
Run Code Online (Sandbox Code Playgroud)
这给了我这个错误:
Cannot create a tensor proto whose content is larger than 2GB.
Run Code Online (Sandbox Code Playgroud)
我正在使用基于Estimator API的AWS SageMaker,并且会话中实际运行的图形发生在场景后面,因此我不确定如何初始化一些占位符以进行嵌入.如果有人能够在EstimatorAPI方面分享如何进行这种初始化的方式会很有帮助.