@@ -386,8 +386,8 @@ static void s_usage(char *s)
386386 fprintf (stderr ," -T testmode, for use with testme.sh\n" );
387387 fprintf (stderr ," -v verbose, print all timings\n" );
388388 fprintf (stderr ," -c check results\n" );
389- fprintf (stderr ," -p print benchmark of final cutoffs in files \"multiplying\"\n" );
390- fprintf (stderr ," and \"squaring\" \n" );
389+ fprintf (stderr ," -p print benchmark of final cutoffs in files \"multiplying\", \n" );
390+ fprintf (stderr ," \"squaring\", \"readradix\", and \"writeradix\" \n" );
391391 fprintf (stderr ," -G [string] suffix for the filenames listed above\n" );
392392 fprintf (stderr ," Implies '-p'\n" );
393393 fprintf (stderr ," -b print benchmark of bncore.c\n" );
@@ -457,9 +457,11 @@ int main(int argc, char **argv)
457457 int opt ;
458458 struct cutoffs orig , updated ;
459459
460- FILE * squaring , * multiplying ;
460+ FILE * squaring , * multiplying , * readradix , * writeradix ;
461461 char mullog [256 ] = "multiplying" ;
462462 char sqrlog [256 ] = "squaring" ;
463+ char rcreadlog [256 ] = "readradix" ;
464+ char rcwritelog [256 ] = "writeradix" ;
463465 s_number_of_test_loops = 64 ;
464466 s_stabilization_extra = 3 ;
465467
@@ -525,6 +527,31 @@ int main(int argc, char **argv)
525527 break ;
526528 }
527529 }
530+
531+ for (i = 0 ; i < 255 ; i ++ ) {
532+ if (rcreadlog [i ] == '\0' ) {
533+ break ;
534+ }
535+ }
536+ for (j = 0 ; i < 255 ; j ++ , i ++ ) {
537+ rcreadlog [i ] = argv [opt ][j ];
538+ if (argv [opt ][j ] == '\0' ) {
539+ break ;
540+ }
541+ }
542+
543+ for (i = 0 ; i < 255 ; i ++ ) {
544+ if (rcwritelog [i ] == '\0' ) {
545+ break ;
546+ }
547+ }
548+ for (j = 0 ; i < 255 ; j ++ , i ++ ) {
549+ rcwritelog [i ] = argv [opt ][j ];
550+ if (argv [opt ][j ] == '\0' ) {
551+ break ;
552+ }
553+ }
554+
528555 break ;
529556 case 'b' :
530557 args .bncore = 1 ;
@@ -693,7 +720,7 @@ int main(int argc, char **argv)
693720 }
694721 /* TODO: add graphs for radix conversion, too? */
695722 if (args .print == 1 ) {
696- printf ("Printing data for graphing to \"%s\" and \"%s\"\n" ,mullog , sqrlog );
723+ printf ("Printing data for graphing to \"%s\", \"%s\", \"%s\", and \"%s\"\n" ,mullog , sqrlog , rcreadlog , rcwritelog );
697724
698725 multiplying = fopen (mullog , "w+" );
699726 if (multiplying == NULL ) {
@@ -707,6 +734,19 @@ int main(int argc, char **argv)
707734 exit (EXIT_FAILURE );
708735 }
709736
737+ readradix = fopen (rcreadlog , "w+" );
738+ if (readradix == NULL ) {
739+ fprintf (stderr , "Opening file \"%s\" failed\n" ,rcreadlog );
740+ exit (EXIT_FAILURE );
741+ }
742+
743+ writeradix = fopen (rcwritelog , "w+" );
744+ if (readradix == NULL ) {
745+ fprintf (stderr , "Opening file \"%s\" failed\n" ,rcwritelog );
746+ exit (EXIT_FAILURE );
747+ }
748+
749+
710750 for (x = 8 ; x < args .upper_limit_print ; x += args .increment_print ) {
711751 set_cutoffs (& max_cutoffs );
712752 t1 = s_time_mul (x );
@@ -728,23 +768,54 @@ int main(int argc, char **argv)
728768 printf ("SQR %d: %9" PRIu64 " %9" PRIu64 ", %9" PRIi64 "\n" , x , t1 , t2 , (int64_t )t2 - (int64_t )t1 );
729769 fflush (stdout );
730770 }
771+
772+
773+ set_cutoffs (& max_cutoffs );
774+ t1 = s_time_radix_conversion_read (x );
775+ set_cutoffs (& orig );
776+ t2 = s_time_radix_conversion_read (x );
777+ fprintf (readradix ,"%d: %9" PRIu64 " %9" PRIu64 ", %9" PRIi64 "\n" , x * MP_DIGIT_BIT , t1 , t2 , (int64_t )t2 - (int64_t )t1 );
778+ fflush (readradix );
779+ if (args .verbose == 1 ) {
780+ printf ("RCR %d: %9" PRIu64 " %9" PRIu64 ", %9" PRIi64 "\n" , x * MP_DIGIT_BIT , t1 , t2 , (int64_t )t2 - (int64_t )t1 );
781+ fflush (stdout );
782+ }
783+
784+ set_cutoffs (& max_cutoffs );
785+ t1 = s_time_radix_conversion_write (x );
786+ set_cutoffs (& orig );
787+ t2 = s_time_radix_conversion_write (x );
788+ fprintf (writeradix ,"%d: %9" PRIu64 " %9" PRIu64 ", %9" PRIi64 "\n" , x * MP_DIGIT_BIT , t1 , t2 ,
789+ (int64_t )t2 - (int64_t )t1 );
790+ fflush (writeradix );
791+ if (args .verbose == 1 ) {
792+ printf ("RCW %d: %9" PRIu64 " %9" PRIu64 ", %9" PRIi64 "\n" , x * MP_DIGIT_BIT , t1 , t2 , (int64_t )t2 - (int64_t )t1 );
793+ fflush (stdout );
794+ }
795+
731796 }
732- printf ("Finished. Data for graphing in \"%s\" and \"%s\"\n" ,mullog , sqrlog );
797+ printf ("Finished. Data for graphing in \"%s\", \"%s\", \"%s\", and \"%s\"\n" ,mullog , sqrlog , rcreadlog , rcwritelog );
733798 if (args .verbose == 1 ) {
734799 set_cutoffs (& orig );
735800 if (args .terse == 1 ) {
736- printf ("%d %d %d %d\n" ,
801+ printf ("%d %d %d %d %d %d \n" ,
737802 MP_MUL_KARATSUBA_CUTOFF ,
738803 MP_SQR_KARATSUBA_CUTOFF ,
739804 MP_MUL_TOOM_CUTOFF ,
740- MP_SQR_TOOM_CUTOFF );
805+ MP_SQR_TOOM_CUTOFF ,
806+ MP_RADIX_READ_CUTOFF ,
807+ MP_RADIX_WRITE_CUTOFF );
741808 } else {
742809 printf ("MUL_KARATSUBA_CUTOFF = %d\n" , MP_MUL_KARATSUBA_CUTOFF );
743810 printf ("SQR_KARATSUBA_CUTOFF = %d\n" , MP_SQR_KARATSUBA_CUTOFF );
744811 printf ("MUL_TOOM_CUTOFF = %d\n" , MP_MUL_TOOM_CUTOFF );
745812 printf ("SQR_TOOM_CUTOFF = %d\n" , MP_SQR_TOOM_CUTOFF );
813+ printf ("MP_RADIX_READ_CUTOFF = %d\n" , MP_RADIX_READ_CUTOFF );
814+ printf ("MP_RADIX_WRITE_CUTOFF = %d\n" , MP_RADIX_WRITE_CUTOFF );
746815 }
747816 }
817+ fclose (readradix );
818+ fclose (writeradix );
748819 }
749820 exit (EXIT_SUCCESS );
750821}
0 commit comments