From 226b1ff7d521ac68927d24fda312988896c54581 Mon Sep 17 00:00:00 2001 From: Dsplib Date: Thu, 17 Sep 2020 10:53:32 +0300 Subject: [PATCH] Changes to be committed: modified: .gitignore modified: dspl/src/inout.c modified: dspl/src/xcorr.c modified: include/dspl.c modified: include/dspl.h modified: lapack/lapack_complex.inc new file: verification/src/dspl_verif.h modified: verification/src/writebin_readbin_verification_complex.c modified: verification/src/writebin_readbin_verification_double.c modified: verification/verif.sh --- .gitignore | 1 + dspl/src/inout.c | 29 ++++++ dspl/src/xcorr.c | 94 ++++++++++++++++-- include/dspl.c | 2 + include/dspl.h | 3 + lapack/lapack_complex.inc | 95 ++++++++++++++++++- verification/src/dspl_verif.h | 9 ++ .../writebin_readbin_verification_complex.c | 16 +++- .../writebin_readbin_verification_double.c | 26 +++-- verification/verif.sh | 7 ++ 10 files changed, 261 insertions(+), 21 deletions(-) create mode 100644 verification/src/dspl_verif.h diff --git a/.gitignore b/.gitignore index 4992c20..30f16b5 100644 --- a/.gitignore +++ b/.gitignore @@ -10,6 +10,7 @@ *.html *.png *.def +*.log !header_ru.html !footer_ru.html diff --git a/dspl/src/inout.c b/dspl/src/inout.c index b3cc5be..9477787 100644 --- a/dspl/src/inout.c +++ b/dspl/src/inout.c @@ -26,6 +26,35 @@ #include "dspl.h" + +#ifdef DOXYGEN_ENGLISH + +#endif +#ifdef DOXYGEN_RUSSIAN + +#endif +int DSPL_API addlog(char* str, char* fn) +{ + FILE* pFile = NULL; + if(!str) + return ERROR_PTR; + + pFile = fopen(fn, "a+"); + if(pFile == NULL) + return ERROR_FOPEN; + + fprintf(pFile, "%s\n", str); + + fclose(pFile); + return RES_OK; +} + + + + + + + #ifdef DOXYGEN_ENGLISH #endif diff --git a/dspl/src/xcorr.c b/dspl/src/xcorr.c index 0a9a9eb..ac57597 100644 --- a/dspl/src/xcorr.c +++ b/dspl/src/xcorr.c @@ -47,15 +47,33 @@ int DSPL_API xcorr(double* x, int nx, double* y, int ny, fft_t fft = {0}; int err; complex_t *cr = (complex_t*)malloc((2 * nr + 1) * sizeof(complex_t)); + if(!cr) + { + err = ERROR_MALLOC; + goto exit_label; + } complex_t *cx = (complex_t*)malloc( nx * sizeof(complex_t)); + if(!cx) + { + err = ERROR_MALLOC; + goto exit_label; + } complex_t *cy = (complex_t*)malloc( ny * sizeof(complex_t)); + if(!cy) + { + err = ERROR_MALLOC; + goto exit_label; + } err = re2cmplx(x, nx, cx); if(err != RES_OK) goto exit_label; + err = re2cmplx(y, ny, cy); + if(err != RES_OK) goto exit_label; + err = xcorr_krn(cx, nx, cy, ny, &fft, flag, nr, cr, t); if(err != RES_OK) goto exit_label; @@ -65,6 +83,11 @@ int DSPL_API xcorr(double* x, int nx, double* y, int ny, exit_label: if(cr) free(cr); + if(cx) + free(cx); + if(cy) + free(cy); + fft_free(&fft); return err; } @@ -148,12 +171,46 @@ int xcorr_krn(complex_t* x, int nx, complex_t* y, int ny, fft_t* pfft, /* memory allocation */ px = (complex_t*)malloc(nfft * sizeof(complex_t)); + if(!px) + { + err = ERROR_MALLOC; + goto exit_label; + } + py = (complex_t*)malloc(nfft * sizeof(complex_t)); + if(!py) + { + err = ERROR_MALLOC; + goto exit_label; + } + pc = (complex_t*)malloc(nfft * sizeof(complex_t)); - + if(!pc) + { + err = ERROR_MALLOC; + goto exit_label; + } + pX = (complex_t*)malloc(nfft * sizeof(complex_t)); + if(!pX) + { + err = ERROR_MALLOC; + goto exit_label; + } + pY = (complex_t*)malloc(nfft * sizeof(complex_t)); + if(!pY) + { + err = ERROR_MALLOC; + goto exit_label; + } + pC = (complex_t*)malloc(nfft * sizeof(complex_t)); + if(!pC) + { + err = ERROR_MALLOC; + goto exit_label; + } memset(px, 0, nfft * sizeof(complex_t)); memset(py, 0, nfft * sizeof(complex_t)); @@ -204,8 +261,32 @@ exit_label: +#ifdef DOXYGEN_ENGLISH +/******************************************************************************* +Return FFT size for autocorrelation or cross correlation vector calculation -/* +Cross-correlation vector size is +N = 2 * nx - 1, if nx > ny; +N = 2 * ny - 1, if nx <= ny. + +If cross-correlation size N may not be efficient for FFT +then we can add zeros to get high-performance FFT size. + +For example if N = 1025, then we can add zeros to 2048-points FFT but this way +seems not so good because too much zeros. + +If we rewrite N = 2^L + D, then we can use + + NFFT = 2^L + 2^(L - P), here P = 0,1,2 or 3. + +So NFFT = 2^(L-P) * (2^P + 1). Then 2^(L-P) can use radix-2 FFT, and additional +composite multiplication if P = 0,1,2 or 3 equals +9, 5, 3 or 2, and we have high-performance FFT algorithms for its points. +If P = 4 then composite multiplier is (2^P + 1) = 17, has no good FFT. +*******************************************************************************/ +#endif +#ifdef DOXYGEN_RUSSIAN +/******************************************************************************* Возвращает размер FFT для расчета полного вектора автокорреляции или кросскорреляции. @@ -223,11 +304,12 @@ N = 2 * ny - 1, eсли nx <= ny. NFFT = 2^L + 2^(L - P), где P = 0,1,2 или 3. -Тогда NFFT = 2^(L-P) * (2^P + 1). Тогда 2^(L-P) реалиуем как radix-2, а +Тогда NFFT = 2^(L-P) * (2^P + 1). Тогда 2^(L-P) реализуем как radix-2, а дополнительный составной множитель при P = 0,1,2 или 3 равен соответсвенно 9, 5, 3 или 2, а для этих длин существуют хорошие процедуры. При P = 4 составной множитель будет (2^P + 1) = 17, что не очень хорошо. -*/ +*******************************************************************************/ +#endif int xcorr_fft_size(int nx, int ny, int* pnfft, int* pndata) { int nfft, nfft2, r2, dnfft; @@ -236,9 +318,7 @@ int xcorr_fft_size(int nx, int ny, int* pnfft, int* pndata) return ERROR_SIZE; if(!pnfft || !pndata) return ERROR_PTR; - - - + if(nx > ny) { nfft = 2*nx - 1; diff --git a/include/dspl.c b/include/dspl.c index af3a482..e829274 100644 --- a/include/dspl.c +++ b/include/dspl.c @@ -36,6 +36,7 @@ #ifndef BUILD_LIB p_acos_cmplx acos_cmplx ; +p_addlog addlog ; p_array_scale_lin array_scale_lin ; p_asin_cmplx asin_cmplx ; @@ -342,6 +343,7 @@ void* dspl_load() #endif /* LINUX_OS */ LOAD_FUNC(acos_cmplx); + LOAD_FUNC(addlog); LOAD_FUNC(array_scale_lin); LOAD_FUNC(asin_cmplx); diff --git a/include/dspl.h b/include/dspl.h index a16f792..0ccb948 100644 --- a/include/dspl.h +++ b/include/dspl.h @@ -674,6 +674,9 @@ DECLARE_FUNC(int, acos_cmplx, complex_t* COMMA int COMMA complex_t*); /*----------------------------------------------------------------------------*/ +DECLARE_FUNC(int, addlog, char* str + COMMA char* fn); +/*----------------------------------------------------------------------------*/ DECLARE_FUNC(int, array_scale_lin, double* x COMMA int n COMMA double xmin diff --git a/lapack/lapack_complex.inc b/lapack/lapack_complex.inc index 80ee066..2f5d33d 100644 --- a/lapack/lapack_complex.inc +++ b/lapack/lapack_complex.inc @@ -1,3 +1,96 @@ -LAPACK_COMPLEX_SRC = dlamch.f icmax1.f ieeeck.f ilaclc.f ilaclr.f iladiag.f iladlc.f iladlr.f ilaenv.f ilaenv2stage.f ilaprec.f ilaslc.f ilaslr.f ilatrans.f ilauplo.f ilazlc.f ilazlr.f iparmq.f izmax1.f zbbcsd.f zbdsqr.f zcgesv.f zcposv.f zdrscl.f zgbbrd.f zgbcon.f zgbequ.f zgbequb.f zgbrfs.f zgbrfsx.f zgbsv.f zgbsvx.f zgbsvxx.f zgbtf2.f zgbtrf.f zgbtrs.f zgebak.f zgebal.f zgebd2.f zgebrd.f zgecon.f zgeequ.f zgeequb.f zgees.f zgeesx.f zgeev.f zgeevx.f zgehd2.f zgehrd.f zgejsv.f zgelq.f zgelq2.f zgelqf.f zgelqt.f zgelqt3.f zgels.f zgelsd.f zgelss.f zgelsy.f zgemlq.f zgemlqt.f zgemqr.f zgemqrt.f zgeql2.f zgeqlf.f zgeqp3.f zgeqr.f zgeqr2.f zgeqr2p.f zgeqrf.f zgeqrfp.f zgeqrt.f zgeqrt2.f zgeqrt3.f zgerfs.f zgerfsx.f zgerq2.f zgerqf.f zgesc2.f zgesdd.f zgesv.f zgesvd.f zgesvdx.f zgesvj.f zgesvx.f zgesvxx.f zgetc2.f zgetf2.f zgetrf.f zgetrf2.f zgetri.f zgetrs.f zgetsls.f zggbak.f zggbal.f zgges.f zgges3.f zggesx.f zggev.f zggev3.f zggevx.f zggglm.f zgghd3.f zgghrd.f zgglse.f zggqrf.f zggrqf.f zggsvd3.f zggsvp3.f zgsvj0.f zgsvj1.f zgtcon.f zgtrfs.f zgtsv.f zgtsvx.f zgttrf.f zgttrs.f zgtts2.f zhb2st_kernels.f zhbev.f zhbev_2stage.f zhbevd.f zhbevd_2stage.f zhbevx.f zhbevx_2stage.f zhbgst.f zhbgv.f zhbgvd.f zhbgvx.f zhbtrd.f zhecon.f zhecon_3.f zhecon_rook.f zheequb.f zheev.f zheev_2stage.f zheevd.f zheevd_2stage.f zheevr.f zheevr_2stage.f zheevx.f zheevx_2stage.f zhegs2.f zhegst.f zhegv.f zhegv_2stage.f zhegvd.f zhegvx.f zherfs.f zherfsx.f zhesv.f zhesv_aa.f zhesv_aa_2stage.f zhesv_rk.f zhesv_rook.f zhesvx.f zhesvxx.f zheswapr.f zhetd2.f zhetf2.f zhetf2_rk.f zhetf2_rook.f zhetrd.f zhetrd_2stage.f zhetrd_he2hb.f zhetrf.f zhetrf_aa.f zhetrf_aa_2stage.f zhetrf_rk.f zhetrf_rook.f zhetri.f zhetri2.f zhetri2x.f zhetri_3.f zhetri_3x.f zhetri_rook.f zhetrs.f zhetrs2.f zhetrs_3.f zhetrs_aa.f zhetrs_aa_2stage.f zhetrs_rook.f zhfrk.f zhgeqz.f zhpcon.f zhpev.f zhpevd.f zhpevx.f zhpgst.f zhpgv.f zhpgvd.f zhpgvx.f zhprfs.f zhpsv.f zhpsvx.f zhptrd.f zhptrf.f zhptri.f zhptrs.f zhsein.f zhseqr.f zla_gbamv.f zla_gbrcond_c.f zla_gbrcond_x.f zla_gbrfsx_extended.f zla_gbrpvgrw.f zla_geamv.f zla_gercond_c.f zla_gercond_x.f zla_gerfsx_extended.f zla_gerpvgrw.f zla_heamv.f zla_hercond_c.f zla_hercond_x.f zla_herfsx_extended.f zla_herpvgrw.f zla_lin_berr.f zla_porcond_c.f zla_porcond_x.f zla_porfsx_extended.f zla_porpvgrw.f zla_syamv.f zla_syrcond_c.f zla_syrcond_x.f zla_syrfsx_extended.f zla_syrpvgrw.f zla_wwaddw.f zlabrd.f zlacgv.f zlacn2.f zlacon.f zlacp2.f zlacpy.f zlacrm.f zlacrt.f zladiv.f zlaed0.f zlaed7.f zlaed8.f zlaein.f zlaesy.f zlaev2.f zlag2c.f zlags2.f zlagtm.f zlahef.f zlahef_aa.f zlahef_rk.f zlahef_rook.f zlahqr.f zlahr2.f zlaic1.f zlals0.f zlalsa.f zlalsd.f zlamswlq.f zlamtsqr.f zlangb.f zlange.f zlangt.f zlanhb.f zlanhe.f zlanhf.f zlanhp.f zlanhs.f zlanht.f zlansb.f zlansp.f zlansy.f zlantb.f zlantp.f zlantr.f zlapll.f zlapmr.f zlapmt.f zlaqgb.f zlaqge.f zlaqhb.f zlaqhe.f zlaqhp.f zlaqp2.f zlaqps.f zlaqr0.f zlaqr1.f zlaqr2.f zlaqr3.f zlaqr4.f zlaqr5.f zlaqsb.f zlaqsp.f zlaqsy.f zlar1v.f zlar2v.f zlarcm.f zlarf.f zlarfb.f zlarfg.f zlarfgp.f zlarft.f zlarfx.f zlarfy.f zlargv.f zlarnv.f zlarrv.f zlarscl2.f zlartg.f zlartv.f zlarz.f zlarzb.f zlarzt.f zlascl.f zlascl2.f zlaset.f zlasr.f zlassq.f zlaswlq.f zlaswp.f zlasyf.f zlasyf_aa.f zlasyf_rk.f zlasyf_rook.f zlat2c.f zlatbs.f zlatdf.f zlatps.f zlatrd.f zlatrs.f zlatrz.f zlatsqr.f zlauu2.f zlauum.f zpbcon.f zpbequ.f zpbrfs.f zpbstf.f zpbsv.f zpbsvx.f zpbtf2.f zpbtrf.f zpbtrs.f zpftrf.f zpftri.f zpftrs.f zpocon.f zpoequ.f zpoequb.f zporfs.f zporfsx.f zposv.f zposvx.f zposvxx.f zpotf2.f zpotrf.f zpotrf2.f zpotri.f zpotrs.f zppcon.f zppequ.f zpprfs.f zppsv.f zppsvx.f zpptrf.f zpptri.f zpptrs.f zpstf2.f zpstrf.f zptcon.f zpteqr.f zptrfs.f zptsv.f zptsvx.f zpttrf.f zpttrs.f zptts2.f zrot.f zspcon.f zspmv.f zspr.f zsprfs.f zspsv.f zspsvx.f zsptrf.f zsptri.f zsptrs.f zstedc.f zstegr.f zstein.f zstemr.f zsteqr.f zsycon.f zsycon_3.f zsycon_rook.f zsyconv.f zsyconvf.f zsyconvf_rook.f zsyequb.f zsymv.f zsyr.f zsyrfs.f zsyrfsx.f zsysv.f zsysv_aa.f zsysv_aa_2stage.f zsysv_rk.f zsysv_rook.f zsysvx.f zsysvxx.f zsyswapr.f zsytf2.f zsytf2_rk.f zsytf2_rook.f zsytrf.f zsytrf_aa.f zsytrf_aa_2stage.f zsytrf_rk.f zsytrf_rook.f zsytri.f zsytri2.f zsytri2x.f zsytri_3.f zsytri_3x.f zsytri_rook.f zsytrs.f zsytrs2.f zsytrs_3.f zsytrs_aa.f zsytrs_aa_2stage.f zsytrs_rook.f ztbcon.f ztbrfs.f ztbtrs.f ztfsm.f ztftri.f ztfttp.f ztfttr.f ztgevc.f ztgex2.f ztgexc.f ztgsen.f ztgsja.f ztgsna.f ztgsy2.f ztgsyl.f ztpcon.f ztplqt.f ztplqt2.f ztpmlqt.f ztpmqrt.f ztpqrt.f ztpqrt2.f ztprfb.f ztprfs.f ztptri.f ztptrs.f ztpttf.f ztpttr.f ztrcon.f ztrevc.f ztrevc3.f ztrexc.f ztrrfs.f ztrsen.f ztrsna.f ztrsyl.f ztrti2.f ztrtri.f ztrtrs.f ztrttf.f ztrttp.f ztzrzf.f zunbdb.f zunbdb1.f zunbdb2.f zunbdb3.f zunbdb4.f zunbdb5.f zunbdb6.f zuncsd.f zuncsd2by1.f zung2l.f zung2r.f zungbr.f zunghr.f zungl2.f zunglq.f zungql.f zungqr.f zungr2.f zungrq.f zungtr.f zunm22.f zunm2l.f zunm2r.f zunmbr.f zunmhr.f zunml2.f zunmlq.f zunmql.f zunmqr.f zunmr2.f zunmr3.f zunmrq.f zunmrz.f zunmtr.f zupgtr.f zupmtr.f +LAPACK_COMPLEX_SRC = dlamch.f icmax1.f ieeeck.f ilaclc.f ilaclr.f iladiag.f\ + iladlc.f iladlr.f ilaenv.f ilaenv2stage.f ilaprec.f\ + ilaslc.f ilaslr.f ilatrans.f ilauplo.f ilazlc.f ilazlr.f\ + iparmq.f izmax1.f zbbcsd.f zbdsqr.f zcgesv.f zcposv.f\ + zdrscl.f zgbbrd.f zgbcon.f zgbequ.f zgbequb.f zgbrfs.f\ + zgbrfsx.f zgbsv.f zgbsvx.f zgbsvxx.f zgbtf2.f zgbtrf.f\ + zgbtrs.f zgebak.f zgebal.f zgebd2.f zgebrd.f zgecon.f\ + zgeequ.f zgeequb.f zgees.f zgeesx.f zgeev.f zgeevx.f\ + zgehd2.f zgehrd.f zgejsv.f zgelq.f zgelq2.f zgelqf.f\ + zgelqt.f zgelqt3.f zgels.f zgelsd.f zgelss.f zgelsy.f\ + zgemlq.f zgemlqt.f zgemqr.f zgemqrt.f zgeql2.f zgeqlf.f\ + zgeqp3.f zgeqr.f zgeqr2.f zgeqr2p.f zgeqrf.f zgeqrfp.f\ + zgeqrt.f zgeqrt2.f zgeqrt3.f zgerfs.f zgerfsx.f zgerq2.f\ + zgerqf.f zgesc2.f zgesdd.f zgesv.f zgesvd.f zgesvdx.f\ + zgesvj.f zgesvx.f zgesvxx.f zgetc2.f zgetf2.f zgetrf.f\ + zgetrf2.f zgetri.f zgetrs.f zgetsls.f zggbak.f zggbal.f\ + zgges.f zgges3.f zggesx.f zggev.f zggev3.f zggevx.f\ + zggglm.f zgghd3.f zgghrd.f zgglse.f zggqrf.f zggrqf.f\ + zggsvd3.f zggsvp3.f zgsvj0.f zgsvj1.f zgtcon.f zgtrfs.f\ + zgtsv.f zgtsvx.f zgttrf.f zgttrs.f zgtts2.f\ + zhb2st_kernels.f zhbev.f zhbev_2stage.f zhbevd.f\ + zhbevd_2stage.f zhbevx.f zhbevx_2stage.f zhbgst.f zhbgv.f\ + zhbgvd.f zhbgvx.f zhbtrd.f zhecon.f zhecon_3.f\ + zhecon_rook.f zheequb.f zheev.f zheev_2stage.f zheevd.f\ + zheevd_2stage.f zheevr.f zheevr_2stage.f zheevx.f\ + zheevx_2stage.f zhegs2.f zhegst.f zhegv.f zhegv_2stage.f\ + zhegvd.f zhegvx.f zherfs.f zherfsx.f zhesv.f zhesv_aa.f\ + zhesv_aa_2stage.f zhesv_rk.f zhesv_rook.f zhesvx.f\ + zhesvxx.f zheswapr.f zhetd2.f zhetf2.f zhetf2_rk.f\ + zhetf2_rook.f zhetrd.f zhetrd_2stage.f zhetrd_he2hb.f\ + zhetrf.f zhetrf_aa.f zhetrf_aa_2stage.f zhetrf_rk.f\ + zhetrf_rook.f zhetri.f zhetri2.f zhetri2x.f zhetri_3.f\ + zhetri_3x.f zhetri_rook.f zhetrs.f zhetrs2.f zhetrs_3.f\ + zhetrs_aa.f zhetrs_aa_2stage.f zhetrs_rook.f zhfrk.f\ + zhgeqz.f zhpcon.f zhpev.f zhpevd.f zhpevx.f zhpgst.f\ + zhpgv.f zhpgvd.f zhpgvx.f zhprfs.f zhpsv.f zhpsvx.f\ + zhptrd.f zhptrf.f zhptri.f zhptrs.f zhsein.f zhseqr.f\ + zla_gbamv.f zla_gbrcond_c.f zla_gbrcond_x.f\ + zla_gbrfsx_extended.f zla_gbrpvgrw.f zla_geamv.f\ + zla_gercond_c.f zla_gercond_x.f zla_gerfsx_extended.f\ + zla_gerpvgrw.f zla_heamv.f zla_hercond_c.f zla_hercond_x.f\ + zla_herfsx_extended.f zla_herpvgrw.f zla_lin_berr.f\ + zla_porcond_c.f zla_porcond_x.f zla_porfsx_extended.f\ + zla_porpvgrw.f zla_syamv.f zla_syrcond_c.f zla_syrcond_x.f\ + zla_syrfsx_extended.f zla_syrpvgrw.f zla_wwaddw.f zlabrd.f\ + zlacgv.f zlacn2.f zlacon.f zlacp2.f zlacpy.f zlacrm.f\ + zlacrt.f zladiv.f zlaed0.f zlaed7.f zlaed8.f zlaein.f\ + zlaesy.f zlaev2.f zlag2c.f zlags2.f zlagtm.f zlahef.f\ + zlahef_aa.f zlahef_rk.f zlahef_rook.f zlahqr.f zlahr2.f\ + zlaic1.f zlals0.f zlalsa.f zlalsd.f zlamswlq.f zlamtsqr.f\ + zlangb.f zlange.f zlangt.f zlanhb.f zlanhe.f zlanhf.f\ + zlanhp.f zlanhs.f zlanht.f zlansb.f zlansp.f zlansy.f\ + zlantb.f zlantp.f zlantr.f zlapll.f zlapmr.f zlapmt.f\ + zlaqgb.f zlaqge.f zlaqhb.f zlaqhe.f zlaqhp.f zlaqp2.f\ + zlaqps.f zlaqr0.f zlaqr1.f zlaqr2.f zlaqr3.f zlaqr4.f\ + zlaqr5.f zlaqsb.f zlaqsp.f zlaqsy.f zlar1v.f zlar2v.f\ + zlarcm.f zlarf.f zlarfb.f zlarfg.f zlarfgp.f zlarft.f\ + zlarfx.f zlarfy.f zlargv.f zlarnv.f zlarrv.f zlarscl2.f\ + zlartg.f zlartv.f zlarz.f zlarzb.f zlarzt.f zlascl.f\ + zlascl2.f zlaset.f zlasr.f zlassq.f zlaswlq.f zlaswp.f\ + zlasyf.f zlasyf_aa.f zlasyf_rk.f zlasyf_rook.f zlat2c.f\ + zlatbs.f zlatdf.f zlatps.f zlatrd.f zlatrs.f zlatrz.f\ + zlatsqr.f zlauu2.f zlauum.f zpbcon.f zpbequ.f zpbrfs.f\ + zpbstf.f zpbsv.f zpbsvx.f zpbtf2.f zpbtrf.f zpbtrs.f\ + zpftrf.f zpftri.f zpftrs.f zpocon.f zpoequ.f zpoequb.f\ + zporfs.f zporfsx.f zposv.f zposvx.f zposvxx.f zpotf2.f\ + zpotrf.f zpotrf2.f zpotri.f zpotrs.f zppcon.f zppequ.f\ + zpprfs.f zppsv.f zppsvx.f zpptrf.f zpptri.f zpptrs.f\ + zpstf2.f zpstrf.f zptcon.f zpteqr.f zptrfs.f zptsv.f\ + zptsvx.f zpttrf.f zpttrs.f zptts2.f zrot.f zspcon.f\ + zspmv.f zspr.f zsprfs.f zspsv.f zspsvx.f zsptrf.f zsptri.f\ + zsptrs.f zstedc.f zstegr.f zstein.f zstemr.f zsteqr.f\ + zsycon.f zsycon_3.f zsycon_rook.f zsyconv.f zsyconvf.f\ + zsyconvf_rook.f zsyequb.f zsymv.f zsyr.f zsyrfs.f\ + zsyrfsx.f zsysv.f zsysv_aa.f zsysv_aa_2stage.f zsysv_rk.f\ + zsysv_rook.f zsysvx.f zsysvxx.f zsyswapr.f zsytf2.f\ + zsytf2_rk.f zsytf2_rook.f zsytrf.f zsytrf_aa.f\ + zsytrf_aa_2stage.f zsytrf_rk.f zsytrf_rook.f zsytri.f\ + zsytri2.f zsytri2x.f zsytri_3.f zsytri_3x.f zsytri_rook.f\ + zsytrs.f zsytrs2.f zsytrs_3.f zsytrs_aa.f\ + zsytrs_aa_2stage.f zsytrs_rook.f ztbcon.f ztbrfs.f\ + ztbtrs.f ztfsm.f ztftri.f ztfttp.f ztfttr.f ztgevc.f\ + ztgex2.f ztgexc.f ztgsen.f ztgsja.f ztgsna.f ztgsy2.f\ + ztgsyl.f ztpcon.f ztplqt.f ztplqt2.f ztpmlqt.f ztpmqrt.f\ + ztpqrt.f ztpqrt2.f ztprfb.f ztprfs.f ztptri.f ztptrs.f\ + ztpttf.f ztpttr.f ztrcon.f ztrevc.f ztrevc3.f ztrexc.f\ + ztrrfs.f ztrsen.f ztrsna.f ztrsyl.f ztrti2.f ztrtri.f\ + ztrtrs.f ztrttf.f ztrttp.f ztzrzf.f zunbdb.f zunbdb1.f\ + zunbdb2.f zunbdb3.f zunbdb4.f zunbdb5.f zunbdb6.f zuncsd.f\ + zuncsd2by1.f zung2l.f zung2r.f zungbr.f zunghr.f zungl2.f\ + zunglq.f zungql.f zungqr.f zungr2.f zungrq.f zungtr.f\ + zunm22.f zunm2l.f zunm2r.f zunmbr.f zunmhr.f zunml2.f\ + zunmlq.f zunmql.f zunmqr.f zunmr2.f zunmr3.f zunmrq.f\ + zunmrz.f zunmtr.f zupgtr.f zupmtr.f LAPACK_COMPLEX_SRCF = iparam2stage.F zhetrd_hb2st.F \ No newline at end of file diff --git a/verification/src/dspl_verif.h b/verification/src/dspl_verif.h new file mode 100644 index 0000000..bb277d0 --- /dev/null +++ b/verification/src/dspl_verif.h @@ -0,0 +1,9 @@ +#ifndef DSPL_VERIF_H +#define DSPL_VERIF_H + +#define VERIF_STR_LEN 48 +#define VERIF_CHAR_POINT 46 +#define VERIF_LEVEL_COMPLEX 1E-11 +#define VERIF_LEVEL_DOUBLE 1E-12 + +#endif diff --git a/verification/src/writebin_readbin_verification_complex.c b/verification/src/writebin_readbin_verification_complex.c index acb925c..1ccf372 100644 --- a/verification/src/writebin_readbin_verification_complex.c +++ b/verification/src/writebin_readbin_verification_complex.c @@ -3,6 +3,10 @@ #include #include #include "dspl.h" +#include "dspl_verif.h" + +#define ARRAY_MAX_SIZE 1000000 + int main(int argc, char* argv[]) { @@ -19,15 +23,15 @@ int main(int argc, char* argv[]) hdspl = dspl_load(); /* Load DSPL function */ sprintf(str, "writebin and readbin for complex data:"); - while(strlen(str) < 48) - str[strlen(str)] = 46; + while(strlen(str) < VERIF_STR_LEN) + str[strlen(str)] = VERIF_CHAR_POINT; err = random_init(&rnd, RAND_TYPE_MRG32K3A, NULL); if(err != RES_OK) goto exit_error_code; - err = randi(&nx, 1, 1, 1000000, &rnd); + err = randi(&nx, 1, 1, ARRAY_MAX_SIZE, &rnd); if(err != RES_OK) goto exit_error_code; @@ -58,7 +62,7 @@ int main(int argc, char* argv[]) } /**************************** Verification *******************************/ - verr = verif_cmplx(pxd, pyd, ny, 1E-12, &derr); + verr = verif_cmplx(pxd, pyd, ny, VERIF_LEVEL_COMPLEX, &derr); if(verr != DSPL_VERIF_SUCCESS) goto exit_error_verif; @@ -75,6 +79,8 @@ exit_error_verif: exit_label: /************************ write str to log file **************************/ + printf("%s\n", str); + addlog(str, "verification.log"); if(pxd) free(pxd); @@ -84,7 +90,7 @@ exit_label: /* free dspl handle */ dspl_free(hdspl); - printf("%s\n", str); + return 0; } diff --git a/verification/src/writebin_readbin_verification_double.c b/verification/src/writebin_readbin_verification_double.c index 7538209..c8f23d3 100644 --- a/verification/src/writebin_readbin_verification_double.c +++ b/verification/src/writebin_readbin_verification_double.c @@ -3,12 +3,17 @@ #include #include #include "dspl.h" +#include "dspl_verif.h" + +#define ARRAY_MAX_SIZE 1000000 int main(int argc, char* argv[]) { void* hdspl; /* DSPL handle */ - double *pxd = NULL; - double *pyd = NULL; + double* pxd = NULL; + double* pyd = NULL; + char str[512] = {0}; + int nx, ny, tx, err, verr; double derr; @@ -17,13 +22,16 @@ int main(int argc, char* argv[]) hdspl = dspl_load(); /* Load DSPL function */ - printf("writebin and readbin for double data:.........."); + sprintf(str, "writebin and readbin for double data:"); + while(strlen(str) < VERIF_STR_LEN) + str[strlen(str)] = VERIF_CHAR_POINT; + err = random_init(&rnd, RAND_TYPE_MRG32K3A, NULL); if(err != RES_OK) goto exit_error_code; - err = randi(&nx, 1, 1, 1000000, &rnd); + err = randi(&nx, 1, 1, ARRAY_MAX_SIZE, &rnd); if(err != RES_OK) goto exit_error_code; @@ -48,20 +56,22 @@ int main(int argc, char* argv[]) err = ERROR_DAT_TYPE; goto exit_error_code; } - verr = verif(pxd, pyd, ny, 1E-12, &derr); + verr = verif(pxd, pyd, ny, VERIF_LEVEL_DOUBLE, &derr); if(verr != DSPL_VERIF_SUCCESS) goto exit_error_verif; - printf("ok (err = %12.4E)", derr); + sprintf(str, "%s ok (err = %12.4E)", str, derr); goto exit_label; exit_error_code: - printf("FAILED (with code = 0x%8x)", err); + sprintf(str, "%s FAILED (with code = 0x%8x)", str, err); goto exit_label; exit_error_verif: - printf("FAILED (err = %12.4E)", derr); + sprintf(str, "%s FAILED (err = %12.4E)", str, derr); exit_label: + addlog(str, "verification.log"); + printf("%s\n", str); if(pxd) free(pxd); if(pyd) diff --git a/verification/verif.sh b/verification/verif.sh index 89d3243..befa253 100644 --- a/verification/verif.sh +++ b/verification/verif.sh @@ -1,7 +1,14 @@ mingw32-make +rm -f bin/verification.log + cd bin for file in *.exe do "./$file" done +cd ../ +cp bin/verification.log verification.log +rm -f bin/verification.log +pause 5 +