--- include: rocblas_common.yaml include: known_bugs.yaml Definitions: - &size_t_x_range # - { N: 1073741900, incx: 4 } # high op count: N * incx overflows uint32_t and int32_t - { N: 1048600, incx: 4096 } # low op count: N * incx overflows uint32_t and int32_t - &size_t_xy_range - { N: 1048600, incx: 4096, incy: 1 } - { N: 1048600, incx: 1, incy: 4096 } # TODO add back when workaround for OpenBLAS on windows negative overflow failures #- { N: 1048600, incx: -4096, incy: 1 } #- { N: 1048600, incx: 1, incy: -4096 } - &N_range - [ -1, 0, 5, 10, 500, 1000, 1024, 1025, 7111, 10000, 33792 ] - &incx_range_small - [1, 2] - &incx_range - [-1, 0, 1, 2] - &incx_incy_range - { incx: 1, incy: 1 } - { incx: 1, incy: 2 } - { incx: 2, incy: 1 } - { incx: 1, incy: -1 } - { incx: -1, incy: 1 } - { incx: -3, incy: -3 } - { incx: 0, incy: 1 } - { incx: 0, incy: 0 } # - { incx: 1, incy: 0 } # Indeterminate when y is output - &size_t_pos_x_range - { N: 4, incx: *c_pos_x2_overflow_int32 } # small operation count, should overflow x - &size_t_pos_neg_x_range - { N: 4, incx: *c_pos_x2_overflow_int32 } # small operation count, should overflow x - { N: 4, incx: *c_neg_x2_overflow_int32 } - &size_t_pos_neg_xy_range - { N: 4, incx: *c_pos_x2_overflow_int32, incy: 1 } # small operation count, should overflow x - { N: 4, incx: *c_neg_x2_overflow_int32, incy: 1 } # small operation count, should overflow x - { N: 4, incx: 1, incy: *c_pos_x2_overflow_int32 } # small operation count, should overflow y - { N: 4, incx: 1, incy: *c_neg_x2_overflow_int32 } # small operation count, should overflow y - &incx_incy_range_x_y_output - { incx: 1, incy: 1 } - { incx: 1, incy: 2 } - { incx: 2, incy: 1 } - { incx: 1, incy: -1 } - { incx: -3, incy: 1 } - { incx: -3, incy: -3 } # - { incx: 0, incy: 0 } # Indeterminate for swap # - { incx: 0, incy: 1 } # Indeterminate when x is output (swap) # - { incx: 1, incy: 0 } # Indeterminate when y is output - &incx_incy_range_y_output - { incx: 1, incy: 1 } - { incx: 1, incy: 2 } - { incx: 2, incy: 1 } - { incx: 1, incy: -3 } - { incx: -1, incy: 1 } - { incx: -3, incy: -3 } - { incx: 0, incy: 1 } # - { incx: 0, incy: 0 } # Indeterminate for axpy # - { incx: 1, incy: 0 } # Indeterminate when y is output - &incx_incy_range_small - { incx: 1, incy: 1 } - { incx: -3, incy: -3 } - &alpha_beta_range - { alpha: 1.0, beta: 0.0 } - { alpha: 2.0, beta: -1.0 } - { alpha: 0.0, beta: 0.0 } - &alphai_betai_range - { alphai: 0.0 } - { alphai: 1.0} - { alphai: 2.0 } - &alpha_beta_range_small - { alpha: 0.5, beta: 0.5 } - &complex_alpha_range_small - { alpha: 4.0, alphai: 0.0 } - { alpha: 0.0, alphai: 4.0 } - { alpha: 3.0, alphai: -2.0 } Tests: # for bad_arg no arguments should be used by test code - name: blas1_bad_arg category: quick api: [ C, FORTRAN, FORTRAN_64 ] function: - dot_bad_arg: *half_bfloat_single_double_complex_real_precisions - dot_batched_bad_arg: *half_bfloat_single_double_complex_real_precisions - dot_strided_batched_bad_arg: *half_bfloat_single_double_complex_real_precisions - dotc_bad_arg: *single_double_precisions_complex - dotc_batched_bad_arg: *half_bfloat_single_double_complex_real_precisions - dotc_strided_batched_bad_arg: *half_bfloat_single_double_complex_real_precisions - dot_ex: *dot_ex_precisions - dotc_ex: *dot_ex_precisions - dot_batched_ex: *dot_ex_precisions - dotc_batched_ex: *dot_ex_precisions - dot_strided_batched_ex: *dot_ex_precisions - dotc_strided_batched_ex: *dot_ex_precisions - name: dot_ILP64 category: pre_checkin N: [ 64 ] arguments: - { incx: 1, incy: 1, batch_count: 1 } api: [ FORTRAN_64 ] function: - dot: *half_bfloat_single_double_complex_real_precisions - dot_ex: *dot_ex_precisions - dot_batched: *single_precision - dot_batched_ex: *single_precision - dot_strided_batched: *single_precision - dot_strided_batched_ex: *single_precision - name: dot_ILP64 category: stress arguments: - { N: 2147483649, incx: 1, incy: 1, batch_count: 1 } - { N: 2147483649, incx: 1, incy: -1, batch_count: 1 } api: [ C_64 ] os_flags: [ LINUX ] initialization: hpl pointer_mode_host: false function: - dot: *single_precision - dot_ex: *single_precision - dot_ex: *single_in_double_out_precision - dot_batched: *single_precision - dot_batched_ex: *single_precision - dot_strided_batched: *single_precision - dot_strided_batched_ex: *single_precision - name: dot_ILP64 category: stress arguments: - { N: 2, incx: 2147483649, incy: 1, batch_count: 1 } - { N: 2, incx: 1, incy: 2147483649, batch_count: 1 } - { N: 2, incx: 1, incy: -2147483649, batch_count: 1 } - { N: 3, incx: -1, incy: 1, stride_x: 3, stride_y: 3, batch_count: *c_grid_yz_require_passes } api: [ C_64 ] os_flags: [ LINUX ] function: - dot: *half_precision - dot_ex: *half_precision - dot_batched: *half_precision - dot_batched_ex: *half_precision - dot_strided_batched: *half_precision - dot_strided_batched_ex: *half_precision # All functions with incx, incy, no alpha # fortran - name: blas1 category: quick N: [ -1, 0, 1025] incx_incy: *incx_incy_range_small api: [FORTRAN, C_64] function: - dot: *half_bfloat_single_double_complex_real_precisions - dotc: *single_double_precisions_complex - dot_ex: *dot_ex_precisions - dotc_ex: *half_bfloat_single_double_complex_real_precisions - name: blas1_batched category: quick N: [ -1, 0, 1025] incx_incy: *incx_incy_range_small batch_count: [-1, 0, 5] api: FORTRAN function: - dot_batched: *half_bfloat_single_double_complex_real_precisions - dotc_batched: *single_double_precisions_complex - dot_batched_ex: *half_bfloat_single_double_complex_real_precisions - dotc_batched_ex: *half_bfloat_single_double_complex_real_precisions - name: blas1_strided_batched category: quick N: [ -1, 0, 1025] incx_incy: *incx_incy_range_small batch_count: [-1, 0, 5] stride_scale: [1, 2] api: FORTRAN function: - dot_strided_batched: *half_bfloat_single_double_complex_real_precisions - dotc_strided_batched: *single_double_precisions_complex - dotc_strided_batched_ex: *half_bfloat_single_double_complex_real_precisions # quick - name: blas1_HMM category: HMM N: [ -1, 0, 1025] incx_incy: *incx_incy_range function: - dot: *half_bfloat_single_double_complex_real_precisions HMM: true - name: blas1 category: quick N: [ -1, 0, 1025, 13000] incx_incy: *incx_incy_range function: - dot: *half_bfloat_single_double_complex_real_precisions - dotc: *single_double_precisions_complex - dot_ex: *dot_ex_precisions - dotc_ex: *half_bfloat_single_double_complex_real_precisions - name: blas1_batched category: quick N: [ -1, 0, 1023, 13000] incx_incy: *incx_incy_range batch_count: [-1, 0, 257] function: - dot_batched: *half_bfloat_single_double_complex_real_precisions - dotc_batched: *single_double_precisions_complex - dot_batched_ex: *half_bfloat_single_double_complex_real_precisions - dotc_batched_ex: *half_bfloat_single_double_complex_real_precisions - name: blas1_strided_batched category: quick N: [ -1, 0, 1023, 13000] incx_incy: *incx_incy_range batch_count: [-1, 0, 257] stride_scale: [ 1 ] function: - dot_strided_batched: *half_bfloat_single_double_complex_real_precisions - dotc_strided_batched: *single_double_precisions_complex - dot_strided_batched_ex: *half_bfloat_single_double_complex_real_precisions - dotc_strided_batched_ex: *half_bfloat_single_double_complex_real_precisions # quick dot one block transitions (halfs excluded) - name: blas1 category: quick N: [ 10001, 13001, 16001, 33000 ] incx_incy: *incx_incy_range_small function: - dot: *single_double_precisions_complex - dotc: *single_double_precisions_complex - dot_ex: *single_double_precisions_complex - dotc_ex: *single_double_precisions_complex # quick # dot alt algorithm, algo=1 forces x*x with incx=incy to test special case kernel - name: blas1 category: quick N: [ -1, 0, 1025, 16001] incx_incy: *incx_incy_range_small algo: 1 function: - dot: *bfloat_single_double_complex_real_precisions - dotc: *bfloat_single_double_complex_real_precisions - dot_ex: *bfloat_single_double_complex_real_precisions - dotc_ex: *bfloat_single_double_complex_real_precisions - name: blas1_batched category: quick N: [ -1, 0, 1025, 16000] incx_incy: *incx_incy_range_small batch_count: [-1, 0, 257] algo: 1 function: - dot_batched: *bfloat_single_double_complex_real_precisions - dotc_batched: *bfloat_single_double_complex_real_precisions - dot_batched_ex: *bfloat_single_double_complex_real_precisions - dotc_batched_ex: *bfloat_single_double_complex_real_precisions - name: blas1_strided_batched category: quick N: [ -1, 0, 1025, 15999] incx_incy: *incx_incy_range_small batch_count: [-1, 0, 257] stride_scale: [ 1 ] algo: 1 function: - dot_strided_batched: *bfloat_single_double_complex_real_precisions - dotc_strided_batched: *bfloat_single_double_complex_real_precisions - dot_strided_batched_ex: *bfloat_single_double_complex_real_precisions - dotc_strided_batched_ex: *bfloat_single_double_complex_real_precisions - name: blas1 category: quick N: [-1, 0, 511] # N is kept less than 512 to avoid rounding errors in half precision incx_incy: *incx_incy_range_small algo: 1 function: - dot: *half_precision - dotc: *half_precision - dot_ex: *half_precision - dotc_ex: *half_precision - name: blas1_batched category: quick N: [-1, 0, 511] # N is kept less than 512 to avoid rounding errors in half precision incx_incy: *incx_incy_range_small batch_count: [-1, 0, 257] algo: 1 function: - dot_batched: *half_precision - dotc_batched: *half_precision - dot_batched_ex: *half_precision - dotc_batched_ex: *half_precision - name: blas1_strided_batched category: quick N: [-1, 0, 511] # N is kept less than 512 to avoid rounding errors in half precision incx_incy: *incx_incy_range_small batch_count: [-1, 0, 125] stride_scale: [ 1 ] algo: 1 function: - dot_strided_batched: *half_precision - dotc_strided_batched: *half_precision - dot_strided_batched_ex: *half_precision - dotc_strided_batched_ex: *half_precision # pre_checkin - name: dot_reduce_kernel category: pre_checkin N: [ 10100103 ] incx: 1 incy: 1 batch_count: [3] initialization: hpl function: # N is so large excluding bfloat16 as only 2-3 digits precision and result may be in 100s range - dot: *half_single_double_precisions_complex_real - dot_ex: *half_single_double_precisions_complex_real - dotc: *half_single_double_precisions_complex_real - dotc_ex: *half_single_double_precisions_complex_real - dot_batched: *half_single_double_precisions_complex_real - dot_batched_ex: *half_single_double_precisions_complex_real - dotc_batched: *half_single_double_precisions_complex_real - dotc_batched_ex: *half_single_double_precisions_complex_real - name: blas1_dot_internal_api category: pre_checkin N: [ 1000 ] # must be small enough for single block so no workspace required (see testing code) incx_incy: *incx_incy_range_small alpha: [ 1 ] stride_scale: [ 1 ] lda: *c_pos_overflow_int32 # lda, ldb used for internal api offset args ldb: *c_pos_overflow_int32 function: - dot: *single_precision pointer_mode_device: false api: INTERNAL - name: blas1 category: pre_checkin N: [ 5000, 800000 ] pointer_mode_host: false incx_incy: *incx_incy_range_small function: # dot_ex uses dot code, so only testing superset code of dot_ex for pre-checkin and nightly. # we should be sure to keep testing the dot API in quick tests as done above. # similarly with rot - dot_ex: *double_precision_complex_real - dotc_ex: *double_precision_complex_real - name: blas1_batched category: pre_checkin N: [ 5000, 800000 ] pointer_mode_device: false incx_incy: *incx_incy_range_small batch_count: [1, 7] function: - dot_batched_ex: *double_precision_complex_real - dotc_batched_ex: *double_precision_complex_real - name: blas1_strided_batched category: pre_checkin N: [ 5000, 800000 ] pointer_mode_host: false incx_incy: *incx_incy_range_small batch_count: [1, 7] stride_scale: [ 1 ] function: - dot_strided_batched_ex: *double_precision_complex_real - dotc_strided_batched_ex: *double_precision_complex_real - name: dot_multi_gpu category: multi_gpu N: [ 5000, 800000 ] incx_incy: *incx_incy_range_small function: - dot: *double_precision_complex_real threads_streams: *common_threads_streams devices: [0, 2, 4] # nightly - name: blas1 category: nightly N: [ 1000000 ] pointer_mode_device: false incx_incy: *incx_incy_range_small function: - dot_ex: *double_precision_complex_real - dotc_ex: *double_precision_complex_real - name: dot_very_large_gfx942 category: nightly N: [ 200000333 ] incx: 1 incy: 1 initialization: hpl pointer_mode_host: false batch_count: [ 2 ] gpu_arch: ['942'] function: - dot: *single_double_precisions - dot_batched: *single_double_precisions - dot_strided_batched: *single_double_precisions - name: dot_multi_threads_stream category: nightly N: [ 5000, 800000 ] incx_incy: *incx_incy_range_small function: - dot: *double_precision_complex_real threads_streams: *common_threads_streams - name: blas1_batched category: nightly N: [ 1000000 ] pointer_mode_host: false incx_incy: *incx_incy_range_small batch_count: [1, 7] function: - dot_batched_ex: *double_precision_complex_real - dotc_batched_ex: *double_precision_complex_real - name: blas1_strided_batched category: nightly N: [ 1000000 ] pointer_mode_device: false incx_incy: *incx_incy_range_small batch_count: [1, 7] stride_scale: [ 1 ] function: - dot_strided_batched_ex: *double_precision_complex_real - dotc_strided_batched_ex: *double_precision_complex_real - name: dot_large_batch category: stress arguments: - { N: 3, incx: 1, incy: 1, stride_x: 3, stride_y: 3, batch_count: *c_grid_yz_require_passes } function: - dot_batched: *half_precision - dot_batched_ex: *half_precision - dot_strided_batched: *half_precision - dot_strided_batched_ex: *half_precision # Tests for testing rocblas_dot_batched_4_kernel - name: dot_batched_kernel_test category: nightly N: [ 256 ] incx_incy: *incx_incy_range batch_count: [ 10002, 15003] function: - dot_batched: *half_bfloat_single_double_complex_real_precisions - dotc_batched: *single_double_precisions_complex - dot_batched_ex: *half_bfloat_single_double_complex_real_precisions - dotc_batched_ex: *half_bfloat_single_double_complex_real_precisions # Tests for testing rocblas_dot_batched_4_kernel - name: dot_strided_batched_kernel_test category: nightly N: [ 256 ] incx_incy: *incx_incy_range batch_count: [ 5001, 15003] stride_scale: [ 2 ] function: - dot_strided_batched: *half_bfloat_single_double_complex_real_precisions - dotc_strided_batched: *single_double_precisions_complex - dot_strided_batched_ex: *half_bfloat_single_double_complex_real_precisions - dotc_strided_batched_ex: *half_bfloat_single_double_complex_real_precisions - name: blas1_nan_check category: pre_checkin arguments: *blas1_nan_common_args function: - dot: *half_bfloat_single_double_complex_real_precisions - dot_batched: *half_bfloat_single_double_complex_real_precisions - dot_strided_batched: *half_bfloat_single_double_complex_real_precisions - dotc: *single_double_precisions_complex - dotc_batched: *half_bfloat_single_double_complex_real_precisions - dotc_strided_batched: *half_bfloat_single_double_complex_real_precisions - dot_ex: *dot_ex_precisions - dotc_ex: *dot_ex_precisions - dot_batched_ex: *dot_ex_precisions - dotc_batched_ex: *dot_ex_precisions - dot_strided_batched_ex: *dot_ex_precisions - dotc_strided_batched_ex: *dot_ex_precisions - name: blas1_graph_check category: pre_checkin arguments: *blas1_graph_test_common_args function: - dot: *half_bfloat_single_double_complex_real_precisions - dot_batched: *half_bfloat_single_double_complex_real_precisions - dot_strided_batched: *half_bfloat_single_double_complex_real_precisions - dotc: *single_double_precisions_complex - dotc_batched: *half_bfloat_single_double_complex_real_precisions - dotc_strided_batched: *half_bfloat_single_double_complex_real_precisions - dot_ex: *dot_ex_precisions - dot_batched_ex: *dot_ex_precisions - dot_strided_batched_ex: *dot_ex_precisions - dotc_ex: *dot_ex_precisions - dotc_batched_ex: *dot_ex_precisions - dotc_strided_batched_ex: *dot_ex_precisions - name: blas1_repeatability_check category: stress arguments: *blas1_repeatability_common_args function: - dot: *half_bfloat_single_double_complex_real_precisions - dot_batched: *half_bfloat_single_double_complex_real_precisions - dot_strided_batched: *half_bfloat_single_double_complex_real_precisions - dotc: *single_double_precisions_complex - dotc_batched: *half_bfloat_single_double_complex_real_precisions - dotc_strided_batched: *half_bfloat_single_double_complex_real_precisions - dot_ex: *half_bfloat_single_double_complex_real_precisions - dot_batched_ex: *half_bfloat_single_double_complex_real_precisions - dot_strided_batched_ex: *half_bfloat_single_double_complex_real_precisions - dotc_ex: *half_bfloat_single_double_complex_real_precisions - dotc_batched_ex: *half_bfloat_single_double_complex_real_precisions - dotc_strided_batched_ex: *half_bfloat_single_double_complex_real_precisions ...