C++20 可能还是不太可能?
C++20 Likely and UnLikely?
我正在阅读 https://iq.opengenus.org/cpp-likely-and-unlikely-attributes/,但我 understand/agree 很少阅读。
在下面的代码中:
void doModulus( vector<int> &vec , int mod ){
// here the value of mod we are passing is 224, vec is of size 1024 holding values in [1,255]
for( int i = 0 ; i<vec.size() ; i++ )
{
if( vec[i] >= mod ) [[unlikely]]{
// so we are prioritizing else statement here
vec[i] = vec[i] % mod ;
}else {
vec[i] = vec[i] ;
}
}
}
如果我们编写 else 代码 [[likely]]
或者这会在后台自动发生,这是否重要或有什么不同,就好像一侧可能是另一侧不是? (虽然我希望它是如果一方不太可能那么另一方(如果有可能的话)很有可能。
- 提出了以下声明:
% operation is a computationally heavy operation for cpu , so let's
try to optimize our code.
虽然“优化”指的是添加 if-else 条件,但我使用 chrono
测试了代码,似乎没有 if-else 时执行时间快了 2-3 倍...
另外我不明白为什么 % 很重,它只是关于读取数字的底部位。
does it matter or make any difference if we make the else code [[likely]] or this happens automatically in background as if one side is likely then the other side isn't?
C++ 标准说的可能只是推荐的做法和示例。参见 [dcl.attr.likelihood]。因此,它们的实际使用方式取决于实现。
虽然推荐的做法和示例暗示只需要一个标记,并且观察到差异的编译器似乎暗示这作为嗯
Plus I don't see why % is heavy, it's just about reading bottom bits of number.
仅适用于二的幂。但是应该知道在编译时是2的幂。对于已知的非二次方常数 (Why does GCC use multiplication by a strange number in implementing integer division?),还有一种方法可以使此操作更便宜。
运行时值重,就是除法。
由于不断传播,优化器可能会知道某个值。然后应用优化。
我正在阅读 https://iq.opengenus.org/cpp-likely-and-unlikely-attributes/,但我 understand/agree 很少阅读。
在下面的代码中:
void doModulus( vector<int> &vec , int mod ){ // here the value of mod we are passing is 224, vec is of size 1024 holding values in [1,255] for( int i = 0 ; i<vec.size() ; i++ ) { if( vec[i] >= mod ) [[unlikely]]{ // so we are prioritizing else statement here vec[i] = vec[i] % mod ; }else { vec[i] = vec[i] ; } } }
如果我们编写 else 代码 [[likely]]
或者这会在后台自动发生,这是否重要或有什么不同,就好像一侧可能是另一侧不是? (虽然我希望它是如果一方不太可能那么另一方(如果有可能的话)很有可能。
- 提出了以下声明:
% operation is a computationally heavy operation for cpu , so let's try to optimize our code.
虽然“优化”指的是添加 if-else 条件,但我使用 chrono
测试了代码,似乎没有 if-else 时执行时间快了 2-3 倍...
另外我不明白为什么 % 很重,它只是关于读取数字的底部位。
does it matter or make any difference if we make the else code [[likely]] or this happens automatically in background as if one side is likely then the other side isn't?
C++ 标准说的可能只是推荐的做法和示例。参见 [dcl.attr.likelihood]。因此,它们的实际使用方式取决于实现。
虽然推荐的做法和示例暗示只需要一个标记,并且观察到差异的编译器似乎暗示这作为嗯
Plus I don't see why % is heavy, it's just about reading bottom bits of number.
仅适用于二的幂。但是应该知道在编译时是2的幂。对于已知的非二次方常数 (Why does GCC use multiplication by a strange number in implementing integer division?),还有一种方法可以使此操作更便宜。
运行时值重,就是除法。
由于不断传播,优化器可能会知道某个值。然后应用优化。