From bb9f0c4f6b92db535e3f6babe1fb4456fe1f1a9a Mon Sep 17 00:00:00 2001 From: ytshih Date: Mon, 5 Oct 2026 06:03:58 +0800 Subject: [PATCH] feat: part1 code done --- .gitignore | 3 ++ part1/PPintrin.o | Bin 29896 -> 30256 bytes part1/vectorOP.cpp | 74 +++++++++++++++++++++++++++++++++++++++++++-- 3 files changed, 75 insertions(+), 2 deletions(-) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c2769f1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +myexp +**/*.o +**/*.swp diff --git a/part1/PPintrin.o b/part1/PPintrin.o index 33c3ac7076dfa85c95640ac7ab220902b92a83b7..b493bf90169ddd89def7348a9fced4913cc65a5f 100644 GIT binary patch literal 30256 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 Gx_$t)H?nU4 literal 29896 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 P1_s#p8%Qq*qw5C%Mt(C+ diff --git a/part1/vectorOP.cpp b/part1/vectorOP.cpp index e3f943a..76dc0f4 100644 --- a/part1/vectorOP.cpp +++ b/part1/vectorOP.cpp @@ -49,8 +49,63 @@ void clampedExpVector(float *values, int *exponents, float *output, int N) // Your solution should work for any value of // N and VECTOR_WIDTH, not just when VECTOR_WIDTH divides N // + __pp_vec_float x; + __pp_vec_int y; + __pp_vec_float result; + __pp_vec_int zero = _pp_vset_int(0); + __pp_vec_float cap = _pp_vset_float(9.999999f); + __pp_vec_int one = _pp_vset_int(1); + __pp_mask maskAll, maskNonZero, maskGreater; + maskAll = _pp_init_ones(); + for (int i = 0; i < N; i += VECTOR_WIDTH) { + if (i + VECTOR_WIDTH > N) { + float *tmp = new float[VECTOR_WIDTH]; + for (int j = 0; i + j < N; j++) + tmp[j] = values[i+j]; + for (int j = N; j < i + VECTOR_WIDTH; j++) + tmp[j] = 0; + _pp_vload_float(x, tmp, maskAll); + delete []tmp; + } else { + _pp_vload_float(x, values + i, maskAll); // x = values[i]; + } + + if (i + VECTOR_WIDTH > N) { + int *tmp = new int[VECTOR_WIDTH]; + for (int j = 0; i + j < N; j++) + tmp[j] = exponents[i+j]; + for (int j = N; j < i + VECTOR_WIDTH; j++) + tmp[j] = 0; + _pp_vload_int(y, tmp, maskAll); + delete []tmp; + } else { + _pp_vload_int(y, exponents + i, maskAll); // y = exponents[i]; + } + + _pp_vset_float(result, 1.f, maskAll); + maskNonZero = _pp_init_ones(); + while (_pp_cntbits(maskNonZero) > 0) { + _pp_veq_int(maskNonZero, y, zero, maskAll); + maskNonZero = _pp_mask_not(maskNonZero); + + _pp_vmult_float(result, result, x, maskNonZero); + _pp_vsub_int(y, y, one, maskNonZero); + } + + _pp_vgt_float(maskGreater, result, cap, maskAll); + _pp_vset_float(result, 9.999999f, maskGreater); + + if (i + VECTOR_WIDTH > N) { + float *tmp = new float[VECTOR_WIDTH]; + _pp_vstore_float(output + i, result, maskAll); + for (int j = 0; i + j < N; j++) + output[i+j] = tmp[j]; + delete []tmp; + } else { + _pp_vstore_float(output + i, result, maskAll); + } } } @@ -63,10 +118,25 @@ float arraySumVector(float *values, int N) // // PP STUDENTS TODO: Implement your vectorized version of arraySumSerial here // + __pp_vec_float x; + __pp_mask maskAll; + maskAll = _pp_init_ones(); + float total = 0.f; for (int i = 0; i < N; i += VECTOR_WIDTH) { + _pp_vload_float(x, values + i, maskAll); + + for (int n = VECTOR_WIDTH; n > 1; n >>= 1) { + _pp_hadd_float(x, x); + _pp_interleave_float(x, x); + } + + float *tmp = new float[VECTOR_WIDTH]; + _pp_vstore_float(tmp, x, maskAll); + total += tmp[0]; + delete []tmp; } - return 0.0; -} \ No newline at end of file + return total; +}