Params:
- num_input_rows=1000
- num_input_cols=[5, 5, 5, 5, 5, 5, 5, 5, 5, 5]
- num_batches=1
- num_runs=50

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

-----------------------------
NON-PADDED
InferenceType: MARGINAL
num_inputs: [5, 5, 5, 5, 5, 5, 5, 5, 5, 5] 
num_prods: [3125, 3125, 3125, 3125, 3125, 3125, 3125, 3125, 3125, 3125]
-----------------------------
CPU          op  size indices  single_input  setup_time  first_run_time  rest_run_time    correct
        product 437619   Yes         No      169068.66        38823.31         378.97       True
       products 312679   Yes         No      121881.48       304540.42         250.39       True
  perm_products   199    No         No          78.25          229.58         138.40       True
  perm_products   299   Yes         No         111.60          287.52         146.37       True
  perm_products   201   Yes        Yes          94.05          248.98         142.94       True
 products_layer   123   Yes         No        3567.80          605.04         564.50       True
 products_layer    23   Yes        Yes        6166.31          606.10         482.46       True
GPU          op  size indices  single_input  setup_time  first_run_time  rest_run_time    correct
        product 437619   Yes         No      178614.85        40375.54        1940.26       True
       products 312679   Yes         No      120312.67       302684.60          36.64       True
  perm_products   199    No         No          78.12           55.87          23.66       True
  perm_products   299   Yes         No         111.09           69.16          23.76       True
  perm_products   201   Yes        Yes          93.94           56.13          20.30       True
 products_layer   123   Yes         No        3655.28           40.88          24.74       True
 products_layer    23   Yes        Yes         692.47           24.62          18.42       True

-----------------------------
NON-PADDED
InferenceType: MARGINAL-LOG
num_inputs: [5, 5, 5, 5, 5, 5, 5, 5, 5, 5] 
num_prods: [3125, 3125, 3125, 3125, 3125, 3125, 3125, 3125, 3125, 3125]
-----------------------------
CPU          op  size indices  single_input  setup_time  first_run_time  rest_run_time    correct
        product 437682   Yes         No      173310.67        37997.24         434.48      False
       products 312742   Yes         No      121119.08       310505.22         314.10      False
  perm_products   262    No         No          92.83          295.61         229.09      False
  perm_products   362   Yes         No         125.34          340.07         231.62      False
  perm_products   215   Yes        Yes          92.94          307.48         222.74      False
 products_layer   186   Yes         No        8882.09          626.43         605.27      False
 products_layer    37   Yes        Yes         763.38          531.15         578.62      False
GPU          op  size indices  single_input  setup_time  first_run_time  rest_run_time    correct
        product 437682   Yes         No      174900.02        40615.28        1894.39       True
       products 312742   Yes         No      116497.61       308969.12          41.45       True
  perm_products   262    No         No          93.30           60.14          26.24       True
  perm_products   362   Yes         No         124.69           70.04          25.70       True
  perm_products   215   Yes        Yes          93.15           52.91          22.53       True
 products_layer   186   Yes         No        3747.06           44.71          27.36       True
 products_layer    37   Yes        Yes         603.29           27.68          20.74       True

-----------------------------
PADDED
InferenceType: MARGINAL
num_inputs: [2, 3, 4, 5, 4, 3, 2, 3, 4, 5] 
num_prods: [25, 125, 625, 3125, 625, 125, 25, 125, 625, 3125]
-----------------------------
CPU          op  size indices  single_input  setup_time  first_run_time  rest_run_time    correct
        product 114239   Yes         No       43468.50         9164.96          76.60       True
       products 80099   Yes         No       30489.87        63484.72          64.49       True
  perm_products   169    No         No          57.25          146.15         131.45       True
  perm_products   239   Yes         No          92.27          167.72         124.45       True
  perm_products   171   Yes        Yes          78.69          149.60         130.51       True
 products_layer    93   Yes         No         962.92          225.97         224.66       True
 products_layer    23   Yes        Yes         240.93          222.76         150.36       True
GPU          op  size indices  single_input  setup_time  first_run_time  rest_run_time    correct
        product 114239   Yes         No       44641.18         9775.85         517.66       True
       products 80099   Yes         No       29748.52        63156.28          10.81       True
  perm_products   169    No         No          66.20           30.59           9.34       True
  perm_products   239   Yes         No          91.71           36.27           9.44       True
  perm_products   171   Yes        Yes          67.21           22.73           6.73       True
 products_layer    93   Yes         No         913.59           16.33           9.67       True
 products_layer    23   Yes        Yes         244.87           10.19           6.26       True

-----------------------------
PADDED
InferenceType: MARGINAL-LOG
num_inputs: [2, 3, 4, 5, 4, 3, 2, 3, 4, 5] 
num_prods: [25, 125, 625, 3125, 625, 125, 25, 125, 625, 3125]
-----------------------------
CPU          op  size indices  single_input  setup_time  first_run_time  rest_run_time    correct
        product 114287   Yes         No       43500.43         8936.22          88.80       True
       products 80147   Yes         No       30635.42        64758.48          76.79       True
  perm_products   217    No         No          72.60          182.51         138.91       True
  perm_products   287   Yes         No         109.52          184.04         142.52       True
  perm_products   185   Yes        Yes          83.99          136.13         137.69       True
 products_layer   141   Yes         No         888.07          176.53         228.94       True
 products_layer    37   Yes        Yes         204.79          172.45         179.84       True
GPU          op  size indices  single_input  setup_time  first_run_time  rest_run_time    correct
        product 114287   Yes         No       44684.13         9587.35         405.56       True
       products 80147   Yes         No       29858.64        64512.84          12.18       True
  perm_products   217    No         No          83.12           35.08          10.42       True
  perm_products   287   Yes         No         109.91           40.67          10.06       True
  perm_products   185   Yes        Yes          85.03           29.53           6.68       True
 products_layer   141   Yes         No         906.27           22.07          10.80       True
 products_layer    37   Yes        Yes         214.22           12.43           6.65       True
