小编Mic*_*per的帖子

gcc/g ++和cc1/cc1plus有什么区别?

当我编译我的项目,并检查运行所使用的资源top,最大的CPU /内存猪有时被称为g++有时cc1plus.这两者有什么区别,我应该cc1plus直接打电话吗?

gcc g++

75
推荐指数
1
解决办法
3万
查看次数

使用clang ++时默认启用libc ++/libcxx

clang按照这里的说明从头开始安装.之后,我按照这里的说明安装libc++使用.libsupc++

现在,每当我使用clang和编译和链接程序时libc++,我需要发出如下命令:

clang++ -stdlib=libc++ -Wl,-rpath,/path/to/libcxx/lib <...>
Run Code Online (Sandbox Code Playgroud)

是否有一种方法以libc++默认使用的方式配置/编译clang ,而不必每次都在命令行上指定库和/或路径?放入LD_LIBRARY_PATH它也不是首选选项,也不是使用自定义包装器脚本.

linux clang libc++

20
推荐指数
1
解决办法
3762
查看次数

如何找出使用gcc时实际应用的优化?

使用IBM的XL编译器系列,可以提供两个选项(-qreport-qlist)来为每个源文件生成报告,其中包括应用了哪些优化的信息,或者无法优化代码的哪些部分(以及原因).

是否有可能为GNU的g ++获得类似的报告 - 如果是,那该怎么做?

c++ gcc compilation g++ compiler-optimization

19
推荐指数
2
解决办法
1999
查看次数

如何使用diff比较两个目录而忽略不存在的文件?

我想diff用于比较不同文件的两个目录,使用-q简短输出选项.但是,输出混乱了许多只存在于一个目录中但不存在于另一个目录中的文件.我可以强制diff(或使用其他工具)仅显示两个目录中存在的文件吗?

我使用的当前命令是

diff -q <dir1> <dir2>
Run Code Online (Sandbox Code Playgroud)

任何想法都表示赞赏.

linux diff compare

18
推荐指数
1
解决办法
1万
查看次数

什么'cd $ {0%/*}'在bash中意味着什么?

我遇到了一个git commit,它通过这个魔术变量替换来清理一些readlinkdirname命令cd ${0%/*}.

bash如何解释它?

bash

12
推荐指数
2
解决办法
5356
查看次数

MPI通信的行为是否与其自身定义明确?

如果您使用其中一种MPI通信方法与其自身进行通信,会发生什么?是否有明确定义的行为(例如保证成功或失败),还是取决于机会/其他无法控制的影响,程序是否会继续运行?

一个例子是流体动力学代码,其中每个等级确定需要将哪些网格单元发送到相邻等级以为计算模板创建必要的光环.如果仅在一个等级上开始模拟,则将自身发送/接收等级0的无阻塞(发送大约0长度的信息).

mpi

11
推荐指数
1
解决办法
5327
查看次数

如何用`std :: function`作为函数参数创建一个可变参数模板函数?

如何std::function使用函数参数创建一个可变参数模板函数,该函数参数接受可变数量的参数?我试图将问题减少到MWE:

#include <functional>

template <class T> void run(std::function<void(T *)> fun, T *obj) { fun(obj); }

template <class T, class... Args>
void run_variadic(std::function<void(T *, Args...)> fun, T *obj, Args... args) {
  fun(obj, args...);
}

struct Foo {
  void bar() {}
};

int main() {
  Foo foo;
  std::function<void(Foo *)> fun = &Foo::bar;

  run(fun, &foo);                     // works
  run<Foo>(&Foo::bar, &foo);          // works
  run_variadic(fun, &foo);            // works
  run_variadic<Foo>(&Foo::bar, &foo); // does not compile
}
Run Code Online (Sandbox Code Playgroud)

看起来仅仅存在可变参数模板参数run_variadic使得无法使用成员函数指针直接调用它.clang的错误信息如下:

main.cpp:21:3: error: no matching …
Run Code Online (Sandbox Code Playgroud)

c++ variadic-templates c++11 std-function

11
推荐指数
2
解决办法
3522
查看次数

有没有办法在Python中检查os.environ的条目是变量还是shell函数?

使用osPython中的模块,我们可以通过dict轻松访问环境变量os.environ.但是,我发现os.environ它不仅包含变量,还包含全局定义的shell函数(例如,来自module软件包).

是否有可能从Python中找出os.environ实际中给定条目是否是函数而不是变量?请注意,首选的shell无关的解决方案,但我也可以选择Bash特定的解决方案.

python bash shell environment-variables

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

存储多维可变长度数据的最有效(但又足够灵活)的方法是什么?

我想知道有效存储(以及随后访问)具有可变长度的多维数据数组的最佳实践.重点是性能,但我还需要能够在运行时更改单个数据集的长度,而不会产生太多开销.

注意:我知道这是一个有点冗长的问题,但是我已经看了很多,并且找不到解决方案或示例来描述手头的问题并且具有足够的准确性.

背景

上下文是基于不连续Galerkin谱元素方法(DGSEM)的计算流体动力学(CFD)代码(参见Kopriva(2009),Workinging Spectral Methods for Partial Differential Equations).为简单起见,让我们假设一个2D数据布局(实际上它是三维的,但从2D到3D的扩展应该是直截了当的).

我有一个由K方形元素k(k = 0,...,K-1)组成的网格,可以是不同的(物理)大小.在每个网格元素(或"单元格")中k,我有N_k^2数据点.N_k是每个维度中的数据点的数量,并且可以在不同的网格单元之间变化.

在每个数据点n_k,i(其中i = 0,...,N_k^2-1)我必须存储一个解决方案值数组,它nVars在整个域中(即在任何地方)具有相同的长度,并且在运行时期间不会更改.

尺寸和变化

栅格单元的数量KO(10^5)O(10^6)能够在运行期间改变.
数据点的数量N_k在每个网格单元之间28可以在运行时期间改变(并且可以是用于每个小区不同的).
变量的数目nVars存储在每个网格点是左右510不能在运行时期间改变(它也是对于每个网格单元是相同的).

要求

性能是这里的关键问题.我需要能够以有效的方式在所有单元的所有网格点上以有序的方式定期迭代(即,没有太多的高速缓存未命中).通常,K并且N_k在模拟期间不经常改变,因此例如可以选择用于所有单元和数据点的大的连续存储器块.

但是,我确实需要能够在运行时精炼或粗化网格(即删除单元格并创建新单元格,新的单元格可以附加到结尾).我还需要能够更改近似顺序N_k,因此我为每个单元格存储的数据点数量也可以在运行时更改.

结论

任何输入都表示赞赏.如果您有自己的经验,或者只是了解一些我可以看到的好资源,请告诉我.然而,虽然解决方案对最终程序的性能至关重要,但它只是众多问题中的一个,因此解决方案需要具有应用性,而不是纯粹的学术性.

如果这是一个提出这个问题的错误场所,请告诉我一个更合适的地方.

c++ performance caching hpc fluid-dynamics

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

将stdin复制到stdout

我正在寻找一个bash one-liner,它将stdin复制到stdout而不进行交错.到目前为止我找到的唯一解决方案是使用tee,但这确实产生了交错输出.这是什么意思:

如果例如文件f读取

a
b
Run Code Online (Sandbox Code Playgroud)

我想执行

cat f | HERE_BE_COMMAND
Run Code Online (Sandbox Code Playgroud)

获得

a
b
a
b
Run Code Online (Sandbox Code Playgroud)

如果我tee -用作命令,输出通常看起来像

a
a
b
b
Run Code Online (Sandbox Code Playgroud)

有关清洁解决方案的建议吗?

澄清

cat f命令只是输入可以来自的示例.实际上,它是一个可以(应该)只执行一次的命令.我也想从使用临时文件不要,因为处理的数据是有点敏感和临时文件总是容易出错时执行的命令被中断.此外,我对涉及其他脚本(如上所述,它应该是单行)或准备命令的解决方案不感兴趣,这些命令需要在实际复制命令之前执行.

bash shell

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

如何重新应用之前回滚的变更集

如何重新应用已回滚到先前版本的变更集?当然,我会使用另一个与所需修订版本合并,但该命令似乎是一个无操作 - 没有合并,并且svn status在合并后没有显示任何更改.我发现这样做的唯一方法是使用该--ignore-ancestry选项,但它似乎并不正确.

我尝试做的是以下内容:

  • 存储库正在修订 1000
  • 我们首先通过创建分支然后在分支WC中执行trunk来回滚到修订版500branches/rollbacksvn merge -r HEAD:500 .
  • 之后我们想重新应用修改的变更集700,我们试图通过执行来完成svn merge -c 700 ^/trunk .,但这不起作用(实际上:什么都不做)
  • 如果我们将--ignore-ancestry选项添加到上一个命令,它会执行我们想要的操作,但感觉不对.
  • 然后,我们将分支重新trunk集成到处于所需状态的分支:修订501-1000回滚,修订版700重新应用.

有任何想法吗?

svn merge

4
推荐指数
1
解决办法
1216
查看次数

std :: vector成员变量是否可以未初始化(内存错误)?

这是一个更大的模拟工具源代码的摘录:

struct Foo {
  std::vector<int> v;
}

...

Foo* foo;

...

foo->v.resize(0);
Run Code Online (Sandbox Code Playgroud)

Valgrind报道Conditional jump or move depends on uninitialised value(s)了一条线resize(0).我唯一的解释是,某种类的内存Foo被分配但从未初始化,因此v从未调用(默认)构造函数(注意,Foo它不提供用户声明的构造函数).

谁能告诉我这是否真的是这种情况(分配但未初始化)以及为什么/如何?如果我的解释是错误的,你还有其他想法吗?我试图搜索相关问题,但找不到答案: - /

PS:我正在使用Valgrind 3.9.0和GCC 4.8.2并启用了C++ 11.完整的Valgrind消息:

==967== Conditional jump or move depends on uninitialised value(s)
==967==    at 0x939751: std::vector<double, std::allocator<double> >::resize(unsigned long) (stl_vector.h:666)
...
Run Code Online (Sandbox Code Playgroud)

c++ memory valgrind c++11

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

如何检查浮点数是否近似整数

在 Python 中,如何检查浮点数是否近似为整数,并具有用户指定的最大差异?

我在想类似的东西is_whole(f, eps),有f问题的值在哪里,eps是允许的最大偏差,结果如下:

>>> is_whole(1.1, 0.05)
False
>>> is_whole(1.1, 0.2)
True
>>> is_whole(-2.0001, 0.01)
True
Run Code Online (Sandbox Code Playgroud)

python floating-point

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