小编Enz*_*nzo的帖子

通过SSE加速矩阵乘法(C++)

我需要每秒运行240000次矩阵向量乘法.矩阵是5x5并且始终相同,而向量在每次迭代时都会发生变化.数据类型是float.我正在考虑使用一些SSE(或类似)指令.

1)我担心算术运算的数量与所涉及的存储器操作的数量相比太小.你认为我可以获得一些有形的(例如> 20%)改善吗?

2)我需要英特尔编译器吗?

3)你能指出一些参考文献吗?

谢谢大家!

c++ sse matrix-multiplication

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

重写子模块历史记录后包含子模块的存储库

在重写了存储库的历史记录之后git filter-branch,所有的SHA都会发生变化.

现在,如果该存储库(让我们称之为X)被用作另一个存储库中的git子模块(让我们调用它Y),我们就遇到了问题.
实际上,Y根据该子模块X中提交的SHA 知道要加载的子模块的版本.由于X现在所有的SHA 都已发生变化,因此Y指向不再存在的SHA.

有没有办法重写它的历史Y,它指向子模块的新提交SHA X(在当前和过去的提交中)?

我猜想,鉴于旧的SHA和新的SHA之间的对应关系,原则上这是可能的,但我担心它会涉及令人讨厌的bash脚本.
还有什么比这更容易了

git git-submodules

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

重新分配变量时,不会调用析构函数.(C++)

重新分配变量时,不会调用析构函数:

Object foo = Object(a,b);
foo = Object(c,d);
Run Code Online (Sandbox Code Playgroud)

因此,析构函数只会在Object(c,d)范围的末尾被调用,这显然会导致问题.现在,在这种特殊情况下,它并没有太多困扰我:它足以声明2个不同的对象:

Object foo1 = Object(a,b);
Object foo2 = Object(c,d);
Run Code Online (Sandbox Code Playgroud)

这样,两个对象的析构函数将在最后被调用.

但是,有一种情况我必须重新分配变量,即在对象构造函数中,例如:

SuperObject(Point point1, Point point2) : delay_object_(DelayObject(0)) {
  double distance = distance(point1, point2);
  double delay = distance / speed;

  delay_object_ = DelayObject(delay);
}
Run Code Online (Sandbox Code Playgroud)

事实上,DelayObject参数不容易计算(在这个例子中我也省略了一些其他段落),我想避免在初始化列表中这样做.

我以为我可以通过将对象放在堆中并显式调用析构函数来强制删除:

SuperObject(Point point1, Point point2) : p_delay_object_(new DelayObject(0)) {
  double distance = distance(point1, point2);
  double delay = distance / speed;

  delete p_delay_object_;
  p_delay_object_ = new DelayObject(delay);
}
Run Code Online (Sandbox Code Playgroud)

但这对我来说真的很难看,因为我更喜欢在严格必要的时候使用动态分配.我错过了什么吗?

干杯!

c++ destructor

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

用于IIR过滤器的C++库

你知道一些实现IIR过滤器的C++库吗?我需要类似于Matlab的过滤器(B,A,X)功能.虽然没有必要,但我更倾向于实施IIR直接表格2.

c++ filter

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

为什么向量求和的rangev3实现比STD等效慢?

我正在考虑在我的库中使用rangev3。我喜欢rangev3的语法,但优先考虑的是性能。该库运行许多矢量乘法和加法运算,大多数长度为128个样本。我使用Google基准来评估例如两个向量的相加。Ranges版本比STD版本慢得多(对于较短的向量长度,其速度几乎慢10倍)。这有些令人惊讶,因为通常声称rangev3(以及C ++ 20中将来的std :: ranges)具有良好的性能。

我在这里如何使用rangev3是否存在问题?还是与编译器无法很好地展开rangev3代码有关?还是仅对于许多菊花链式操作才会显示rangev3的性能提升?

注意:output = rng1;由于向量长度是相同的,因此分配不应分配内存(我尝试使用range :: copy,但是它变慢了100倍)。我试图对向量A和B进行预初始化和随机化,但没有发现任何区别。我确实注意到,如果我在管道中有更多操作,则STL和ragesv3之间的差距会缩小,但仅适用于长向量(5个连续操作高于32000)。

下面是一个包含性能指标的独立示例。我在带有-O3标志的4核i7 MacBook Pro上运行C ++ 17 LLVM libc ++。

#include <range/v3/all.hpp>
#include "benchmark.h"

static void AddBenchmark(benchmark::State& state) {
  const size_t length = state.range(0);

  std::vector<double> B(length);
  std::vector<double> A(length);
  std::vector<double> output(length);

  while (state.KeepRunning()) {
    std::transform(A.begin( ), A.end( ), B.begin( ), output.begin(), std::plus<>( ));
    benchmark::ClobberMemory(); // Force output to be written to memory.
  }
}
BENCHMARK(AddBenchmark)->RangeMultiplier(8)->Range(1<<7, 1<<20);


static void AddRangesBenchmark(benchmark::State& state) {
  const size_t length = state.range(0);

  std::vector<double> B(length);
  std::vector<double> A(length); …
Run Code Online (Sandbox Code Playgroud)

c++ vector range-v3

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

Gitweb找不到存储库"没有找到这样的项目"

我的CentOs 5.5服务器上有一个正常运行的git存储库.我想使用gitweb为我的存储库提供Web用户界面.

我使用http://git-scm.com/book/ch4-6.html上的说明安装了gitweb ,我设法让我的apache服务器正确运行cgi.我将我的存储库放入/pub/git并使用该行创建了该gitweb.conf文件.不幸的是,我看不到我的存储库和网页显示消息"没有找到这样的项目",我用Google搜索没有成功./etc/$projectroot = '/pub/git';

我尝试将该行添加$projects_list = '/pub/git/projects.list';到该gitweb.conf文件中projects.list,并使用我的存储库名称创建该文件(例如repos1.git).没有什么变化.如果我把不存在的存储库的名称/pub/git,网页显示更受欢迎和调查的错误消息"404 - 没有找到项目".

请注意,apache用户可以访问所有文件和存储库.

我的内容/etc/gitweb.conf是:

$projectroot = '/pub/git';
$projects_list = '/pub/git/projects.list';
Run Code Online (Sandbox Code Playgroud)

谢谢!

git gitweb

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

不推荐的标题警告(C++)

我一直收到不赞成的标题警告:

#ifdef __DEPRECATED
#warning This file includes at least one deprecated or antiquated header. \
Please consider using one of the 32 headers found in section 17.4.1.2 of the \
C++ standard. Examples include substituting the <X> header for the <X.h> \
header for C++ includes, or <iostream> instead of the deprecated header \
<iostream.h>. To disable this warning use -Wno-deprecated.
#endif
Run Code Online (Sandbox Code Playgroud)

但是,我没有看到我的项目调用的任何已弃用的标头(包括我的库调用的标头).这些都是我加载头(或者,至少,我看到的): iostream math.h assert.h fstream vector time.h.

在第17.4.1.2节http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1905.pdf中,只有一个应该使用的标题列表.

1)是否有某个已弃用的列表?

2)关于如何离开预处理器的想法哪一个是他不喜欢的精确标题?

干杯!

c++ header deprecated

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