小编Jib*_*art的帖子

通过计算条件早期避免拖延管道

在谈论ifs的表现时,我们通常会谈论错误预测如何阻止管道.我看到的推荐解决方案是:

  1. 相信通常有一个结果的条件的分支预测器; 要么
  2. 如果合理可能的话,避免使用一点点魔法分支; 要么
  3. 有条件的移动尽可能.

我找不到的是我们是否能尽早计算出病情,以便在可能的情况下提供帮助.所以,而不是:

... work
if (a > b) {
    ... more work
}
Run Code Online (Sandbox Code Playgroud)

做这样的事情:

bool aGreaterThanB = a > b;
... work
if (aGreaterThanB) {
    ... more work
}
Run Code Online (Sandbox Code Playgroud)

这样的事情可能会完全避免这个条件的停顿(取决于管道的长度和我们可以放在bool和if之间的工作量)?这并不一定是因为我写的,但有什么办法,以评估条件语句早,所以CPU不必尝试和预测的分支

此外,如果这有帮助,编译器可能会做什么呢?

language-agnostic performance cpu-architecture compiler-optimization branch-prediction

7
推荐指数
2
解决办法
550
查看次数

MinGW C++:在'/'标记之前预期的primary-expression

这是我的第一个问题,也是我第一次无法通过环顾四周找到解决C++问题的解决方案.我在这个领域相对缺乏经验,并且不确定什么是相关的,所以我会发布我认为可能有用的任何内容.

我正在使用SDL来创建跨平台应用程序.我在Windows 7(64位)上使用MinGW 4.6.1,在另一台计算机上使用Ubuntu.

它在Ubuntu(使用g ++)上编译没有任何抱怨,但是当我尝试使用g ++在我的Windows机器上编译时出现以下错误:

...matrix.cpp:77:17: error: expected primary-expression before '/' token
...matrix.cpp:78:11: error: expected primary-expression before '/' token
...matrix.cpp:79:17: error: expected primary-expression before ')' token
...matrix.cpp:79:28: error: expected primary-expression before ')' token
...matrix.cpp:80:19: error: expected primary-expression before ')' token
...matrix.cpp:80:30: error: expected primary-expression before ')' token
Run Code Online (Sandbox Code Playgroud)

据我所知,函数没有什么特别之处(特别是因为它在我的Ubuntu设置上编译得很好):

Matrix *Matrix::projection(float near, float far, float top, float right) {
    x1 = near/right;
    y2 = near/top;
    z3 = -(far+near)/(far-near);
    z4 = -(2*far*near)/(far-near);
    w3 = -1.0;
    y1 = z1 = w1 …
Run Code Online (Sandbox Code Playgroud)

c++ windows g++ mingw32

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