HW04
作业描述
加速程序
思路
对step()加速。首先改写成SOA结构,并用std::array
替换std::vector
constexpr size_t N = 48
using ArrF = std::array<float, N>;
struct Star {
ArrF px, py, pz;
ArrF vx, vy, vz;
ArrF mass;
};
Star stars;
提取运算中不变量,提前计算出结果。除法用乘法代替。然后为了方便编译器优化,把复杂的循环体拆成多个执行简单计算的循环体。
为了减小访问内存的开销,用临时变量记录累加值。
数组访问全部改为size_t类型。
void step() {
ArrF dx, dy, dz, d2;
for (size_t i = 0; i < N; ++i) {
for (size_t j = 0; j < N; ++j) {