标签: micro-optimization

负整数的C++优化

可以说我们有一个负整数说int a;

是否有更快的-a实现?

我必须对此进行一些按位操作吗?

c c++ optimization micro-optimization

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

Java,最昂贵的陈述?

Java编程语言中最昂贵的(字节码和cpu周期)语句是什么?

java optimization bytecode micro-optimization

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

计数到零,与计算长度相反 - 1

是否建议将小循环(如果可能)从长度 - 1减少到零,而不是计算长度 - 1?

1.)倒计时

for (int i = a.length - 1; i >= 0; i--) {
    if (a[i] == key) return i;
}
Run Code Online (Sandbox Code Playgroud)

2.)数数

for (int i = 0; i < a.length; i++) {
    if (a[i] == key) return i;
}
Run Code Online (Sandbox Code Playgroud)

第一个比第二个快一点(因为比较零更快)但在我看来更容易出错.此外,第一个可能无法通过JVM的未来改进进行优化.有什么想法吗?

java micro-optimization

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

在golang中旋转切片的有效方法

我需要一个函数来有效地反转golang中的切片.(我的具体需求是反转[]字节的前缀).

我查看了Effective Go中的示例,objdump -Sd并生成了大量的样板来检查数组索引.即使交换效率也太低.

reverse go micro-optimization

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

PHP中的Duff设备不可能吗?

我被告知duff设备不适用于PHP,因为交换机和案例结构的工作方式不同.我在php.net上发现这个duff devive,我的问题是这个设备有什么问题?或者我不明白duff设备?在我的汇编程序中,我可以使用简单的命令展开循环,当它编译时,我得到一个展开的循环.

<?php
$n = $ITERATIONS % 8;
while ($n--) $val++;
$n = (int)($ITERATIONS / 8);
while ($n--) {
   $val++;
   $val++;
   $val++;
   $val++;
   $val++;
   $val++;
   $val++;
   $val++;
}
?>
Run Code Online (Sandbox Code Playgroud)

php micro-optimization duffs-device

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

用指针替换循环索引器有什么好处吗?

假设:

const int n = bigNumber;
float* f = someData;
Run Code Online (Sandbox Code Playgroud)

转换是否有任何意义

for (int i = 0; i < n; i++)
{
    f[i] += 1;
}
Run Code Online (Sandbox Code Playgroud)

float* lastF = f + n;
for (float* i = f; i < lastF; i++)
{
    *i += 1;
}
Run Code Online (Sandbox Code Playgroud)

天真地看着这个,似乎我为每次迭代(the f[i])保存了一个加法运算.

当然,这假设我对循环内的索引器的值没有兴趣.

  1. 我是否正确的心态?
  2. 如果是这样,我的编译器是否足够聪明,可以单独执行此操作(假设启用了所有优化标志)?

我会检查拆卸,但我读这些很糟糕.

c++ optimization micro-optimization visual-c++

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

如果条件来自简单功能,则删除

我需要从以下两个函数中删除尽可能多的条件:

inline int inc_with_1bit_saturation(int counter)
{
    if (counter == 1)
        return --counter;
    return ++counter;
}

void branch_prediction_1bit_saturation(int* input, int* output, int size)
{
    int counter = 0;

    for (int i = 0; i < size; ++i)
    {
        if (input[i] != counter)
        {
            counter = inc_with_1bit_saturation(counter);
            output[i] = 0;
        }
        else output[i] = 1;
    }
}
Run Code Online (Sandbox Code Playgroud)

我怎么能这样做,什么if分支是绝对必要的,不能被删除,哪一个可以被简单的按位运算或类似的东西取代?

更新1

根据User JSF的精彩提示,代码现在看起来像这样:

void branch_prediction_1bit_saturation(int* input, int* output, int size)
{
    int counter = 0;

    for (int i = 0; i …
Run Code Online (Sandbox Code Playgroud)

c++ optimization micro-optimization

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

MMX寄存器速度与堆栈的无符号整数存储

我正在考虑在纯装配中实现SHA3.SHA3​​的内部状态为17个64位无符号整数,但由于它使用了转换,如果寄存器中有44个这样的整数,则可以实现最佳情况.另外还有一个临时寄存器.在这种情况下,我将能够在寄存器中进行整个转换.

但这是不现实的,优化可能一直到甚至只有几个寄存器.不过,根据这个问题的答案,更多可能更好.

我想至少使用MMX寄存器进行快速存储,即使我需要交换到其他寄存器进行计算.但我担心这是古建筑.

在MMX寄存器和RAX之间的数据传输是否比在堆栈上索引u64并从可能是L1缓存中访问它们更快?或者即便如此,除了我应该注意的速度考虑之外,还有隐藏的陷阱吗?我对一般情况感兴趣,所以即使我的计算机上的一个比另一个更快,它仍然可能是不确定的.

x86 assembly cpu-registers micro-optimization mmx

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

C ++:if内部循环对性能的影响

我需要遍历大量(2D)数据,并且仅有时处理特殊情况。对于我的应用程序来说,速度是最关键的因素。

(我)很快想到的选择是:

选项A:

  • 更具可读性
  • 由于循环内的比较而导致性能下降?
void ifInLoop(bool specialCase, MyClass &acc) {
  for (auto i = 0; i < n; ++i) {
    for (auto j = 0; j < n; ++j) {
      if (specialCase) {
        acc.foo();
      } else {
        acc.bar();
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

选项B:

  • 代码重复
void loopsInIf(bool specialCase, MyClass &acc) {
  if (specialCase) {
    for (auto i = 0; i < n; ++i) {
      for (auto j = 0; j < n; ++j) {
        acc.foo();
      }
    }
  } else { …
Run Code Online (Sandbox Code Playgroud)

c++ premature-optimization micro-optimization

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

x86乘法3:3:IMUL vs SHL + ADD

我在x86-64汇编中开发了一个程序,该程序需要通过相同的操作进行多次迭代:

IMUL rdx, 3   # rdx is always different
Run Code Online (Sandbox Code Playgroud)

但是,我需要使运行时更快,因此我从上面想到了对该特定行的优化:

MOV rcx, rdx
SHL rdx, 1
ADD rdx, rcx
Run Code Online (Sandbox Code Playgroud)

现在我问你们:这种修改会改善程序的运行时间(减少时钟),还是我应该坚持使用该IMUL命令?

x86 assembly x86-64 intel micro-optimization

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