简单的 C 代码,只有一个双精度加法。
void test(double *a, double *b, long n) {
for (long j = 0; j < n; j++)
for (long i = 0; i < n; i++) {
b[i] = b[i] + a[j];
}
}
在编译器资源管理器中获取 ASM 结果:https ://godbolt.org/z/tJ-d39
有一个addpd
和两个addsd
。两者都是双精度相关的。
另一个类似的 rust 代码,得到了更多的双精度添加工具:https ://godbolt.org/z/c49Wuh
pub unsafe fn test(a: &mut [f64], b: &mut [f64], n: usize) {
for j in 0..n {
for i in 0..n {
*b.get_unchecked_mut(i) = *b.get_unchecked_mut(i) + *a.get_unchecked_mut(j);
}
}
}