小编dao*_*ker的帖子

只使用一个成员的联合的目的是什么?

当我阅读seastar源代码时,我注意到有一个称为tx_side只有一个成员的联合结构。这是解决某些问题的技巧吗?

仅供参考,我将tx_side以下结构粘贴:

union tx_side {
    tx_side() {}
    ~tx_side() {}
    void init() { new (&a) aa; }
    struct aa {
        std::deque<work_item*> pending_fifo;
    } a;
} _tx;
Run Code Online (Sandbox Code Playgroud)

c++ unions c++14

64
推荐指数
1
解决办法
3270
查看次数

为什么perf有这么高的上下文切换?

我试图了解linux perf,发现一些非常令人困惑的行为:

我写了一个简单的多线程示例,其中一个线程固定到每个核心; 每个线程在本地运行计算,并且不相互通信(见test.cc下文).我在想这个例子应该有非常低的(如果不是零)上下文切换.但是,使用linux perf来分析示例显示了数千个上下文切换 - 远远超出了我的预期.我进一步分析了linux命令sleep 20以进行比较,显示更少的上下文切换.

此个人资料结果对我没有任何意义.什么导致如此多的上下文切换?

> sudo perf stat -e sched:sched_switch ./test
 Performance counter stats for './test':

                 6,725  sched:sched_switch                                          

      20.835 seconds time elapsed

> sudo perf stat -e sched:sched_switch sleep 20

 Performance counter stats for 'sleep 20':

                 1      sched:sched_switch                                          

      20.001 seconds time elapsed
Run Code Online (Sandbox Code Playgroud)

要重现结果,请运行以下代码:

perf stat -e context-switches sleep 20
perf stat -e context-switches ./test
Run Code Online (Sandbox Code Playgroud)

要编译源代码,请输入以下代码:

g++ -std=c++11 -pthread -o test test.cc
Run Code Online (Sandbox Code Playgroud)
// test.cc
#include <iostream>
#include <thread>
#include <vector> …
Run Code Online (Sandbox Code Playgroud)

c++ linux perf

9
推荐指数
2
解决办法
226
查看次数

在非线性之前或在Keras之后立即添加批量标准化?

def conv2d_bn(x, nb_filter, nb_row, nb_col,
              border_mode='same', subsample=(1, 1),
              name=None):
    '''Utility function to apply conv + BN.
    '''

    x = Convolution2D(nb_filter, nb_row, nb_col,
                      subsample=subsample,
                      activation='relu',
                      border_mode=border_mode,
                      name=conv_name)(x)
    x = BatchNormalization(axis=bn_axis, name=bn_name)(x)
    return x
Run Code Online (Sandbox Code Playgroud)

当我在keras中使用官方的inception_v3模型时,我发现他们在'relu'非线性之后使用BatchNormalization作为上面的代码脚本.

但是在批量标准化论文中,作者说

我们通过归一化x = Wu + b,在非线性之前立即添加BN变换.

然后我查看tensorflow中的初始实现,它在非线性之前立即添加BN.有关初始ops.py的更多详细信息

我糊涂了.为什么人们在Keras中使用以上风格而不是以下?

def conv2d_bn(x, nb_filter, nb_row, nb_col,
              border_mode='same', subsample=(1, 1),
              name=None):
    '''Utility function to apply conv + BN.
    '''

    x = Convolution2D(nb_filter, nb_row, nb_col,
                      subsample=subsample,
                      border_mode=border_mode,
                      name=conv_name)(x)
    x = BatchNormalization(axis=bn_axis, name=bn_name)(x)
    x = Activation('relu')(x)
    return x
Run Code Online (Sandbox Code Playgroud)

在密集案件中: …

theano deep-learning keras tensorflow

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

标签 统计

c++ ×2

c++14 ×1

deep-learning ×1

keras ×1

linux ×1

perf ×1

tensorflow ×1

theano ×1

unions ×1