From 1c31a0316157fa30896156211b9a337bee7965e1 Mon Sep 17 00:00:00 2001 From: xu-kq <379030017@qq.com> Date: Wed, 12 Jan 2022 01:22:04 +0800 Subject: [PATCH 1/3] hw04 --- CMakeLists.txt | 4 ++++ main.cpp | 29 +++++++++++++++++++---------- main.exe | Bin 0 -> 49744 bytes 3 files changed, 23 insertions(+), 10 deletions(-) create mode 100644 main.exe diff --git a/CMakeLists.txt b/CMakeLists.txt index 29b152c..4f3b4c2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,3 +7,7 @@ if (NOT CMAKE_BUILD_TYPE) endif() add_executable(main main.cpp) + +find_package(OpenMP REQUIRED) +target_link_libraries(testbench PUBLIC OpenMP::OpenMP_CXX) +target_compile_options(testbench PUBLIC -ffast-math -march=native) \ No newline at end of file diff --git a/main.cpp b/main.cpp index cf6369b..21ee1be 100644 --- a/main.cpp +++ b/main.cpp @@ -12,6 +12,7 @@ struct Star { float px, py, pz; float vx, vy, vz; float mass; + // char padding[12]; }; std::vector stars; @@ -26,22 +27,29 @@ void init() { } } -float G = 0.001; -float eps = 0.001; -float dt = 0.01; +float G = 0.001f; +float eps = 0.001f; +float dt = 0.01f; void step() { + float eps2 = eps * eps; for (auto &star: stars) { + float tmp_vx = 0, tmp_vy = 0, tmp_vz = 0; + float factor = G * dt; 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; + float d2 = dx * dx + dy * dy + dz * dz + eps2; + d2 *= std::sqrt(d2); + float div = 1.0f / d2; + tmp_vx += dx * other.mass * factor * div; + tmp_vy += dy * other.mass * factor * div; + tmp_vz += dz * other.mass * factor * div; } + star.vx += tmp_vx; + star.vy += tmp_vy; + star.vz += tmp_vz; } for (auto &star: stars) { star.px += star.vx * dt; @@ -52,6 +60,7 @@ void step() { float calc() { float energy = 0; + float eps2 = eps * eps; for (auto &star: stars) { float v2 = star.vx * star.vx + star.vy * star.vy + star.vz * star.vz; energy += star.mass * v2 / 2; @@ -59,8 +68,8 @@ float calc() { 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; + float d2 = dx * dx + dy * dy + dz * dz + eps2; + energy -= other.mass * star.mass * G / std::sqrt(d2) / 2; } } return energy; diff --git a/main.exe b/main.exe new file mode 100644 index 0000000000000000000000000000000000000000..cb2e3ef902cd5f5a36cc30e65a89f1210db02817 GIT binary patch literal 49744 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 W Date: Wed, 12 Jan 2022 01:28:03 +0800 Subject: [PATCH 2/3] hw04_revise --- main.cpp | 2 +- main.exe | Bin 49744 -> 49744 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/main.cpp b/main.cpp index 21ee1be..08dfa17 100644 --- a/main.cpp +++ b/main.cpp @@ -12,7 +12,7 @@ struct Star { float px, py, pz; float vx, vy, vz; float mass; - // char padding[12]; + char padding[12]; }; std::vector stars; diff --git a/main.exe b/main.exe index cb2e3ef902cd5f5a36cc30e65a89f1210db02817..9983bf34ad7a0b1221b38ccd4abee01de1ace2b9 100644 GIT binary patch delta 3275 zcmZ`+4OElY8NT;R0s#U912ziCPof6-*9K76`UTK1aV;te9;rYrP7YZA0@7|4+K4lx z{PmUDxvJp+Dxx6E+Ue9Tg5Ydrvcp+rSU1%Ee4A{7wnr;v*?WUQ({uWrbKm>j=f3~% zdvCty~On%tRFf`i{Wj$i>6t>ql-Bj2U>9^y#ZC?1lkN2#Y$?1 zA#pri2QrD?$1j?Y%VIUbN0^uf`H~>+>nJFf%%q>fLCNw!9`}tSVuAN0q|rZvCnm94 z*fPB>5xo7mpcHnoGCeXiY}}KSt!~f@6(Z{L-1K^byB;n5~CF;o0iuurdf;o~rWE zp2sU~J&&_(J@+@*dT!?oF6=7#$aqn+@Dtz49J}3)LP6@ki`B+U()HbIvevFX7l$b_ zj;yFIRx9t$!Z^InV*QBevgyAMT8uVLdXpOC^W8It5)yBl+`IRnO^BIG2s-24jOprm zl!Z3u*)H9NgHoADDR_d}D@+t5d<7jihYDRVfU{aS3=eVE2ya55EKC$7tc4}A;HbF8 z5)HFaIq*Nb-4vxh%Q7mgLIc=N>Asai2pcc0Sid3nm2PVt3UXc#tybSVG%+KYC&qER zA*}L-L1y!%B&Md z(uxE65Ho5ukJ;ItNRjnMwyqR&nD`P7SqHM)#Z5Tv{d(0y9 zYO(2FL>D%;zo~yp9ldVwG8@#qBWVv>Ds3e(DCl2p2+*LVav57NEs0D^qzDUO+9@^_ zNsX7HSgc)QX2;)@sg`0=a0+4vM+n1gm~p|>+&#}cLWfBFe^|TkL{E!s8st;{>lJ*j zb3SWKU$R(!-1I5%LorA|1btJKe(fkgrww@yKh+QHwFnRak!^4jQxxv>vW%&nh4GPuWEe?62y0GKzz@ z9!mH*1zQ3S;v^;AYzZVf}tkJ0?Nhj>~An1HC1U}G7X%w{RLTC>3=oZt{ zK$9cseuz$9OwT}JvYry?OkRQ)!dP+&JrCNH5N@Om)~0Nt2Dp&&GED{V)CIHxbg7A) z&<<~=&SUygx6)riz|t(--m+AWx<6bRiA=Ya#&W~wVA`@6Y60D{^?2zXT9zeQVYAz> z!3+98@Yk!kK^rX6za&YzXt)1?r3PB`bLsD)Pp{&JyWqZl9u-4yS}c7YewG$U)1WZz zWp1z+{+Jey8#mKZs2sw6dhK`1#ZvdUSv(mI=B<9K9?<$YH>)^P#!(IUtxfc{V2M^> zLRqPjt?@~1^u27ky9RH(RcanO-wJ`+5^rltc59F?J7mf^L47_b0tt(x@remc%{+(HPqFUD5PIYwE6P?o?yVdP~7ki?yhtlj17)ojbHV5H+fB zP_jycQ|#m`dGauq7>66VpEAn{;`|Jr^dormkKo}hc=;0p9EoQ~-tjnDDt^GB%USzK=daN z`>u*^gVpaA(K7fG(h7*IF5>E>FkBr@>)>3q3VY(84l1hAbG$ch%&dVkZN zNS@ru;}q_PHFbIgKkbJ&fsVQ&JWzr4MN|pDLK+GW>c{a6-Fxr4B-0=H;T|ZVqsAR# z8ayEg7D3GZGhCj(BLjKh)u5kE@Du83+A~Gi$y3Nv2X-~+xs2H;rh+>SMdkhTo)y}M zLUs7*^Hj}m5E*ts+7OAuPqL>xA2TTzcDaR}Fq7rj+V|_7?(C8} zta@%Vep0E3I0YR2H5K^5!)eHQ=dg-qW7C8*%{fBpahPk-b22a3W(jxa=Q|X@7)*x_ zi@U^Ce8`f<7}br-C=W%ADw<=hZG3|&M)8a9X)N2(GbIEz=@n&;=5}`RfCDdS($3!O zf_q5_dCg&$V87>X+EGw|VV!|%OW}(*1vAb6NZl=K8y)HWubqDW2b5{q{MbTo|E$S-LxMj+O?SI1s%IFp`9J9 wMgG>IRcwc>&LAfVOFj~&r0K?RU*o+J> z67w*S-HtIK` z6PM5l4TVv909WuADH!t-yapf3Q%D0`mWPsZcqmWtGjc}e%Vf|gChC#~G+l15si})V zZ53|2%F&~v?sKqOp<%VLU<-_ZLyDbhU1z`ACLqavfW+DZ>HeAIIqdR}8>Z{Llf9&` zvp;xsFOubtku2$hYyKnRbshIg8#7TLm=bm7W6v731ZPrJnSGvh4_)_wCZN&JW90!{ z2+)^3@9dxL?(ENYcYc@a?!33?_QVV8PCD9j6R!kSED}W#g>>AXrJSQfk<&hZ?%8Ba zlA|ZJ%Fcy!n=z7PXBHR2tC4DXn-nJGpH!_ZAqJ4D5UAs~Y`ITqgP1Zfe`p6GMWd%>D3T;k% z%H3|3Z?7^FXGlej>v*stvh13pC*EnIxiH3&wmx>b`_!ttCoxx}iF-}pJJa@X{z2Q_ zm`AK2?Q_hr6X$Mqm3@o{(cun7us(Q9r%-qsIcQ$nohs)RY0P!LZ%`?AhmOBZ`s~rp zSU%dhLdq9P%bY6|e4)a*Ldh2@oh#IQq1w43#5qUH7lvT|QMInZy>3j^rb)Vr%XS5? z?*3?w|pnw@k`i z+CRA%N|9R^i%x0(X~YH1?L7YB0xX-_?SyuvqbEZ6*Iz_Yc;in^Z(|hXiAiY}-{) zR6^Tit!#?Q$hu*RalA}r@T=-e@FQFvK*O<&MHE({S=O6qxj~!lR<7gVvvf z!!eVBEP^jg;bbR#ZJI>7AUHh^Z`F6wClLWk(=8+!+R`VJ8X#sf>47Qca8`E=mYJ8~ zopaUvF0n&c#yHXfvoj{J+GeQCh^6{6it);hnz8`5H&3yk?#?N3$nil=B`@P%b8c>v#7^sKraSZgdv zg#>F7`6(>6hLVj?YJHcDz64jSkr?W~t!9!BDbub)1X2Hbx>O;zjWROKD5EQQ&i7<@ zvY$(urDTZ}g6B^d(uD^#12ahvE8Ufn)kq%E!d)A zNtdgryp`Z8?1THHEC)3%#X*=kg*X)tyfQBz>JsJfW4<$w@`5HbD0eqa+;kAG^RrmZ-p;h=hKIB5Ld=ZE`VoE{<7L-*ID8}Sg&6PI+yepY!Si9v4| zMnaSXPE=~K;x1L{HC@A;=Hkf)<*0$suuX0O;T?Nc`wDTOQ&`Ksf~NwM0eW|JbXnXGs`F9pyz{ zIj~``g)NElh?T(oy+vicv0f$`^bQnj!JnpAiatSv!T-5eNE0G9ALL6a<%3*Dq-zlI znlFi=dT71;9ZO*(HR!tfi?wpB1=D{08_91Dn2|7E0Z)MqhW_b(D{|i7ug5B=t_!ap zbAaI6*jfwwJOD~+Bjx1-3g8h8hvr(j%vbzQt(7uzbyM*#uBc8=K66#ql@g8GQ^nqL zU5%clL1?{2v(E>=>A~048=`jj;DIuRY4F%(u;BBSttlwLux`WkdIPIX0>6exJjR%Y zI*r0dEXI#vPQy11daPw~@EP8*FAf^81jZdQXi9uIo3JU8;r&CmFxI(;7m^4#eppWm z;SYxmn)1Zg4<^eWiw;H{S%`hO7HJ<`J)*~7`A10eVOXP{oQ8>w7VM<0NRPnfMnhDz zkF7iS!(Kaxh($ From 8c64b54d4d9647178567798e9888342d7730c2e1 Mon Sep 17 00:00:00 2001 From: xukq <379030017@qq.com> Date: Wed, 12 Jan 2022 16:22:38 +0800 Subject: [PATCH 3/3] hw04_linux --- CMakeLists.txt | 4 ++-- main.cpp | 5 +++++ main.exe | Bin 49744 -> 0 bytes 3 files changed, 7 insertions(+), 2 deletions(-) delete mode 100644 main.exe diff --git a/CMakeLists.txt b/CMakeLists.txt index 4f3b4c2..53c794c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -9,5 +9,5 @@ endif() add_executable(main main.cpp) find_package(OpenMP REQUIRED) -target_link_libraries(testbench PUBLIC OpenMP::OpenMP_CXX) -target_compile_options(testbench PUBLIC -ffast-math -march=native) \ No newline at end of file +target_link_libraries(main PUBLIC OpenMP::OpenMP_CXX) +target_compile_options(main PUBLIC -ffast-math -march=native) \ No newline at end of file diff --git a/main.cpp b/main.cpp index 08dfa17..655dab5 100644 --- a/main.cpp +++ b/main.cpp @@ -18,6 +18,7 @@ struct Star { std::vector stars; void init() { + #pragma unroll for (int i = 0; i < 48; i++) { stars.push_back({ frand(), frand(), frand(), @@ -36,6 +37,7 @@ void step() { for (auto &star: stars) { float tmp_vx = 0, tmp_vy = 0, tmp_vz = 0; float factor = G * dt; + #pragma omp simd for (auto &other: stars) { float dx = other.px - star.px; float dy = other.py - star.py; @@ -51,6 +53,7 @@ void step() { star.vy += tmp_vy; star.vz += tmp_vz; } + #pragma unroll for (auto &star: stars) { star.px += star.vx * dt; star.py += star.vy * dt; @@ -64,6 +67,7 @@ float calc() { for (auto &star: stars) { float v2 = star.vx * star.vx + star.vy * star.vy + star.vz * star.vz; energy += star.mass * v2 / 2; + #pragma omp simd for (auto &other: stars) { float dx = other.px - star.px; float dy = other.py - star.py; @@ -88,6 +92,7 @@ int main() { init(); printf("Initial energy: %f\n", calc()); auto dt = benchmark([&] { + #pragma unroll for (int i = 0; i < 100000; i++) step(); }); diff --git a/main.exe b/main.exe deleted file mode 100644 index 9983bf34ad7a0b1221b38ccd4abee01de1ace2b9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49744 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