From: flow gg <hlefthleft@gmail.com> To: FFmpeg development discussions and patches <ffmpeg-devel@ffmpeg.org> Subject: Re: [FFmpeg-devel] [PATCH] checkasm: add test for dcmul_add Date: Sun, 19 Nov 2023 06:28:10 +0800 Message-ID: <CAEa-L+sViwE=GsJsdFfru+-yyL-Ea+=NU=CZo-QwBjVSj=-ynw@mail.gmail.com> (raw) In-Reply-To: <CAEa-L+t5fdT8Y=+kYzFyMVb3m0yiM2vL_paDBUZvzJnTBog2VA@mail.gmail.com> From 2785ce57f68dbb2373c951b9432afa73796f7cc1 Mon Sep 17 00:00:00 2001 From: sunyuechi <sunyuechi@iscas.ac.cn> Date: Sat, 18 Nov 2023 10:58:17 +0800 Subject: [PATCH] checkasm: test for dcmul_add --- tests/checkasm/af_afir.c | 141 +++++++++++++++++++++++++++------------ 1 file changed, 98 insertions(+), 43 deletions(-) diff --git a/tests/checkasm/af_afir.c b/tests/checkasm/af_afir.c index 08c55dacfc..6cb59dbb6c 100644 --- a/tests/checkasm/af_afir.c +++ b/tests/checkasm/af_afir.c @@ -33,64 +33,119 @@ do { \ int i; \ double bmg[2], stddev = 10.0, mean = 0.0; \ \ - for (i = 0; i < LEN*2+8; i += 2) { \ + for (i = 0; i < BUF_SIZE; i += 2) { \ av_bmg_get(&checkasm_lfg, bmg); \ buf[i] = bmg[0] * stddev + mean; \ buf[i + 1] = bmg[1] * stddev + mean; \ } \ } while(0); -static void test_fcmul_add(const float *src0, const float *src1, const float *src2) +static void test_fcmul_add(AudioFIRDSPContext *fir) { - LOCAL_ALIGNED_32(float, cdst, [LEN*2+8]); - LOCAL_ALIGNED_32(float, odst, [LEN*2+8]); - int i; - - declare_func(void, float *sum, const float *t, const float *c, - ptrdiff_t len); - - memcpy(cdst, src0, (LEN*2+8) * sizeof(float)); - memcpy(odst, src0, (LEN*2+8) * sizeof(float)); - call_ref(cdst, src1, src2, LEN); - call_new(odst, src1, src2, LEN); - for (i = 0; i <= LEN*2; i++) { - int idx = i & ~1; - float cre = src2[idx]; - float cim = src2[idx + 1]; - float tre = src1[idx]; - float tim = src1[idx + 1]; - double t = fabs(src0[i]) + - fabs(tre) + fabs(tim) + fabs(cre) + fabs(cim) + - fabs(tre * cre) + fabs(tim * cim) + - fabs(tre * cim) + fabs(tim * cre) + - fabs(tre * cre - tim * cim) + - fabs(tre * cim + tim * cre) + - fabs(cdst[i]) + 1.0; - if (!float_near_abs_eps(cdst[i], odst[i], t * 2 * FLT_EPSILON)) { - fprintf(stderr, "%d: %- .12f - %- .12f = % .12g\n", - i, cdst[i], odst[i], cdst[i] - odst[i]); - fail(); - break; +#define BUF_SIZE LEN*2+8 + LOCAL_ALIGNED_32(float, src0, [BUF_SIZE]); + LOCAL_ALIGNED_32(float, src1, [BUF_SIZE]); + LOCAL_ALIGNED_32(float, src2, [BUF_SIZE]); + + randomize_buffer(src0); + randomize_buffer(src1); + randomize_buffer(src2); + + if (check_func(fir->fcmul_add, "fcmul_add")) { + LOCAL_ALIGNED_32(float, cdst, [BUF_SIZE]); + LOCAL_ALIGNED_32(float, odst, [BUF_SIZE]); + int i; + + declare_func(void, float *sum, const float *t, const float *c, + ptrdiff_t len); + + memcpy(cdst, src0, (BUF_SIZE) * sizeof(float)); + memcpy(odst, src0, (BUF_SIZE) * sizeof(float)); + call_ref(cdst, src1, src2, LEN); + call_new(odst, src1, src2, LEN); + for (i = 0; i <= LEN*2; i++) { + int idx = i & ~1; + float cre = src2[idx]; + float cim = src2[idx + 1]; + float tre = src1[idx]; + float tim = src1[idx + 1]; + double t = fabs(src0[i]) + + fabs(tre) + fabs(tim) + fabs(cre) + fabs(cim) + + fabs(tre * cre) + fabs(tim * cim) + + fabs(tre * cim) + fabs(tim * cre) + + fabs(tre * cre - tim * cim) + + fabs(tre * cim + tim * cre) + + fabs(cdst[i]) + 1.0; + if (!float_near_abs_eps(cdst[i], odst[i], t * 2 * FLT_EPSILON)) { + fprintf(stderr, "%d: %- .12f - %- .12f = % .12g\n", + i, cdst[i], odst[i], cdst[i] - odst[i]); + fail(); + break; + } } + memcpy(odst, src0, (BUF_SIZE) * sizeof(float)); + bench_new(odst, src1, src2, LEN); } - memcpy(odst, src0, (LEN*2+8) * sizeof(float)); - bench_new(odst, src1, src2, LEN); + + report("fcmul_add"); } -void checkasm_check_afir(void) +static void test_dcmul_add(AudioFIRDSPContext *fir) { - LOCAL_ALIGNED_32(float, src0, [LEN*2+8]); - LOCAL_ALIGNED_32(float, src1, [LEN*2+8]); - LOCAL_ALIGNED_32(float, src2, [LEN*2+8]); - AudioFIRDSPContext fir = { 0 }; - - ff_afir_init(&fir); +#define BUF_SIZE LEN*2+8 + LOCAL_ALIGNED_32(double, src0, [BUF_SIZE]); + LOCAL_ALIGNED_32(double, src1, [BUF_SIZE]); + LOCAL_ALIGNED_32(double, src2, [BUF_SIZE]); randomize_buffer(src0); randomize_buffer(src1); randomize_buffer(src2); - if (check_func(fir.fcmul_add, "fcmul_add")) - test_fcmul_add(src0, src1, src2); - report("fcmul_add"); + if (check_func(fir->dcmul_add, "dcmul_add")) { + LOCAL_ALIGNED_32(double, cdst, [BUF_SIZE]); + LOCAL_ALIGNED_32(double, odst, [BUF_SIZE]); + int i; + + declare_func(void, double *sum, const double *t, const double *c, + ptrdiff_t len); + + memcpy(cdst, src0, (BUF_SIZE) * sizeof(double)); + memcpy(odst, src0, (BUF_SIZE) * sizeof(double)); + call_ref(cdst, src1, src2, LEN); + call_new(odst, src1, src2, LEN); + for (i = 0; i <= LEN*2; i++) { + int idx = i & ~1; + double cre = src2[idx]; + double cim = src2[idx + 1]; + double tre = src1[idx]; + double tim = src1[idx + 1]; + double t = fabs(src0[i]) + + fabs(tre) + fabs(tim) + fabs(cre) + fabs(cim) + + fabs(tre * cre) + fabs(tim * cim) + + fabs(tre * cim) + fabs(tim * cre) + + fabs(tre * cre - tim * cim) + + fabs(tre * cim + tim * cre) + + fabs(cdst[i]) + 1.0; + if (!double_near_abs_eps(cdst[i], odst[i], t * 2 * FLT_EPSILON)) { + fprintf(stderr, "%d: %- .12f - %- .12f = % .12g\n", + i, cdst[i], odst[i], cdst[i] - odst[i]); + fail(); + break; + } + } + memcpy(odst, src0, (BUF_SIZE) * sizeof(double)); + bench_new(odst, src1, src2, LEN); + } + + report("dcmul_add"); +} + + +void checkasm_check_afir(void) +{ + AudioFIRDSPContext fir = { 0 }; + + ff_afir_init(&fir); + test_fcmul_add(&fir); + test_dcmul_add(&fir); } -- 2.42.1 flow gg <hlefthleft@gmail.com> 于2023年11月18日周六 11:21写道: > > _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
next prev parent reply other threads:[~2023-11-18 22:28 UTC|newest] Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top 2023-11-18 3:21 flow gg 2023-11-18 22:28 ` flow gg [this message] 2023-11-26 11:08 ` Rémi Denis-Courmont 2023-11-26 19:35 ` Rémi Denis-Courmont 2023-11-26 20:54 ` flow gg 2023-11-27 12:17 ` Rémi Denis-Courmont 2023-11-27 12:35 ` flow gg 2023-11-27 13:04 ` Paul B Mahol
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to='CAEa-L+sViwE=GsJsdFfru+-yyL-Ea+=NU=CZo-QwBjVSj=-ynw@mail.gmail.com' \ --to=hlefthleft@gmail.com \ --cc=ffmpeg-devel@ffmpeg.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel This inbox may be cloned and mirrored by anyone: git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \ ffmpegdev@gitmailbox.com public-inbox-index ffmpegdev Example config snippet for mirrors. AGPL code for this site: git clone https://public-inbox.org/public-inbox.git