小编Sta*_*tal的帖子

为什么std :: u16string比char16_t的数组慢?

经过一些性能实验后,似乎使用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)

c++ arrays performance stl c++11

12
推荐指数
1
解决办法
1074
查看次数

CMake:如何将INTERFACE_INCLUDE_DIRECTORIES与ExternalProject一起使用?

我正在尝试使用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)

cmake

7
推荐指数
1
解决办法
3564
查看次数

Tensorflow Estimator API:如何从输入函数传递参数

我正在尝试将类权重添加为我的模型的超参数,但是为了计算权重,我需要读取输入数据,这发生在input_fn中,然后传递给它estimator.fit().输出input_fn只是要素,标签应具有相同的形状num_examples*num_features.我的问题 - 有没有办法将数据从input_fn传播到model_fn的超参数映射?或者作为替代 - 也许有一个input_fn数据集的包装器允许过度采样少数/下采样多数以及批处理 - 在这种情况下我不需要任何参数来传播.

tensorflow tensorflow-estimator

6
推荐指数
1
解决办法
1154
查看次数

如何在Estimator API中初始化嵌入层

我试图在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方面分享如何进行这种初始化的方式会很有帮助.

tensorflow tensorflow-estimator

2
推荐指数
1
解决办法
1559
查看次数