add a small sort comparison tool
							parent
							
								
									ede2b798f6
								
							
						
					
					
						commit
						4ffcf031fa
					
				|  | @ -0,0 +1,139 @@ | |||
| # ./v -prod -cc clang-12 cmd/tools/bench/sorting.v | ||||
| # for seqkind in increasing decreasing random; do  | ||||
| #   for how in qsort aswcc; do | ||||
| #     for x in 10_000_000 1000_000 100_000 10_000 1000 100 10 ; do | ||||
| #       ./cmd/tools/bench/sorting $how $x $seqkind; | ||||
| #     done; | ||||
| #   done; | ||||
| #   echo --------------------------------; | ||||
| # done > cmd/tools/bench/sorting.results.txt | ||||
| 
 | ||||
| > a.len:     10000000 | a:                              [1, 2, 3, 4, 5, 6, 7] ... [9999994, 9999995, 9999996, 9999997, 9999998, 9999999, 10000000] | ||||
| > a.len:     10000000 | a:                              [1, 2, 3, 4, 5, 6, 7] ... [9999994, 9999995, 9999996, 9999997, 9999998, 9999999, 10000000] | ||||
| SPENT  461.034 ms in qsort 10000000 increasing | ||||
| > a.len:      1000000 | a:                              [1, 2, 3, 4, 5, 6, 7] ... [999994, 999995, 999996, 999997, 999998, 999999, 1000000] | ||||
| > a.len:      1000000 | a:                              [1, 2, 3, 4, 5, 6, 7] ... [999994, 999995, 999996, 999997, 999998, 999999, 1000000] | ||||
| SPENT   40.616 ms in qsort 1000000 increasing | ||||
| > a.len:       100000 | a:                              [1, 2, 3, 4, 5, 6, 7] ... [99994, 99995, 99996, 99997, 99998, 99999, 100000] | ||||
| > a.len:       100000 | a:                              [1, 2, 3, 4, 5, 6, 7] ... [99994, 99995, 99996, 99997, 99998, 99999, 100000] | ||||
| SPENT    4.415 ms in qsort 100000 increasing | ||||
| > a.len:        10000 | a:                              [1, 2, 3, 4, 5, 6, 7] ... [9994, 9995, 9996, 9997, 9998, 9999, 10000]        | ||||
| > a.len:        10000 | a:                              [1, 2, 3, 4, 5, 6, 7] ... [9994, 9995, 9996, 9997, 9998, 9999, 10000]        | ||||
| SPENT    0.304 ms in qsort 10000 increasing | ||||
| > a.len:         1000 | a:                              [1, 2, 3, 4, 5, 6, 7] ... [994, 995, 996, 997, 998, 999, 1000]               | ||||
| > a.len:         1000 | a:                              [1, 2, 3, 4, 5, 6, 7] ... [994, 995, 996, 997, 998, 999, 1000]               | ||||
| SPENT    0.042 ms in qsort 1000 increasing | ||||
| > a.len:          100 | a:                              [1, 2, 3, 4, 5, 6, 7] ... [94, 95, 96, 97, 98, 99, 100]                      | ||||
| > a.len:          100 | a:                              [1, 2, 3, 4, 5, 6, 7] ... [94, 95, 96, 97, 98, 99, 100]                      | ||||
| SPENT    0.009 ms in qsort 100 increasing | ||||
| > a.len:           10 | a:                              [1, 2, 3, 4, 5, 6, 7] ... [4, 5, 6, 7, 8, 9, 10]                             | ||||
| > a.len:           10 | a:                              [1, 2, 3, 4, 5, 6, 7] ... [4, 5, 6, 7, 8, 9, 10]                             | ||||
| SPENT    0.005 ms in qsort 10 increasing | ||||
| > a.len:     10000000 | a:                              [1, 2, 3, 4, 5, 6, 7] ... [9999994, 9999995, 9999996, 9999997, 9999998, 9999999, 10000000] | ||||
| > a.len:     10000000 | a:                              [1, 2, 3, 4, 5, 6, 7] ... [9999994, 9999995, 9999996, 9999997, 9999998, 9999999, 10000000] | ||||
| SPENT  109.615 ms in aswcc 10000000 increasing | ||||
| > a.len:      1000000 | a:                              [1, 2, 3, 4, 5, 6, 7] ... [999994, 999995, 999996, 999997, 999998, 999999, 1000000] | ||||
| > a.len:      1000000 | a:                              [1, 2, 3, 4, 5, 6, 7] ... [999994, 999995, 999996, 999997, 999998, 999999, 1000000] | ||||
| SPENT   10.520 ms in aswcc 1000000 increasing | ||||
| > a.len:       100000 | a:                              [1, 2, 3, 4, 5, 6, 7] ... [99994, 99995, 99996, 99997, 99998, 99999, 100000] | ||||
| > a.len:       100000 | a:                              [1, 2, 3, 4, 5, 6, 7] ... [99994, 99995, 99996, 99997, 99998, 99999, 100000] | ||||
| SPENT    1.038 ms in aswcc 100000 increasing | ||||
| > a.len:        10000 | a:                              [1, 2, 3, 4, 5, 6, 7] ... [9994, 9995, 9996, 9997, 9998, 9999, 10000]        | ||||
| > a.len:        10000 | a:                              [1, 2, 3, 4, 5, 6, 7] ... [9994, 9995, 9996, 9997, 9998, 9999, 10000]        | ||||
| SPENT    0.106 ms in aswcc 10000 increasing | ||||
| > a.len:         1000 | a:                              [1, 2, 3, 4, 5, 6, 7] ... [994, 995, 996, 997, 998, 999, 1000]               | ||||
| > a.len:         1000 | a:                              [1, 2, 3, 4, 5, 6, 7] ... [994, 995, 996, 997, 998, 999, 1000]               | ||||
| SPENT    0.016 ms in aswcc 1000 increasing | ||||
| > a.len:          100 | a:                              [1, 2, 3, 4, 5, 6, 7] ... [94, 95, 96, 97, 98, 99, 100]                      | ||||
| > a.len:          100 | a:                              [1, 2, 3, 4, 5, 6, 7] ... [94, 95, 96, 97, 98, 99, 100]                      | ||||
| SPENT    0.006 ms in aswcc 100 increasing | ||||
| > a.len:           10 | a:                              [1, 2, 3, 4, 5, 6, 7] ... [4, 5, 6, 7, 8, 9, 10]                             | ||||
| > a.len:           10 | a:                              [1, 2, 3, 4, 5, 6, 7] ... [4, 5, 6, 7, 8, 9, 10]                             | ||||
| SPENT    0.005 ms in aswcc 10 increasing | ||||
| -------------------------------- | ||||
| > a.len:      9999999 | a: [9999999, 9999998, 9999997, 9999996, 9999995, 9999994, 9999993] ... [7, 6, 5, 4, 3, 2, 1]                              | ||||
| > a.len:      9999999 | a:                              [1, 2, 3, 4, 5, 6, 7] ... [9999993, 9999994, 9999995, 9999996, 9999997, 9999998, 9999999] | ||||
| SPENT  452.092 ms in qsort 10000000 decreasing | ||||
| > a.len:       999999 | a: [999999, 999998, 999997, 999996, 999995, 999994, 999993] ... [7, 6, 5, 4, 3, 2, 1]                              | ||||
| > a.len:       999999 | a:                              [1, 2, 3, 4, 5, 6, 7] ... [999993, 999994, 999995, 999996, 999997, 999998, 999999] | ||||
| SPENT   39.840 ms in qsort 1000000 decreasing | ||||
| > a.len:        99999 | a:  [99999, 99998, 99997, 99996, 99995, 99994, 99993] ... [7, 6, 5, 4, 3, 2, 1]                              | ||||
| > a.len:        99999 | a:                              [1, 2, 3, 4, 5, 6, 7] ... [99993, 99994, 99995, 99996, 99997, 99998, 99999]  | ||||
| SPENT    3.609 ms in qsort 100000 decreasing | ||||
| > a.len:         9999 | a:         [9999, 9998, 9997, 9996, 9995, 9994, 9993] ... [7, 6, 5, 4, 3, 2, 1]                              | ||||
| > a.len:         9999 | a:                              [1, 2, 3, 4, 5, 6, 7] ... [9993, 9994, 9995, 9996, 9997, 9998, 9999]         | ||||
| SPENT    0.430 ms in qsort 10000 decreasing | ||||
| > a.len:          999 | a:                [999, 998, 997, 996, 995, 994, 993] ... [7, 6, 5, 4, 3, 2, 1]                              | ||||
| > a.len:          999 | a:                              [1, 2, 3, 4, 5, 6, 7] ... [993, 994, 995, 996, 997, 998, 999]                | ||||
| SPENT    0.058 ms in qsort 1000 decreasing | ||||
| > a.len:           99 | a:                       [99, 98, 97, 96, 95, 94, 93] ... [7, 6, 5, 4, 3, 2, 1]                              | ||||
| > a.len:           99 | a:                              [1, 2, 3, 4, 5, 6, 7] ... [93, 94, 95, 96, 97, 98, 99]                       | ||||
| SPENT    0.013 ms in qsort 100 decreasing | ||||
| > a.len:            9 | a:                              [9, 8, 7, 6, 5, 4, 3] ... [7, 6, 5, 4, 3, 2, 1]                              | ||||
| > a.len:            9 | a:                              [1, 2, 3, 4, 5, 6, 7] ... [3, 4, 5, 6, 7, 8, 9]                              | ||||
| SPENT    0.006 ms in qsort 10 decreasing | ||||
| > a.len:      9999999 | a: [9999999, 9999998, 9999997, 9999996, 9999995, 9999994, 9999993] ... [7, 6, 5, 4, 3, 2, 1]                              | ||||
| > a.len:      9999999 | a:                              [1, 2, 3, 4, 5, 6, 7] ... [9999993, 9999994, 9999995, 9999996, 9999997, 9999998, 9999999] | ||||
| SPENT 2313.316 ms in aswcc 10000000 decreasing | ||||
| > a.len:       999999 | a: [999999, 999998, 999997, 999996, 999995, 999994, 999993] ... [7, 6, 5, 4, 3, 2, 1]                              | ||||
| > a.len:       999999 | a:                              [1, 2, 3, 4, 5, 6, 7] ... [999993, 999994, 999995, 999996, 999997, 999998, 999999] | ||||
| SPENT  203.740 ms in aswcc 1000000 decreasing | ||||
| > a.len:        99999 | a:  [99999, 99998, 99997, 99996, 99995, 99994, 99993] ... [7, 6, 5, 4, 3, 2, 1]                              | ||||
| > a.len:        99999 | a:                              [1, 2, 3, 4, 5, 6, 7] ... [99993, 99994, 99995, 99996, 99997, 99998, 99999]  | ||||
| SPENT   17.406 ms in aswcc 100000 decreasing | ||||
| > a.len:         9999 | a:         [9999, 9998, 9997, 9996, 9995, 9994, 9993] ... [7, 6, 5, 4, 3, 2, 1]                              | ||||
| > a.len:         9999 | a:                              [1, 2, 3, 4, 5, 6, 7] ... [9993, 9994, 9995, 9996, 9997, 9998, 9999]         | ||||
| SPENT    1.467 ms in aswcc 10000 decreasing | ||||
| > a.len:          999 | a:                [999, 998, 997, 996, 995, 994, 993] ... [7, 6, 5, 4, 3, 2, 1]                              | ||||
| > a.len:          999 | a:                              [1, 2, 3, 4, 5, 6, 7] ... [993, 994, 995, 996, 997, 998, 999]                | ||||
| SPENT    0.137 ms in aswcc 1000 decreasing | ||||
| > a.len:           99 | a:                       [99, 98, 97, 96, 95, 94, 93] ... [7, 6, 5, 4, 3, 2, 1]                              | ||||
| > a.len:           99 | a:                              [1, 2, 3, 4, 5, 6, 7] ... [93, 94, 95, 96, 97, 98, 99]                       | ||||
| SPENT    0.015 ms in aswcc 100 decreasing | ||||
| > a.len:            9 | a:                              [9, 8, 7, 6, 5, 4, 3] ... [7, 6, 5, 4, 3, 2, 1]                              | ||||
| > a.len:            9 | a:                              [1, 2, 3, 4, 5, 6, 7] ... [3, 4, 5, 6, 7, 8, 9]                              | ||||
| SPENT    0.005 ms in aswcc 10 decreasing | ||||
| -------------------------------- | ||||
| > a.len:     10000000 | a: [5860191, 5357534, 516370, 444218, 4782576, 3296560, 9597422] ... [9885313, 9298812, 1016850, 595010, 3994125, 6996906, 8189289] | ||||
| > a.len:     10000000 | a:                              [1, 2, 3, 3, 4, 4, 5] ... [9999994, 9999994, 9999995, 9999996, 9999997, 9999998, 9999998] | ||||
| SPENT 1490.203 ms in qsort 10000000 random | ||||
| > a.len:      1000000 | a: [564075, 516370, 444218, 588272, 209384, 864959, 195323] ... [363186, 584539, 475461, 794706, 23108, 232638, 590085] | ||||
| > a.len:      1000000 | a:                              [1, 1, 1, 1, 1, 3, 3] ... [999990, 999990, 999991, 999993, 999995, 999997, 999998] | ||||
| SPENT  128.973 ms in qsort 1000000 random | ||||
| > a.len:       100000 | a:  [93023, 39787, 90906, 63984, 21510, 44477, 62876] ... [61585, 45923, 26539, 20911, 51779, 34695, 29023]  | ||||
| > a.len:       100000 | a:                              [1, 1, 2, 3, 4, 5, 7] ... [99991, 99992, 99994, 99994, 99998, 99998, 99999]  | ||||
| SPENT   10.583 ms in qsort 100000 random | ||||
| > a.len:        10000 | a:            [7019, 733, 7844, 97, 1994, 2517, 8308] ... [1293, 4423, 8853, 6021, 9549, 4161, 3700]         | ||||
| > a.len:        10000 | a:                              [1, 1, 2, 2, 2, 3, 3] ... [9992, 9992, 9994, 9995, 9998, 9998, 9999]         | ||||
| SPENT    0.873 ms in qsort 10000 random | ||||
| > a.len:         1000 | a:                [863, 875, 274, 733, 794, 496, 494] ... [530, 615, 371, 561, 800, 501, 585]                | ||||
| > a.len:         1000 | a:                              [2, 3, 4, 4, 5, 6, 6] ... [994, 994, 994, 994, 996, 997, 998]                | ||||
| SPENT    0.079 ms in qsort 1000 random | ||||
| > a.len:          100 | a:                        [95, 18, 58, 26, 6, 48, 67] ... [11, 80, 16, 60, 58, 71, 1]                        | ||||
| > a.len:          100 | a:                              [1, 3, 4, 5, 5, 6, 6] ... [94, 95, 95, 97, 97, 98, 99]                       | ||||
| SPENT    0.010 ms in qsort 100 random | ||||
| > a.len:           10 | a:                              [4, 6, 3, 8, 1, 4, 7] ... [8, 1, 4, 7, 5, 8, 4]                              | ||||
| > a.len:           10 | a:                              [1, 3, 4, 4, 4, 5, 6] ... [4, 4, 5, 6, 7, 8, 8]                              | ||||
| SPENT    0.005 ms in qsort 10 random | ||||
| > a.len:     10000000 | a: [5860191, 5357534, 516370, 444218, 4782576, 3296560, 9597422] ... [9885313, 9298812, 1016850, 595010, 3994125, 6996906, 8189289] | ||||
| > a.len:     10000000 | a:                              [1, 2, 3, 3, 4, 4, 5] ... [9999994, 9999994, 9999995, 9999996, 9999997, 9999998, 9999998] | ||||
| SPENT 6279.383 ms in aswcc 10000000 random | ||||
| > a.len:      1000000 | a: [564075, 516370, 444218, 588272, 209384, 864959, 195323] ... [363186, 584539, 475461, 794706, 23108, 232638, 590085] | ||||
| > a.len:      1000000 | a:                              [1, 1, 1, 1, 1, 3, 3] ... [999990, 999990, 999991, 999993, 999995, 999997, 999998] | ||||
| SPENT  369.465 ms in aswcc 1000000 random | ||||
| > a.len:       100000 | a:  [93023, 39787, 90906, 63984, 21510, 44477, 62876] ... [61585, 45923, 26539, 20911, 51779, 34695, 29023]  | ||||
| > a.len:       100000 | a:                              [1, 1, 2, 3, 4, 5, 7] ... [99991, 99992, 99994, 99994, 99998, 99998, 99999]  | ||||
| SPENT   24.082 ms in aswcc 100000 random | ||||
| > a.len:        10000 | a:            [7019, 733, 7844, 97, 1994, 2517, 8308] ... [1293, 4423, 8853, 6021, 9549, 4161, 3700]         | ||||
| > a.len:        10000 | a:                              [1, 1, 2, 2, 2, 3, 3] ... [9992, 9992, 9994, 9995, 9998, 9998, 9999]         | ||||
| SPENT    1.861 ms in aswcc 10000 random | ||||
| > a.len:         1000 | a:                [863, 875, 274, 733, 794, 496, 494] ... [530, 615, 371, 561, 800, 501, 585]                | ||||
| > a.len:         1000 | a:                              [2, 3, 4, 4, 5, 6, 6] ... [994, 994, 994, 994, 996, 997, 998]                | ||||
| SPENT    0.150 ms in aswcc 1000 random | ||||
| > a.len:          100 | a:                        [95, 18, 58, 26, 6, 48, 67] ... [11, 80, 16, 60, 58, 71, 1]                        | ||||
| > a.len:          100 | a:                              [1, 3, 4, 5, 5, 6, 6] ... [94, 95, 95, 97, 97, 98, 99]                       | ||||
| SPENT    0.016 ms in aswcc 100 random | ||||
| > a.len:           10 | a:                              [4, 6, 3, 8, 1, 4, 7] ... [8, 1, 4, 7, 5, 8, 4]                              | ||||
| > a.len:           10 | a:                              [1, 3, 4, 4, 4, 5, 6] ... [4, 4, 5, 6, 7, 8, 8]                              | ||||
| SPENT    0.005 ms in aswcc 10 random | ||||
| -------------------------------- | ||||
|  | @ -0,0 +1,79 @@ | |||
| module main | ||||
| 
 | ||||
| // This program compares the performance of the native C.qsort function,
 | ||||
| // used by the a.sort/0 method, vs the more flexible and platform independent
 | ||||
| // (at the cost of being slightly slower) C.vqsort_r (adapted from musl),
 | ||||
| // used by the a.sort_with_compare_context/2 method.
 | ||||
| //
 | ||||
| // Usage:
 | ||||
| // ./v -prod -cc gcc cmd/tools/bench/sorting.v
 | ||||
| // for seqkind in increasing decreasing random; do
 | ||||
| //   for how in qsort aswcc; do
 | ||||
| //     for x in 10_000_000 1000_000 100_000 10_000 1000 100 10 ; do
 | ||||
| //       ./cmd/tools/bench/sorting $how $x $seqkind;
 | ||||
| //     done;
 | ||||
| //   done;
 | ||||
| //   echo --------------------------------;
 | ||||
| // done > cmd/tools/bench/sorting.results.txt
 | ||||
| import os | ||||
| import rand | ||||
| import benchmark | ||||
| 
 | ||||
| fn my_context_compare_ints(const_a &int, const_b &int, context voidptr) int { | ||||
| 	res := *const_a - *const_b | ||||
| 	if res < 0 { | ||||
| 		return -1 | ||||
| 	} | ||||
| 	if res > 0 { | ||||
| 		return 1 | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
| 
 | ||||
| fn generate(kind string, mut a []int, maxn int) { | ||||
| 	match kind { | ||||
| 		'random' { | ||||
| 			for _ in 0 .. maxn { | ||||
| 				a << rand.int_in_range(1, maxn) or { 0 } | ||||
| 			} | ||||
| 		} | ||||
| 		'increasing' { | ||||
| 			for idx in 0 .. maxn { | ||||
| 				a << idx + 1 | ||||
| 			} | ||||
| 		} | ||||
| 		'decreasing' { | ||||
| 			for idx in 1 .. maxn { | ||||
| 				a << maxn - idx | ||||
| 			} | ||||
| 		} | ||||
| 		else {} | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| fn sort(how string, mut a []int) { | ||||
| 	match how { | ||||
| 		'aswcc' { | ||||
| 			a.sort_with_compare_context(my_context_compare_ints, voidptr(3)) | ||||
| 		} | ||||
| 		'qsort' { | ||||
| 			a.sort() | ||||
| 		} | ||||
| 		else {} | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| fn main() { | ||||
| 	rand.seed([u32(0), 1]) | ||||
| 	how := os.args[1] or { 'qsort' } | ||||
| 	maxn := os.args[2] or { '1000' }.int() | ||||
| 	kind := os.args[3] or { 'random' } | ||||
| 	// println('> how: $how | maxn: $maxn')
 | ||||
| 	mut a := []int{cap: maxn} | ||||
| 	generate(kind, mut a, maxn) | ||||
| 	println('> a.len: ${a.len:12} | a: ${a#[0..7]:50} ... ${a#[-7..]:-50}') | ||||
| 	mut b := benchmark.start() | ||||
| 	sort(how, mut a) | ||||
| 	println('> a.len: ${a.len:12} | a: ${a#[0..7]:50} ... ${a#[-7..]:-50}') | ||||
| 	b.measure('$how $maxn $kind') | ||||
| } | ||||
		Loading…
	
		Reference in New Issue