Params:
- num_param_rows=200
- num_param_cols=100
- num_indices_rows=50
- num_indices_cols=100
- num_ops=10
- num_runs=50
- dtype=<dtype: 'float32'>

Running tests:
--> custom_gather_3d: on_gpu=False, padded=False, index_dtype=<class 'numpy.int32'>, params_shape=(200, 100)
--> custom_gather_3d: on_gpu=False, padded=False, index_dtype=<class 'numpy.int64'>, params_shape=(200, 100)
--> custom_gather_3d: on_gpu=True, padded=False, index_dtype=<class 'numpy.int32'>, params_shape=(200, 100)
--> custom_gather_3d: on_gpu=True, padded=False, index_dtype=<class 'numpy.int64'>, params_shape=(200, 100)
--> custom_gather: on_gpu=False, padded=False, index_dtype=<class 'numpy.int32'>, params_shape=(200, 100)
--> custom_gather: on_gpu=False, padded=False, index_dtype=<class 'numpy.int64'>, params_shape=(200, 100)
--> custom_gather: on_gpu=True, padded=False, index_dtype=<class 'numpy.int32'>, params_shape=(200, 100)
--> custom_gather: on_gpu=True, padded=False, index_dtype=<class 'numpy.int64'>, params_shape=(200, 100)
--> tf_gather: on_gpu=False, padded=False, index_dtype=<class 'numpy.int32'>, params_shape=(200, 100)
--> tf_gather: on_gpu=False, padded=False, index_dtype=<class 'numpy.int64'>, params_shape=(200, 100)
--> tf_gather: on_gpu=True, padded=False, index_dtype=<class 'numpy.int32'>, params_shape=(200, 100)
--> tf_gather: on_gpu=True, padded=False, index_dtype=<class 'numpy.int64'>, params_shape=(200, 100)
--> custom_gather_3d: on_gpu=False, padded=True, index_dtype=<class 'numpy.int32'>, params_shape=(200, 100)
--> custom_gather_3d: on_gpu=False, padded=True, index_dtype=<class 'numpy.int64'>, params_shape=(200, 100)
--> custom_gather_3d: on_gpu=True, padded=True, index_dtype=<class 'numpy.int32'>, params_shape=(200, 100)
--> custom_gather_3d: on_gpu=True, padded=True, index_dtype=<class 'numpy.int64'>, params_shape=(200, 100)
--> custom_gather: on_gpu=False, padded=True, index_dtype=<class 'numpy.int32'>, params_shape=(200, 100)
--> custom_gather: on_gpu=False, padded=True, index_dtype=<class 'numpy.int64'>, params_shape=(200, 100)
--> custom_gather: on_gpu=True, padded=True, index_dtype=<class 'numpy.int32'>, params_shape=(200, 100)
--> custom_gather: on_gpu=True, padded=True, index_dtype=<class 'numpy.int64'>, params_shape=(200, 100)
--> tf_gather: on_gpu=False, padded=True, index_dtype=<class 'numpy.int32'>, params_shape=(200, 100)
--> tf_gather: on_gpu=False, padded=True, index_dtype=<class 'numpy.int64'>, params_shape=(200, 100)
--> tf_gather: on_gpu=True, padded=True, index_dtype=<class 'numpy.int32'>, params_shape=(200, 100)
--> tf_gather: on_gpu=True, padded=True, index_dtype=<class 'numpy.int64'>, params_shape=(200, 100)

-----------------------
Non-padded
-----------------------
CPU             op    dt:  size  setup_time  first_run_time  rest_run_time    correct
     custom_gather int32:  1039      576.13          482.53          20.27       True
     custom_gather int64:  1039      605.09          355.12          23.61       True
  custom_gather_3d int32:    49       49.71           36.45          18.39       True
  custom_gather_3d int64:    49       23.62           33.23          17.02       True
         tf_gather int32: 14539    12628.67         5755.78          88.13       True
         tf_gather int64: 14539    12723.89         5467.89          86.39       True
GPU             op    dt:  size  setup_time  first_run_time  rest_run_time    correct
     custom_gather int32:  1039      624.72          434.36           6.94       True
     custom_gather int64:  1039      606.23          321.70           6.30       True
  custom_gather_3d int32:    49       23.97          207.64           2.81       True
  custom_gather_3d int64:    49       24.30           18.40           2.70       True
         tf_gather int32: 14539    12547.65         5680.03         111.22       True
         tf_gather int64: 14539    12646.62         5701.46         104.24       True

-----------------------
Padded
-----------------------
CPU             op    dt:  size  setup_time  first_run_time  rest_run_time    correct
     custom_gather int32:  2019     1359.46          717.88          26.31       True
     custom_gather int64:  2019     1744.49          745.86          30.23       True
  custom_gather_3d int32:    49       30.17           28.60          14.98       True
  custom_gather_3d int64:    49       28.85           32.47          14.94       True
         tf_gather int32: 15519    14114.13         6285.48         112.42       True
         tf_gather int64: 15519    13136.95         5548.17          90.41       True
GPU             op    dt:  size  setup_time  first_run_time  rest_run_time    correct
     custom_gather int32:  2019     1390.79          721.15           9.78       True
     custom_gather int64:  2019     1433.24          623.06           9.08       True
  custom_gather_3d int32:    49       31.67           20.26           4.19       True
  custom_gather_3d int64:    49       28.44           19.23           4.30       True
         tf_gather int32: 15519    14977.46         5583.00          87.78       True
         tf_gather int64: 15519    13584.99         5438.73          79.76       True
