Optimization 加速循环

Optimization 加速循环,optimization,rust,Optimization,Rust,我有以下代码: for chunk in imagebuf.chunks_mut(4) { let temp = chunk[0]; chunk[0] = chunk[2]; chunk[2] = temp; } 对于40000个u8s数组,在我的机器上大约需要2.5毫秒,使用cargo build--release编译 下面的C++代码为精确的相同数据花费大约100美元(通过实现它并使用FFI来调用它,从RIST调用):< /P> 我想应该有可能加快RIST实现,以达

我有以下代码:

for chunk in imagebuf.chunks_mut(4) {
    let temp = chunk[0];
    chunk[0] = chunk[2];
    chunk[2] = temp;
}
对于40000个
u8
s数组,在我的机器上大约需要2.5毫秒,使用
cargo build--release
编译

下面的C++代码为精确的相同数据花费大约100美元(通过实现它并使用FFI来调用它,从RIST调用):< /P> <>我想应该有可能加快RIST实现,以达到与C++版本一样快的速度。p>


锈程序使用<代码>货物-< < />代码>,C++程序不带任何优化标志。


有什么提示吗?

我无法重现您得到的时间安排。您可能在测量时有错误(或者我可能想用指针来使用不安全代码(基本上是C++代码),而不是使用当前的< Iterator >代码>更安全的解决方案(防止指针超载和随之出现的分段错误)。而且更直观,但增加了更多的开销。您知道
std::mem::swap
?此外,您是否尝试过使用以避免索引(以防边界检查不被省略)你检查过花费在这个循环中的时间吗?我不能重现你经历的时间。在我的机器上,锈代码在大约30秒的时间内执行,就像C++代码所做的那样。(编辑:我决定写一个关于这个问题的答案)“锈程序是用货物释放的”。我猜你也用cargo run--release运行了它?rnstlr:我可能真的犯了那个错误!我觉得自己像个白痴:-)谢谢你的提示!伙计,回答得太好了!我运行了您的代码(Intel Xeon E3-1575M v5),发现:rust:Duration{secs:0,nanos:21839}cpp:Duration{secs:0,nanos:6576}(有一些变化)改变了执行顺序,所以cpp代码先执行,似乎稍微改变了结果。C版本的速度似乎是平均速度的两倍,与我一开始得到的速度相差甚远。我不愿意承认,这可能是因为我不小心运行了错误的二进制文件(未优化的)。非常感谢您的详细调查!在学习Rust时,我真正体会到的是Rust社区中令人愉快的语调。谢谢@瑞典avl_非常欢迎:)(我仍然想知道为什么LLVM不能生成更好的代码,尽管…)
for(;imagebuf!=endbuf;imagebuf+=4) {
    char c=imagebuf[0];
    imagebuf[0]=imagebuf[2];
    imagebuf[2]=c;
}