From 5cb0ad82bd35667f4420f10bb45a26e5522a5510 Mon Sep 17 00:00:00 2001 From: ytshih Date: Mon, 5 Oct 2026 09:13:57 +0800 Subject: [PATCH] feat: part2 and zip --- .gitignore | 2 ++ HW1_111550013.zip | Bin 0 -> 1597 bytes part2/test.sh | 9 +++++++++ part2/test1.c | 5 ++++- part2/test2.c | 5 ++--- part2/test2.c.orig | 19 +++++++++++++++++++ 6 files changed, 36 insertions(+), 4 deletions(-) create mode 100644 HW1_111550013.zip create mode 100644 part2/test.sh create mode 100644 part2/test2.c.orig diff --git a/.gitignore b/.gitignore index c2769f1..732b31c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ myexp +test_auto_vectorize +**/*.s **/*.o **/*.swp diff --git a/HW1_111550013.zip b/HW1_111550013.zip new file mode 100644 index 0000000000000000000000000000000000000000..a6640ac1f7e74bcf8a937da5b121dd92884f8294 GIT binary patch literal 1597 zcmWIWW@Zs#U|`^2;PG;e{gdK8`x*-a1HS+R0}q1?Ls@EaNq&)kfL?MzL1+jk19SSX zLs=QW4rP^Aa5FHnykKTvV0p>Rz_2$wH~*2Fz`t|rX9R^FVpm;q|6RtqRkK#~hD=BK0QX_ z=+T0kZ%g|68rEOaTo)jbwnIeW`GI#|M77RciZf~0eTHFqe;e;HH?4ny!Y53`xp(Yg z$@lskQEoO#J?v|<@awa|CwcbV++gBt+weilc=Ne42VNaic~$d@;Y`}=uRS^E_juUd ziw|D0`O21@8W+`vEO!>UJr1v4{Ln_LHQdL(;qUk2S$ub<7uz0WW!-)7Q|zpy%sYy% zPOKTc_YY37RWRt7d8l%llh#w_3Gtg%Y+j`LHmb}JmT+!Z8GB?-q)qe02%$$?w3alw z9upB}oj>2NzWc#!VF}*m&eu<`MHzTM7kjB8 zRljKO&X5b64T_i&OqLz*H`v(!&-1R-$+}IBmc=Yg9*wv5vWGA=#1t5BuHKswGkLqh zdy%piZ(sImb?x__*3z|6_33GbXI|?#L=t}}O`h2%x^BrWCT}6HjeN(8ZZ2_AQ=I#A zLBM-vd6DIP$FBMMwSSmx{-^BuU#{NC%worbRJTQNe%^Yh<@lL|qrQR0XAdbXH+$D+ zZPy;>=g_~1YgxMGv6%~PxN}3qcI$oOebjg1^`}blM^jRz7SBzedzbb4zFpk)m76{G zrZe2P5>adYQ@gMGYfMf+W{z6>qu2!wt`D8WgL`Au1J6EQ_sUu8?XRA!t=G$%)Hj6L z376~dxW&DF(s`wOX+hcQS>0Chhl5}KjVk=~HaBxe^2cW0o8lp?sjKXH>h@~BUvJ?& zGd8I5)r8XHNhQCoN=@EebJs6z+uM5y`T$MthrH9({S# z+Co1=e49~lXwlY}Uwqz_mM_H-CoNC+T-duXp za&3~7FOQ7--Sk@(VXNLb9x}IC7~;z{UB74>Z+*2ycl1TI_RF)9C)xg;vG)7Ue{Vmm z{XN^gx=qvCclUAqv#p&X_0x6#uXcJRlX^6M*~#l4H|Y9!D{YBw|6v>IbEAFHyfdfR zbUs|vzY`*wcf2*{;s1Rf?k`{ej_3Q|I*}y|CvKemo7<}Q`}9WzQ?7FbIdZR)4ofmPg+KYVp7FF^5 z=-G`ELNGi%nKSJ~^kD5~$x1^yeC+M9AFuT9#q;+{W~ z`r8;mWwXbXY(FQdWxoky`C2NOng3x|R?h4l>oZqAQo2yS^nLY%(y4!E?QS^hv_mjp zt+vTbp<8$Nmu@TCKQTjLf&7D6Ka>pokDpKS>S0*sDYA0!%Wvlni194%%r9NNVr#~g zO%JAA|0HX2Fgl||Gn6daIz?+o~WHA#16T^H428Iq+5Dx&FUdlfJ literal 0 HcmV?d00001 diff --git a/part2/test.sh b/part2/test.sh new file mode 100644 index 0000000..46ab149 --- /dev/null +++ b/part2/test.sh @@ -0,0 +1,9 @@ +RUNS=${1:-5} +median() { sort -n | awk '{a[NR]=$1} END{print (NR%2)?a[(NR+1)/2]:(a[NR/2]+a[NR/2+1])/2}'; } +for cfg in "novec:" "vec:VECTORIZE=1" "avx2:VECTORIZE=1 AVX2=1"; do + name=${cfg%%:*}; flags=${cfg#*:} + make -s clean; make -s $flags >/dev/null 2>&1 || { echo "build $name failed"; exit 1; } + t=$(for r in $(seq $RUNS); do ./test_auto_vectorize -t 1 | grep -oE '^[0-9.]+'; done | median) + echo "$name $t"; eval "T_$name=$t" +done +awk -v n=$T_novec -v v=$T_vec -v a=$T_avx2 'BEGIN{printf "vec/novec speedup: %.2fx\navx2/vec speedup: %.2fx\navx2/novec speedup: %.2fx\n", n/v, v/a, n/a}' diff --git a/part2/test1.c b/part2/test1.c index 686f5f7..479719b 100644 --- a/part2/test1.c +++ b/part2/test1.c @@ -1,7 +1,10 @@ #include "test.h" -void test1(float *a, float *b, float *c, int N) { +void test1(float *__restrict a, float *__restrict b, float *__restrict c, int N) { __builtin_assume(N == 1024); + a = (float *)__builtin_assume_aligned(a, 32); + b = (float *)__builtin_assume_aligned(b, 32); + c = (float *)__builtin_assume_aligned(c, 32); for (int i=0; i a[j]) - c[j] = b[j]; + if (b[j] > a[j]) c[j] = b[j]; + else c[j] = a[j]; } } } diff --git a/part2/test2.c.orig b/part2/test2.c.orig new file mode 100644 index 0000000..eac500e --- /dev/null +++ b/part2/test2.c.orig @@ -0,0 +1,19 @@ +#include "test.h" + +void test2(float *__restrict a, float *__restrict b, float *__restrict c, int N) +{ + __builtin_assume(N == 1024); + a = (float *)__builtin_assume_aligned(a, 16); + b = (float *)__builtin_assume_aligned(b, 16); + + for (int i = 0; i < I; i++) + { + for (int j = 0; j < N; j++) + { + /* max() */ + c[j] = a[j]; + if (b[j] > a[j]) + c[j] = b[j]; + } + } +}