小编qua*_*ant的帖子

如何避免与Helgrind的误报?

我的线程同步"风格"似乎正在抛出helgrind.这是一个简单的程序,可以重现问题:

#include <thread>
#include <atomic>
#include <iostream>

int main()
{
    std::atomic<bool> isReady(false);

    int i = 1;

    std::thread t([&isReady, &i]()
    {
        i = 2;
        isReady = true;
    });

    while (!isReady)
        std::this_thread::yield();

    i = 3;

    t.join();

    std::cout << i;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

据我所知,上面是一个完美的程序.但是,当我使用以下命令运行helgrind时,我收到错误:

valgrind --tool=helgrind ./a.out
Run Code Online (Sandbox Code Playgroud)

这个输出是:

==6247== Helgrind, a thread error detector
==6247== Copyright (C) 2007-2015, and GNU GPL'd, by OpenWorks LLP et al.
==6247== Using Valgrind-3.11.0 and LibVEX; rerun with -h for copyright info
==6247== Command: ./a.out
==6247==
==6247== ---Thread-Announcement------------------------------------------ …
Run Code Online (Sandbox Code Playgroud)

c++ multithreading c++14

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

如何将值约束到excel中的范围?

在C++中我会用boost::clamp它.基本上我有一些excel功能

A1*B2+C3+D4

我想把它限制在+/-某个数字,称之为X1.显而易见的是:

MAX(-X1, MIN(X1, A1*B2+C3+D4))

但我希望能够做到这一点:

CLAMP(A1*B2+C3+D4, -X1, X1)

这个或类似的东西存在吗?我只是好奇 - 显然这个解决方法有效,它只是丑陋.

excel vba excel-vba

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

损失减少但在张量流梯度下降期间权重似乎不会改变

我已经设置了一个非常简单的多层感知器,其中一个隐藏层使用了sigmoid传递函数,模拟数据有两个输入.

我试图在Github上使用TensorFlow示例使用简单前馈神经网络进行设置.我不会在这里发布整个内容,但我的成本函数设置如下:

# Backward propagation
loss = tensorflow.losses.mean_squared_error(labels=y, predictions=yhat)
cost = tensorflow.reduce_mean(loss, name='cost')
updates = tensorflow.train.GradientDescentOptimizer(0.01).minimize(cost)
Run Code Online (Sandbox Code Playgroud)

然后我简单地循环了一堆时代,意图是我的权重通过updates每一步的操作进行优化:

with tensorflow.Session() as sess:
    init = tensorflow.global_variables_initializer()
    sess.run(init)

    for epoch in range(10):

        # Train with each example
        for i in range(len(train_X)):
            feed_dict = {X: train_X[i: i + 1], y: train_y[i: i + 1]}

            res = sess.run([updates, loss], feed_dict)

            print "epoch {}, step {}. w_1: {}, loss: {}".format(epoch, i, w_1.eval(), res[1])

        train_result = sess.run(predict, feed_dict={X: train_X, y: train_y}) …
Run Code Online (Sandbox Code Playgroud)

python tensorflow

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

WSL 终端忘记更新并失去焦点

我正在尝试使用 Windows 10(版本 1909)中的 WSL 控制台进行一些开发工作,但我发现经常运行的进程看起来只是挂起,但是当我向终端发送按键时,它会更新回bash 终端(好像一直完成但没有更新)。

我正在运行debian商店中最新版本的软件包。

有没有办法让这个问题消失,或者我是否在浪费时间尝试使用默认终端?

windows-subsystem-for-linux

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

如何获得 keras 模型相对于其输入的梯度?

我只是问了一个关于相同主题的问题,但针对自定义模型(如何在 Keras 中找到自定义模型的衍生物?)但很快意识到这是在我可以走路之前尝试运行,因此该问题已被标记为重复这个的。

我试图简化我的场景,现在有一个(非自定义)keras模型由 2Dense层组成:

inputs = tf.keras.Input((cols,), name='input')

layer_1 = tf.keras.layers.Dense(
        10,
        name='layer_1',
        input_dim=cols,
        use_bias=True,
        kernel_initializer=tf.constant_initializer(0.5),
        bias_initializer=tf.constant_initializer(0.1))(inputs)

outputs = tf.keras.layers.Dense(
        1,
        name='alpha',
        use_bias=True,
        kernel_initializer=tf.constant_initializer(0.1),
        bias_initializer=tf.constant_initializer(0))(layer_1)

model = tf.keras.Model(inputs=inputs, outputs=outputs)

prediction = model.predict(input_data)
# gradients = ...
Run Code Online (Sandbox Code Playgroud)

现在我想知道outputs关于inputsfor inputs=的导数input_data

到目前为止我尝试过的:

This answer to a different question建议运行grads = K.gradients(model.output, model.input). 但是,如果我运行它,则会出现此错误;

启用急切执行时不支持 tf.gradients。使用 tf.GradientTape 代替。

我只能假设这与现在默认的急切执行有关。

另一种方法是回答我关于自定义 keras 模型的问题,其中包括添加以下内容:

with tf.GradientTape() as tape:
    x = …
Run Code Online (Sandbox Code Playgroud)

keras tensorflow2.0

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

我在哪里可以找到VS2012的更多主题?

我已经下载了VS2012主题编辑器,但现在想为它找到更多主题.具体来说,我是.vstheme文件,但一直无法找到.我希望得到一个与主题编辑器一起使用的漂亮黑暗主题.我对VS2010中使用的设置文件不感兴趣.如果相关,我用C++编写.

syntax-highlighting visual-c++ visual-studio-2012

5
推荐指数
1
解决办法
538
查看次数

如何从对象指针向量创建对象值向量?

"天真"的解决方案是;

std::vector<T> vector_of_objects;
vector_of_objects.reserve(vector_of_pointers.size());
for (T const * p : vector_of_pointers)
    vector_of_objects.push_back(*p);
Run Code Online (Sandbox Code Playgroud)

上述内容似乎很麻烦,也许并不是很明显.

是否有一种解决方案至少效率不高,可能更快更直观?我在想C++ 11可能有一个我不知道的解决方案......

c++ c++11

5
推荐指数
1
解决办法
306
查看次数

如何实现简单的关系数据库?

请注意,这个问题是关于C++ 只是,我不想使用现有的数据库库,我也没有寻求一个通用的解决方案,以"数据库在C++".我有一个特定的问题,并且遵循以下问题的最有效(在时间,空间和最佳实践方面)解决方案.

假设我有一个系列的书,通过描述Id,ISBN,Author,和Name.该Name柱将其涉及作者的一个单独的表,包含的列的ID Id,Surname,First Name.我希望能够通过名称和作者进行有效搜索.我将如何构建这个,以及我将使用哪些容器?

SO其他地方已经多次讨论过这个主题,但是从来没有专门针对C++或不使用现有库的实现的答案.

天真的解决方案只是创建两个单独的类:AuthorBook:

class Book
{
public:
  int id;
  std::string isbn;
  Author* author;
  std::string name;
};

class Author
{
public:
  int id;
  std::string surname;
  std::string givenName;
};
Run Code Online (Sandbox Code Playgroud)

然后我可以创建Book和Author(指针)的向量.但是我如何有效地索引这些?假设我想通过它的ISBN找到一本书; 我怎样才能在恒定或至少对数时间内做到这一点?这可能吗?这种问题有标准做法吗?

c++

5
推荐指数
1
解决办法
6135
查看次数

对std :: valarray切片感到困惑(slice_array,gslice_array,mask_array和indirect_array)

我想获得一个std::valarray范围,该范围引用另一个valarray对象的值范围,而不制作值的副本。文档有关的指标规定[]操作,我需要使用std::slice std::gslice或布尔std::valarray对象作为参数来实现这一点,在这种情况下,我会得到一个slice_arraygslice_arraymask_array为回报:

   slice_array<T> operator[] (slice slc);
  gslice_array<T> operator[] (const gslice& gslc);   
    mask_array<T> operator[] (const valarray<bool>& msk);
indirect_array<T> operator[] (const valarray<size_t>& ind);
Run Code Online (Sandbox Code Playgroud)

当我查看这些返回类型的描述时,它们都是一样的!查看以下描述:slice_arraygslice_arraymask_arrayindirect_array

那么我应该在哪种情况下使用呢?我理解这一点,mask_array并且indirect_array似乎更倾向于专门从某个范围中选择值,但是slice_array/ gslice_array呢?

就我而言,我正在考虑使用slice_array它,因为这听起来很像我在做什么(我正在切片,对吧?)。但我更喜欢一些具体的东西!

c++ numeric

5
推荐指数
0
解决办法
980
查看次数

如何同时在CPU和GPU设备上运行任务?

我有这段代码作为分析,优化和缓存效率,因为我很可能通过我的知识水平得到它.它在概念上在CPU上运行如下:

#pragma omp parallel for schedule(dynamic)
  for (int i = 0; i < numberOfTasks; ++i)
  {
    result[i] = RunTask(i); // result is some array where I store the result of RunTask.
  }
Run Code Online (Sandbox Code Playgroud)

它只是恰巧,RunTask()本质上是一组在每一次一样,非常大的数据集反复操作线性代数运算的,所以它适合在GPU上运行.所以我想实现以下目标:

  1. 将一些任务卸载到GPU
  2. 当GPU忙时,处理CPU上的其余任务
  3. 对于CPU级别的操作,请保持我的super-duper RunTask()功能,而不必修改它以符合restrict(amp).我当然可以restrict(amp)为GPU任务设计一个兼容的lambda.

最初我想过做以下事情:

// assume we know exactly how much time the GPU/CPU needs per task, and this is the 
// most time-efficient combination:
int numberOfTasks = 1000;
int ampTasks = 800;

// RunTasksAMP(start,end) sends a restrict(amp) kernel …
Run Code Online (Sandbox Code Playgroud)

c++ c++-amp

5
推荐指数
1
解决办法
792
查看次数