Params:
- num_input_rows=8000
- num_input_cols=[3, 3, 3, 3, 3, 3, 3, 3, 3, 3]
- num_batches=1
- num_runs=50

Running tests:
--> product: on_gpu=False, num_inputs=[2, 2, 2, 2, 2, 2, 2, 2, 2, 2], inputs_shape=(8000, 3), inference=MARGINAL, log=False
--> product: on_gpu=True, num_inputs=[2, 2, 2, 2, 2, 2, 2, 2, 2, 2], inputs_shape=(8000, 3), inference=MARGINAL, log=False
--> products: on_gpu=False, num_inputs=[2, 2, 2, 2, 2, 2, 2, 2, 2, 2], inputs_shape=(8000, 3), inference=MARGINAL, log=False
--> products: on_gpu=True, num_inputs=[2, 2, 2, 2, 2, 2, 2, 2, 2, 2], inputs_shape=(8000, 3), inference=MARGINAL, log=False
--> perm_products: on_gpu=False, num_inputs=[2, 2, 2, 2, 2, 2, 2, 2, 2, 2], inputs_shape=(8000, 3), inference=MARGINAL, log=False
--> perm_products: on_gpu=False, num_inputs=[2, 2, 2, 2, 2, 2, 2, 2, 2, 2], inputs_shape=(8000, 3), inference=MARGINAL, log=False
--> perm_products: on_gpu=True, num_inputs=[2, 2, 2, 2, 2, 2, 2, 2, 2, 2], inputs_shape=(8000, 3), inference=MARGINAL, log=False
--> perm_products: on_gpu=True, num_inputs=[2, 2, 2, 2, 2, 2, 2, 2, 2, 2], inputs_shape=(8000, 3), inference=MARGINAL, log=False
--> products_layer: on_gpu=False, num_inputs=[2, 2, 2, 2, 2, 2, 2, 2, 2, 2], inputs_shape=(8000, 3), inference=MARGINAL, log=False
--> products_layer: on_gpu=False, num_inputs=[2, 2, 2, 2, 2, 2, 2, 2, 2, 2], inputs_shape=(8000, 3), inference=MARGINAL, log=False
--> products_layer: on_gpu=True, num_inputs=[2, 2, 2, 2, 2, 2, 2, 2, 2, 2], inputs_shape=(8000, 3), inference=MARGINAL, log=False
--> products_layer: on_gpu=True, num_inputs=[2, 2, 2, 2, 2, 2, 2, 2, 2, 2], inputs_shape=(8000, 3), inference=MARGINAL, log=False
--> product: on_gpu=False, num_inputs=[2, 2, 2, 2, 2, 2, 2, 2, 2, 2], inputs_shape=(8000, 3), inference=MARGINAL, log=True
--> product: on_gpu=True, num_inputs=[2, 2, 2, 2, 2, 2, 2, 2, 2, 2], inputs_shape=(8000, 3), inference=MARGINAL, log=True
--> products: on_gpu=False, num_inputs=[2, 2, 2, 2, 2, 2, 2, 2, 2, 2], inputs_shape=(8000, 3), inference=MARGINAL, log=True
--> products: on_gpu=True, num_inputs=[2, 2, 2, 2, 2, 2, 2, 2, 2, 2], inputs_shape=(8000, 3), inference=MARGINAL, log=True
--> perm_products: on_gpu=False, num_inputs=[2, 2, 2, 2, 2, 2, 2, 2, 2, 2], inputs_shape=(8000, 3), inference=MARGINAL, log=True
--> perm_products: on_gpu=False, num_inputs=[2, 2, 2, 2, 2, 2, 2, 2, 2, 2], inputs_shape=(8000, 3), inference=MARGINAL, log=True
--> perm_products: on_gpu=True, num_inputs=[2, 2, 2, 2, 2, 2, 2, 2, 2, 2], inputs_shape=(8000, 3), inference=MARGINAL, log=True
--> perm_products: on_gpu=True, num_inputs=[2, 2, 2, 2, 2, 2, 2, 2, 2, 2], inputs_shape=(8000, 3), inference=MARGINAL, log=True
--> products_layer: on_gpu=False, num_inputs=[2, 2, 2, 2, 2, 2, 2, 2, 2, 2], inputs_shape=(8000, 3), inference=MARGINAL, log=True
--> products_layer: on_gpu=False, num_inputs=[2, 2, 2, 2, 2, 2, 2, 2, 2, 2], inputs_shape=(8000, 3), inference=MARGINAL, log=True
--> products_layer: on_gpu=True, num_inputs=[2, 2, 2, 2, 2, 2, 2, 2, 2, 2], inputs_shape=(8000, 3), inference=MARGINAL, log=True
--> products_layer: on_gpu=True, num_inputs=[2, 2, 2, 2, 2, 2, 2, 2, 2, 2], inputs_shape=(8000, 3), inference=MARGINAL, log=True
--> product: on_gpu=False, num_inputs=[2, 3, 4, 5, 4, 3, 2, 3, 4, 5], inputs_shape=(8000, 3), inference=MARGINAL, log=False
--> product: on_gpu=True, num_inputs=[2, 3, 4, 5, 4, 3, 2, 3, 4, 5], inputs_shape=(8000, 3), inference=MARGINAL, log=False
--> products: on_gpu=False, num_inputs=[2, 3, 4, 5, 4, 3, 2, 3, 4, 5], inputs_shape=(8000, 3), inference=MARGINAL, log=False
--> products: on_gpu=True, num_inputs=[2, 3, 4, 5, 4, 3, 2, 3, 4, 5], inputs_shape=(8000, 3), inference=MARGINAL, log=False
--> perm_products: on_gpu=False, num_inputs=[2, 3, 4, 5, 4, 3, 2, 3, 4, 5], inputs_shape=(8000, 3), inference=MARGINAL, log=False
--> perm_products: on_gpu=False, num_inputs=[2, 3, 4, 5, 4, 3, 2, 3, 4, 5], inputs_shape=(8000, 3), inference=MARGINAL, log=False
--> perm_products: on_gpu=True, num_inputs=[2, 3, 4, 5, 4, 3, 2, 3, 4, 5], inputs_shape=(8000, 3), inference=MARGINAL, log=False
--> perm_products: on_gpu=True, num_inputs=[2, 3, 4, 5, 4, 3, 2, 3, 4, 5], inputs_shape=(8000, 3), inference=MARGINAL, log=False
--> products_layer: on_gpu=False, num_inputs=[2, 3, 4, 5, 4, 3, 2, 3, 4, 5], inputs_shape=(8000, 3), inference=MARGINAL, log=False
--> products_layer: on_gpu=False, num_inputs=[2, 3, 4, 5, 4, 3, 2, 3, 4, 5], inputs_shape=(8000, 3), inference=MARGINAL, log=False
--> products_layer: on_gpu=True, num_inputs=[2, 3, 4, 5, 4, 3, 2, 3, 4, 5], inputs_shape=(8000, 3), inference=MARGINAL, log=False
--> products_layer: on_gpu=True, num_inputs=[2, 3, 4, 5, 4, 3, 2, 3, 4, 5], inputs_shape=(8000, 3), inference=MARGINAL, log=False
--> product: on_gpu=False, num_inputs=[2, 3, 4, 5, 4, 3, 2, 3, 4, 5], inputs_shape=(8000, 3), inference=MARGINAL, log=True
--> product: on_gpu=True, num_inputs=[2, 3, 4, 5, 4, 3, 2, 3, 4, 5], inputs_shape=(8000, 3), inference=MARGINAL, log=True
--> products: on_gpu=False, num_inputs=[2, 3, 4, 5, 4, 3, 2, 3, 4, 5], inputs_shape=(8000, 3), inference=MARGINAL, log=True
--> products: on_gpu=True, num_inputs=[2, 3, 4, 5, 4, 3, 2, 3, 4, 5], inputs_shape=(8000, 3), inference=MARGINAL, log=True
--> perm_products: on_gpu=False, num_inputs=[2, 3, 4, 5, 4, 3, 2, 3, 4, 5], inputs_shape=(8000, 3), inference=MARGINAL, log=True
--> perm_products: on_gpu=False, num_inputs=[2, 3, 4, 5, 4, 3, 2, 3, 4, 5], inputs_shape=(8000, 3), inference=MARGINAL, log=True
--> perm_products: on_gpu=True, num_inputs=[2, 3, 4, 5, 4, 3, 2, 3, 4, 5], inputs_shape=(8000, 3), inference=MARGINAL, log=True
--> perm_products: on_gpu=True, num_inputs=[2, 3, 4, 5, 4, 3, 2, 3, 4, 5], inputs_shape=(8000, 3), inference=MARGINAL, log=True
--> products_layer: on_gpu=False, num_inputs=[2, 3, 4, 5, 4, 3, 2, 3, 4, 5], inputs_shape=(8000, 3), inference=MARGINAL, log=True
--> products_layer: on_gpu=False, num_inputs=[2, 3, 4, 5, 4, 3, 2, 3, 4, 5], inputs_shape=(8000, 3), inference=MARGINAL, log=True
--> products_layer: on_gpu=True, num_inputs=[2, 3, 4, 5, 4, 3, 2, 3, 4, 5], inputs_shape=(8000, 3), inference=MARGINAL, log=True
--> products_layer: on_gpu=True, num_inputs=[2, 3, 4, 5, 4, 3, 2, 3, 4, 5], inputs_shape=(8000, 3), inference=MARGINAL, log=True

-----------------------------
NON-PADDED
InferenceType: MARGINAL
num_inputs: [2, 2, 2, 2, 2, 2, 2, 2, 2, 2]
-----------------------------
CPU          op  size indices  single_input  setup_time  first_run_time  rest_run_time    correct
        product   779   Yes         No         305.41           55.94           6.58       True
       products   479   Yes         No         240.19           33.85           5.74       True
  perm_products   139    No         No          53.03           11.59           4.38       True
  perm_products   167   Yes         No          63.90           13.46           4.75       True
 products_layer    63   Yes         No          24.78           14.08          13.36       True
 products_layer    23   Yes        Yes          19.82           17.58          10.15       True
GPU          op  size indices  single_input  setup_time  first_run_time  rest_run_time    correct
        product   779   Yes         No         305.60          220.51           5.56       True
       products   479   Yes         No         172.51           28.63           3.24       True
  perm_products   139    No         No          52.35           12.47           2.52       True
  perm_products   167   Yes         No          63.74           13.67           2.85       True
 products_layer    63   Yes         No          35.58           10.84           4.25       True
 products_layer    23   Yes        Yes          23.54            5.42           1.93       True

-----------------------------
NON-PADDED
InferenceType: MARGINAL-LOG
num_inputs: [2, 2, 2, 2, 2, 2, 2, 2, 2, 2]
-----------------------------
CPU          op  size indices  single_input  setup_time  first_run_time  rest_run_time    correct
        product   812   Yes         No         363.17           63.30           8.08       True
       products   512   Yes         No         197.82           39.01           6.71       True
  perm_products   172    No         No          61.02           15.85           5.58       True
  perm_products   200   Yes         No          73.33           17.15           5.29       True
 products_layer    96   Yes         No          32.71           21.88          12.10       True
 products_layer    37   Yes        Yes          16.19           10.03           8.94       True
GPU          op  size indices  single_input  setup_time  first_run_time  rest_run_time    correct
        product   812   Yes         No         318.65           54.39           6.76       True
       products   512   Yes         No         186.05           33.92           3.80       True
  perm_products   172    No         No         147.06           14.32           3.09       True
  perm_products   200   Yes         No          76.57           18.17           3.69       True
 products_layer    96   Yes         No          33.80           10.12           3.63       True
 products_layer    37   Yes        Yes          33.10            9.03           1.79       True

-----------------------------
PADDED
InferenceType: MARGINAL
num_inputs: [2, 3, 4, 5, 4, 3, 2, 3, 4, 5]
-----------------------------
CPU          op  size indices  single_input  setup_time  first_run_time  rest_run_time    correct
        product 10763   Yes         No        4341.29          910.14          54.84       True
       products  7511   Yes         No        3008.80          942.75          43.26       True
  perm_products   169    No         No          60.22           79.43          75.88       True
  perm_products   233   Yes         No          88.78          113.46          84.80       True
 products_layer    93   Yes         No         101.06          150.97         186.79       True
 products_layer    23   Yes        Yes          30.54          143.05         156.00       True
GPU          op  size indices  single_input  setup_time  first_run_time  rest_run_time    correct
        product 10763   Yes         No        4596.39          878.74          39.51       True
       products  7511   Yes         No        2986.06          894.11           9.55       True
  perm_products   169    No         No          60.36           40.58           7.98       True
  perm_products   233   Yes         No          82.75           24.35           8.24       True
 products_layer    93   Yes         No         273.49           15.12           9.74       True
 products_layer    23   Yes        Yes          32.78            8.95           6.74       True

-----------------------------
PADDED
InferenceType: MARGINAL-LOG
num_inputs: [2, 3, 4, 5, 4, 3, 2, 3, 4, 5]
-----------------------------
CPU          op  size indices  single_input  setup_time  first_run_time  rest_run_time    correct
        product 10811   Yes         No        4212.00          748.34          56.95       True
       products  7559   Yes         No        2948.21          890.50          48.27       True
  perm_products   217    No         No          77.72           84.07          81.40       True
  perm_products   281   Yes         No         101.42          123.47          91.66       True
 products_layer   141   Yes         No         118.63          267.57         229.96       True
 products_layer    37   Yes        Yes          33.47          230.33         185.13       True
GPU          op  size indices  single_input  setup_time  first_run_time  rest_run_time    correct
        product 10811   Yes         No        4274.32          711.76          58.49       True
       products  7559   Yes         No        2821.56          797.04          10.37       True
  perm_products   217    No         No          78.24           24.56           9.89       True
  perm_products   281   Yes         No         101.39           29.10          10.57       True
 products_layer   141   Yes         No         292.07           20.18          11.38       True
 products_layer    37   Yes        Yes          35.06           10.34           7.93       True
