From c21c794ec0abb307ff4d0948e2a504da936ea602 Mon Sep 17 00:00:00 2001 From: David Monniaux Date: Mon, 7 Jun 2021 14:42:48 +0200 Subject: timing --- test/monniaux/division/harness.c | 81 ++++++++++++++++++++++++++++++++++++++ test/monniaux/division/my_udiv32.s | 36 +++++++++++++++++ 2 files changed, 117 insertions(+) create mode 100644 test/monniaux/division/harness.c create mode 100644 test/monniaux/division/my_udiv32.s (limited to 'test') diff --git a/test/monniaux/division/harness.c b/test/monniaux/division/harness.c new file mode 100644 index 00000000..8d7e7d13 --- /dev/null +++ b/test/monniaux/division/harness.c @@ -0,0 +1,81 @@ +#include +#include +#include +#include +#include +#include "../cycles.h" + +static uint32_t dm_random_uint32(void) { + static uint32_t current=UINT32_C(0xDEADBEEF); + current = ((uint64_t) current << 6) % UINT32_C(4294967291); + return current; +} + +static uint64_t dm_biased_random_uint32(void) { + uint32_t flags = dm_random_uint32(); + uint32_t r; + switch (flags & 15) { + case 0: + r = dm_random_uint32() & 0xFU; + break; + case 1: + r = dm_random_uint32() & 0xFFU; + break; + case 2: + r = dm_random_uint32() & 0xFFFU; + break; + case 3: + r = dm_random_uint32() & 0xFFFFU; + break; + case 4: + r = dm_random_uint32() & 0xFFFFFU; + break; + case 5: + r = dm_random_uint32() & 0xFFFFFFU; + break; + case 6: + r = dm_random_uint32() & 0xFFFFFFFU; + break; + case 7: + r = dm_random_uint32() & 0x3; + break; + default: + r = dm_random_uint32(); + } + return r; +} + +inline uint32_t native_udiv32(uint32_t x, uint32_t y) { + return x/y; +} +extern uint32_t my_udiv32(uint32_t x, uint32_t y); + +int main() { + cycle_t time_me=0, time_native=0; + cycle_count_config(); + + for(int i=0; i<1000; i++) { + uint32_t x = dm_biased_random_uint32(); + uint32_t y = dm_biased_random_uint32(); + + cycle_t cycle_a, cycle_b, cycle_c; + + uint32_t q1, q2; + cycle_a = get_cycle(); + q1 = native_udiv32(x, y); + cycle_b = get_cycle(); + q2 = my_udiv32(x, y); + cycle_c = get_cycle(); + + if(q1 != q2) { + printf("%u %u\n", q1, q2); + } + + time_native += cycle_b - cycle_a; + time_me += cycle_c - cycle_b; + } + + printf("%" PRcycle "\t%" PRcycle "\n", time_native, time_me); + + return 0; +} diff --git a/test/monniaux/division/my_udiv32.s b/test/monniaux/division/my_udiv32.s new file mode 100644 index 00000000..0f4fd127 --- /dev/null +++ b/test/monniaux/division/my_udiv32.s @@ -0,0 +1,36 @@ + .align 8 + .global my_udiv32 + .type my_udiv32, @function +my_udiv32: + zxwd $r1 = $r1 + make $r3 = 0x3ff0000000000000 # 1.0 + zxwd $r0 = $r0 + ;; + floatud.rn $r5 = $r1, 0 + ;; + floatuw.rn $r2 = $r1, 0 + ;; + finvw $r2 = $r2 + ;; + + fwidenlwd $r2 = $r2 + floatud.rn $r4 = $r0, 0 + ;; + ffmsd $r3 = $r2, $r5 + ;; + ffmad $r2 = $r2, $r3 + ;; + fmuld $r2 = $r2, $r4 + ;; + fixedud.rn $r2 = $r2, 0 + ;; + msbfw $r0 = $r2, $r1 + zxwd $r1 = $r2 + addw $r2 = $r2, -1 + ;; + cmoved.wltz $r0? $r1 = $r2 + ;; + copyd $r0 = $r1 + ret + ;; + .size my_udiv32, .-my_udiv32 -- cgit From f0124301f874520bfdf76f16e016ffb2e1a8ca37 Mon Sep 17 00:00:00 2001 From: David Monniaux Date: Mon, 7 Jun 2021 14:47:57 +0200 Subject: division --- test/monniaux/cycles.h | 2 +- test/monniaux/division/harness.c | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) (limited to 'test') diff --git a/test/monniaux/cycles.h b/test/monniaux/cycles.h index f26060a7..2905938b 100644 --- a/test/monniaux/cycles.h +++ b/test/monniaux/cycles.h @@ -6,7 +6,7 @@ typedef uint64_t cycle_t; #define PRcycle PRId64 -#include <../../kvx-cos/include/hal/cos_registers.h> +#include "/opt/kalray/accesscore/kvx-cos/include/hal/cos_registers.h" static inline void cycle_count_config(void) { diff --git a/test/monniaux/division/harness.c b/test/monniaux/division/harness.c index 8d7e7d13..b6ce674d 100644 --- a/test/monniaux/division/harness.c +++ b/test/monniaux/division/harness.c @@ -57,7 +57,8 @@ int main() { for(int i=0; i<1000; i++) { uint32_t x = dm_biased_random_uint32(); uint32_t y = dm_biased_random_uint32(); - + if (y == 0) continue; + cycle_t cycle_a, cycle_b, cycle_c; uint32_t q1, q2; @@ -68,7 +69,7 @@ int main() { cycle_c = get_cycle(); if(q1 != q2) { - printf("%u %u\n", q1, q2); + printf("ERREUR %u %u\n", q1, q2); } time_native += cycle_b - cycle_a; -- cgit From d703ae1ad5e1fcdc63e07b2a50a3e8576a11e61e Mon Sep 17 00:00:00 2001 From: Léo Gourdin Date: Wed, 9 Jun 2021 23:54:07 +0200 Subject: push afadl test example --- test/gourdinl/compare_pp.sh | 16 ++++++++++++++++ test/gourdinl/postpass_exp.c | 5 +++++ 2 files changed, 21 insertions(+) create mode 100755 test/gourdinl/compare_pp.sh create mode 100644 test/gourdinl/postpass_exp.c (limited to 'test') diff --git a/test/gourdinl/compare_pp.sh b/test/gourdinl/compare_pp.sh new file mode 100755 index 00000000..09183cf9 --- /dev/null +++ b/test/gourdinl/compare_pp.sh @@ -0,0 +1,16 @@ +ffname=$(basename $1) +fname=${ffname%.*} +nopp=$fname.nopp.s +pp=$fname.pp.s + +../../ccomp -fno-coalesce-mem -fno-postpass -S $1 -o $nopp +../../ccomp -fno-coalesce-mem -fpostpass= list -S $1 -o $pp +sed -i '1,2d' $nopp +sed -i '1,2d' $pp +if cmp -s $nopp $pp; then + echo "same!" +else + echo "differents!" + diff -y $nopp $pp +fi + diff --git a/test/gourdinl/postpass_exp.c b/test/gourdinl/postpass_exp.c new file mode 100644 index 00000000..522ac2a6 --- /dev/null +++ b/test/gourdinl/postpass_exp.c @@ -0,0 +1,5 @@ +int main(int x, int y) { + int z = x << 32; + y = y - z; + return x + y; +} -- cgit