在谈论ifs的表现时,我们通常会谈论错误预测如何阻止管道.我看到的推荐解决方案是:
我找不到的是我们是否能尽早计算出病情,以便在可能的情况下提供帮助.所以,而不是:
... 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
这是我的第一个问题,也是我第一次无法通过环顾四周找到解决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)