From abefa6b75b7ba56c0a5d1d510b125f878181c3ee Mon Sep 17 00:00:00 2001 From: WangYuHang-cmd <377374481@qq.com> Date: Wed, 15 Mar 2023 16:50:01 +0800 Subject: [PATCH 1/3] Modified fast --- CMakeLists.txt | 8 ++++ README.md | 37 +++++++++++++++ main.cpp | 123 +++++++++++++++++++++++++++++++++++-------------- 3 files changed, 133 insertions(+), 35 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 29b152c..598ef10 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,6 +2,14 @@ cmake_minimum_required(VERSION 3.12) project(hellocmake LANGUAGES CXX) set(CMAKE_CXX_STANDARD 17) +set(CMAKE_BUILD_TYPE Release) +set(CMAKE_CXX_FLAGS_DEBUG"-g") +set(CMAKE_CXX_FLAGS_RELEASE"-O3") + +# target_compile_options(testbench PUBLIC -ffast-math -march=native) +# find_package(OpenMP REQUIRED) +# target_link_libraries(testbench PUBLIC OpenMP::OpenMP_CXX) + if (NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE Release) endif() diff --git a/README.md b/README.md index 18caa7d..31d06eb 100644 --- a/README.md +++ b/README.md @@ -29,3 +29,40 @@ - 不允许做算法复杂度优化 - 可以针对编译器和平台优化,这次不要求跨平台 - 可以用 xmmintrin.h,如果你觉得编译器靠不住的话 + +初始数据: + +Initial energy: -8.571526 +Final energy: -8.511777 +Time elapsed: 6646 ms + +编译指令加入O3优化: + +Initial energy: -8.571526 +Final energy: -8.511777 +Time elapsed: 1737 ms + +将结构体OOP改成DOP + +Initial energy: -8.571526 +Final energy: -8.511777 +Time elapsed: 1734 ms + +加入编译指令 + +``` +#pragma g++ ivdep +#pragma g++ unroll 4 +``` + +循环展开后: + +Initial energy: -8.571302 +Final energy: -8.511518 +Time elapsed: 1587 ms + +加上暴力火车头: + +Initial energy: -8.571527 +Final energy: -8.511723 +Time elapsed: 1175 ms diff --git a/main.cpp b/main.cpp index cf6369b..67a2709 100644 --- a/main.cpp +++ b/main.cpp @@ -4,6 +4,57 @@ #include #include +#include //mmx +#include //sse +#include //sse2 +#include //sse3 + +#pragma GCC target("avx") +#pragma GCC optimize(3) +#pragma GCC optimize("Ofast") +#pragma GCC optimize("inline") +#pragma GCC optimize("-fgcse") +#pragma GCC optimize("-fgcse-lm") +#pragma GCC optimize("-fipa-sra") +#pragma GCC optimize("-ftree-pre") +#pragma GCC optimize("-ftree-vrp") +#pragma GCC optimize("-fpeephole2") +#pragma GCC optimize("-ffast-math") +#pragma GCC optimize("-fsched-spec") +#pragma GCC optimize("unroll-loops") +#pragma GCC optimize("-falign-jumps") +#pragma GCC optimize("-falign-loops") +#pragma GCC optimize("-falign-labels") +#pragma GCC optimize("-fdevirtualize") +#pragma GCC optimize("-fcaller-saves") +#pragma GCC optimize("-fcrossjumping") +#pragma GCC optimize("-fthread-jumps") +#pragma GCC optimize("-funroll-loops") +#pragma GCC optimize("-freorder-blocks") +#pragma GCC optimize("-fschedule-insns") +#pragma GCC optimize("inline-functions") +#pragma GCC optimize("-ftree-tail-merge") +#pragma GCC optimize("-fschedule-insns2") +#pragma GCC optimize("-fstrict-aliasing") +#pragma GCC optimize("-falign-functions") +#pragma GCC optimize("-fcse-follow-jumps") +#pragma GCC optimize("-fsched-interblock") +#pragma GCC optimize("-fpartial-inlining") +#pragma GCC optimize("no-stack-protector") +#pragma GCC optimize("-freorder-functions") +#pragma GCC optimize("-findirect-inlining") +#pragma GCC optimize("-fhoist-adjacent-loads") +#pragma GCC optimize("-frerun-cse-after-loop") +#pragma GCC optimize("inline-small-functions") +#pragma GCC optimize("-finline-small-functions") +#pragma GCC optimize("-ftree-switch-conversion") +#pragma GCC optimize("-foptimize-sibling-calls") +#pragma GCC optimize("-fexpensive-optimizations") +#pragma GCC optimize("inline-functions-called-once") +#pragma GCC optimize("-fdelete-null-pointer-checks") +#pragma G++ ivdep +#pragma G++ unroll 4 + float frand() { return (float)rand() / RAND_MAX * 2 - 1; } @@ -11,56 +62,58 @@ float frand() { struct Star { float px, py, pz; float vx, vy, vz; - float mass; -}; - -std::vector stars; + float mass, mass1; + Star(float _px,float _py,float _pz,float _vx,float _vy,float _vz,float _mass): + px(_px),py(_py),pz(_pz),vx(_vx),vy(_vy),vz(_vz),mass(_mass){} + Star() {} +}stars[48]; void init() { - for (int i = 0; i < 48; i++) { - stars.push_back({ - frand(), frand(), frand(), - frand(), frand(), frand(), - frand() + 1, - }); + for (uint32_t i = 0; i < 48; i++) { + stars[i]= Star( frand(), frand(), frand(), frand(), frand(), frand(), frand() + 1); } } -float G = 0.001; -float eps = 0.001; -float dt = 0.01; +constexpr float G = 0.001; +constexpr float eps = 0.001; +constexpr float dt = 0.01; void step() { - for (auto &star: stars) { - for (auto &other: stars) { - float dx = other.px - star.px; - float dy = other.py - star.py; - float dz = other.pz - star.pz; - float d2 = dx * dx + dy * dy + dz * dz + eps * eps; + for (size_t i=0;i<(uint32_t)48;++i) { + for (size_t j=0;j<(uint32_t)48;++j) { + #pragma opm simd + float dx = stars[j].px - stars[i].px; + float dy = stars[j].py - stars[i].py; + float dz = stars[j].pz - stars[i].pz; + float d2 = dx * dx + dy * dy + dz * dz + (eps * eps); d2 *= sqrt(d2); - star.vx += dx * other.mass * G * dt / d2; - star.vy += dy * other.mass * G * dt / d2; - star.vz += dz * other.mass * G * dt / d2; + d2 = stars[j].mass * G * dt / d2; + stars[i].vx += dx * d2; + stars[i].vy += dy * d2; + stars[i].vz += dz * d2; } } - for (auto &star: stars) { - star.px += star.vx * dt; - star.py += star.vy * dt; - star.pz += star.vz * dt; + for(size_t i=0;i<48; ++i){ + #pragma opm simd + stars[i].px += stars[i].vx * dt; + stars[i].py += stars[i].vy * dt; + stars[i].pz += stars[i].vz * dt; } } float calc() { float energy = 0; - for (auto &star: stars) { - float v2 = star.vx * star.vx + star.vy * star.vy + star.vz * star.vz; - energy += star.mass * v2 / 2; - for (auto &other: stars) { - float dx = other.px - star.px; - float dy = other.py - star.py; - float dz = other.pz - star.pz; - float d2 = dx * dx + dy * dy + dz * dz + eps * eps; - energy -= other.mass * star.mass * G / sqrt(d2) / 2; + for (size_t i=0;i<48;++i) { + #pragma opm simd + float v2 = stars[i].vx * stars[i].vx + stars[i].vy * stars[i].vy + stars[i].vz * stars[i].vz; + energy += stars[i].mass * v2 * 0.5; + for (size_t j=0;j<48;++j) { + #pragma opm simd + float dx = stars[j].px - stars[i].px; + float dy = stars[j].py - stars[i].py; + float dz = stars[j].pz - stars[i].pz; + float d2 = (dx * dx + dy * dy + dz * dz + (eps * eps)); + energy -= stars[j].mass * stars[i].mass * 0.0005 / sqrt(d2); } } return energy; From 3e87fbf5f685f16a59b5490a65d3b878c8d4bb75 Mon Sep 17 00:00:00 2001 From: WangYuHang-cmd <377374481@qq.com> Date: Wed, 15 Mar 2023 17:19:20 +0800 Subject: [PATCH 2/3] Modified fast --- .vscode/settings.json | 6 +++ README.md | 15 +++++-- initial.cpp | 88 ++++++++++++++++++++++++++++++++++++++++++ initial.exe | Bin 0 -> 188558 bytes main.cpp | 58 ++++++++++++++-------------- main.exe | Bin 0 -> 89774 bytes rbq.bat | 6 +++ 7 files changed, 139 insertions(+), 34 deletions(-) create mode 100644 .vscode/settings.json create mode 100644 initial.cpp create mode 100644 initial.exe create mode 100644 main.exe create mode 100644 rbq.bat diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..4d2541f --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,6 @@ +{ + "files.associations": { + "chrono": "cpp", + "cmath": "cpp" + } +} \ No newline at end of file diff --git a/README.md b/README.md index 31d06eb..1ea699a 100644 --- a/README.md +++ b/README.md @@ -51,12 +51,10 @@ Time elapsed: 1734 ms 加入编译指令 ``` -#pragma g++ ivdep -#pragma g++ unroll 4 +#pragma GCC ivdep +#pragma GCC unroll 4 ``` -循环展开后: - Initial energy: -8.571302 Final energy: -8.511518 Time elapsed: 1587 ms @@ -66,3 +64,12 @@ Time elapsed: 1587 ms Initial energy: -8.571527 Final energy: -8.511723 Time elapsed: 1175 ms + + +加入编译指令: + +`-ffast-math -march=native` + +Initial energy: -8.571527 +Final energy: -8.511747 +Time elapsed: 210 ms diff --git a/initial.cpp b/initial.cpp new file mode 100644 index 0000000..3298423 --- /dev/null +++ b/initial.cpp @@ -0,0 +1,88 @@ +#include +#include +#include +#include +#include + +float frand() { + return (float)rand() / RAND_MAX * 2 - 1; +} + +struct Star { + float px, py, pz; + float vx, vy, vz; + float mass; +}; + +std::vector stars; + +void init() { + for (int i = 0; i < 48; i++) { + stars.push_back({ + frand(), frand(), frand(), + frand(), frand(), frand(), + frand() + 1, + }); + } +} + +float G = 0.001; +float eps = 0.001; +float dt = 0.01; + +void step() { + for (auto &star: stars) { + for (auto &other: stars) { + float dx = other.px - star.px; + float dy = other.py - star.py; + float dz = other.pz - star.pz; + float d2 = dx * dx + dy * dy + dz * dz + eps * eps; + d2 *= sqrt(d2); + star.vx += dx * other.mass * G * dt / d2; + star.vy += dy * other.mass * G * dt / d2; + star.vz += dz * other.mass * G * dt / d2; + } + } + for (auto &star: stars) { + star.px += star.vx * dt; + star.py += star.vy * dt; + star.pz += star.vz * dt; + } +} + +float calc() { + float energy = 0; + for (auto &star: stars) { + float v2 = star.vx * star.vx + star.vy * star.vy + star.vz * star.vz; + energy += star.mass * v2 / 2; + for (auto &other: stars) { + float dx = other.px - star.px; + float dy = other.py - star.py; + float dz = other.pz - star.pz; + float d2 = dx * dx + dy * dy + dz * dz + eps * eps; + energy -= other.mass * star.mass * G / sqrt(d2) / 2; + } + } + return energy; +} + +template +long benchmark(Func const &func) { + auto t0 = std::chrono::steady_clock::now(); + func(); + auto t1 = std::chrono::steady_clock::now(); + auto dt = std::chrono::duration_cast(t1 - t0); + return dt.count(); +} + +int main() { + init(); + printf("Initial energy: %f\n", calc()); + auto dt = benchmark([&] { + for (int i = 0; i < 100000; i++) + step(); + }); + printf("Final energy: %f\n", calc()); + printf("Time elapsed: %ld ms\n", dt); + return 0; +} \ No newline at end of file diff --git a/initial.exe b/initial.exe new file mode 100644 index 0000000000000000000000000000000000000000..b726876698928803d1bf61fb7453039c2f5c6f7d GIT binary patch literal 188558 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Π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 Dsz1b# literal 0 HcmV?d00001 diff --git a/main.cpp b/main.cpp index 67a2709..dd8e4e1 100644 --- a/main.cpp +++ b/main.cpp @@ -3,7 +3,7 @@ #include #include #include - +#include #include //mmx #include //sse #include //sse2 @@ -52,25 +52,21 @@ #pragma GCC optimize("-fexpensive-optimizations") #pragma GCC optimize("inline-functions-called-once") #pragma GCC optimize("-fdelete-null-pointer-checks") -#pragma G++ ivdep -#pragma G++ unroll 4 + float frand() { return (float)rand() / RAND_MAX * 2 - 1; } -struct Star { - float px, py, pz; - float vx, vy, vz; - float mass, mass1; - Star(float _px,float _py,float _pz,float _vx,float _vy,float _vz,float _mass): - px(_px),py(_py),pz(_pz),vx(_vx),vy(_vy),vz(_vz),mass(_mass){} - Star() {} -}stars[48]; +__declspec(align(16)) float px[48],py[48],pz[48]; +__declspec(align(16)) float vx[48],vy[48],vz[48]; +__declspec(align(16)) float mass[48]; void init() { for (uint32_t i = 0; i < 48; i++) { - stars[i]= Star( frand(), frand(), frand(), frand(), frand(), frand(), frand() + 1); + px[i] = frand();py[i]=frand();pz[i] = frand(); + vx[i] = frand();vy[i]=frand();vz[i]=frand(); + mass[i] = frand()+1; } } @@ -79,41 +75,43 @@ constexpr float eps = 0.001; constexpr float dt = 0.01; void step() { + float dx,dy,dz,d2; for (size_t i=0;i<(uint32_t)48;++i) { for (size_t j=0;j<(uint32_t)48;++j) { #pragma opm simd - float dx = stars[j].px - stars[i].px; - float dy = stars[j].py - stars[i].py; - float dz = stars[j].pz - stars[i].pz; - float d2 = dx * dx + dy * dy + dz * dz + (eps * eps); + dx = px[j] - px[i]; + dy = py[j] - py[i]; + dz = pz[j] - pz[i]; + d2 = dx * dx + dy * dy + dz * dz + (eps * eps); d2 *= sqrt(d2); - d2 = stars[j].mass * G * dt / d2; - stars[i].vx += dx * d2; - stars[i].vy += dy * d2; - stars[i].vz += dz * d2; + d2 = mass[j] * G * dt / d2; + vx[i] += dx * d2; + vy[i] += dy * d2; + vz[i] += dz * d2; } } for(size_t i=0;i<48; ++i){ #pragma opm simd - stars[i].px += stars[i].vx * dt; - stars[i].py += stars[i].vy * dt; - stars[i].pz += stars[i].vz * dt; + px[i] += vx[i] * dt; + py[i] += vy[i] * dt; + pz[i] += vz[i] * dt; } } float calc() { + float dx,dy,dz,d2; float energy = 0; for (size_t i=0;i<48;++i) { #pragma opm simd - float v2 = stars[i].vx * stars[i].vx + stars[i].vy * stars[i].vy + stars[i].vz * stars[i].vz; - energy += stars[i].mass * v2 * 0.5; + float v2 = vx[i] * vx[i] + vy[i] * vy[i] + vz[i] * vz[i]; + energy += mass[i] * v2 * 0.5; for (size_t j=0;j<48;++j) { #pragma opm simd - float dx = stars[j].px - stars[i].px; - float dy = stars[j].py - stars[i].py; - float dz = stars[j].pz - stars[i].pz; - float d2 = (dx * dx + dy * dy + dz * dz + (eps * eps)); - energy -= stars[j].mass * stars[i].mass * 0.0005 / sqrt(d2); + dx = px[j] - px[i]; + dy = py[j] - py[i]; + dz = pz[j] - pz[i]; + d2 = (dx * dx + dy * dy + dz * dz + (eps * eps)); + energy -= mass[j] * mass[i] * 0.0005 / sqrt(d2); } } return energy; diff --git a/main.exe b/main.exe new file mode 100644 index 0000000000000000000000000000000000000000..98ce0a74404e1f0da42683440664f6052790adc2 GIT binary patch literal 89774 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 I*vm5iAFs+}Q~&?~ literal 0 HcmV?d00001 diff --git a/rbq.bat b/rbq.bat new file mode 100644 index 0000000..0be8cc2 --- /dev/null +++ b/rbq.bat @@ -0,0 +1,6 @@ +g++ -o main.exe main.cpp -ffast-math -march=native -msse4.1 -O2 -fopenmp -O3 -std=c++17 +main.exe +main.exe +main.exe +main.exe +main.exe \ No newline at end of file From 1d0590ae66d6f4aa082311f44d4608d90bc07b3a Mon Sep 17 00:00:00 2001 From: WangYuHang-cmd <377374481@qq.com> Date: Fri, 17 Mar 2023 19:26:36 +0800 Subject: [PATCH 3/3] reviewed --- CMakeLists.txt | 2 +- main.cpp | 8 ++++---- main.exe | Bin 89774 -> 89774 bytes 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 598ef10..0647d87 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -14,4 +14,4 @@ if (NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE Release) endif() -add_executable(main main.cpp) + add_executable(main main.cpp) diff --git a/main.cpp b/main.cpp index dd8e4e1..fcc9d3e 100644 --- a/main.cpp +++ b/main.cpp @@ -78,7 +78,7 @@ void step() { float dx,dy,dz,d2; for (size_t i=0;i<(uint32_t)48;++i) { for (size_t j=0;j<(uint32_t)48;++j) { - #pragma opm simd + // #pragma omp simd dx = px[j] - px[i]; dy = py[j] - py[i]; dz = pz[j] - pz[i]; @@ -91,7 +91,7 @@ void step() { } } for(size_t i=0;i<48; ++i){ - #pragma opm simd + // #pragma omp simd px[i] += vx[i] * dt; py[i] += vy[i] * dt; pz[i] += vz[i] * dt; @@ -102,11 +102,11 @@ float calc() { float dx,dy,dz,d2; float energy = 0; for (size_t i=0;i<48;++i) { - #pragma opm simd + // #pragma omp simd float v2 = vx[i] * vx[i] + vy[i] * vy[i] + vz[i] * vz[i]; energy += mass[i] * v2 * 0.5; for (size_t j=0;j<48;++j) { - #pragma opm simd + // #pragma omp simd dx = px[j] - px[i]; dy = py[j] - py[i]; dz = pz[j] - pz[i]; diff --git a/main.exe b/main.exe index 98ce0a74404e1f0da42683440664f6052790adc2..c7da8a1032efc470819eab710ff25d777b2ff693 100644 GIT binary patch delta 25 hcmZ3tmv!A<)(IU