@@ -354,33 +354,115 @@ def test_many_sub_graphs():
354354 ms_output = MeasureResult (costs = (1.91224744e-05 ,), error_no = 0 , all_cost = - 1 , timestamp = - 1 )
355355 ltf_records .append ((ms_input , ms_output ))
356356
357- ltf_keys = []
358- ltf_arg = [tvm .placeholder ((1 , 4 , 8 , 8 , 4 ), dtype = dtype ), "NCHW4c" , "NCHW8c" ]
359- ltf_arg = autotvm .task .topi_integration .serialize_args (ltf_arg )
360- ltf_wkl = ('layout_transform' ,) + autotvm .task .args_to_workload (ltf_arg )
361- ltf_keys .append (ltf_wkl )
362- ltf_arg = [tvm .placeholder ((1 , 1 , 8 , 8 , 32 ), dtype = dtype ), "NCHW32c" , "NCHW4c" ]
363- ltf_arg = autotvm .task .topi_integration .serialize_args (ltf_arg )
364- ltf_wkl = ('layout_transform' ,) + autotvm .task .args_to_workload (ltf_arg )
365- ltf_keys .append (ltf_wkl )
366- ltf_arg = [tvm .placeholder ((1 , 4 , 8 , 8 , 8 ), dtype = dtype ), "NCHW8c" , "NCHW32c" ]
357+ executor = DPTuner (net , {"data" : dshape }, records , target_ops , target )
358+ executor .benchmark_layout_transform (layout_records = ltf_records , infer_layout = True )
359+ executor .run ()
360+ out = [record [0 ].config for record in executor .get_optimal_records ()]
361+ expected_out = [records [3 ][0 ].config , records [1 ][0 ].config , records [2 ][0 ].config ]
362+ assert expected_out == out , "Output mismatch: expecting %s but got %s" \
363+ % (str (expected_out ), str (out ))
364+
365+ executor = PBQPTuner (net , {"data" : dshape }, records , target_ops , target )
366+ executor .benchmark_layout_transform (layout_records = ltf_records , infer_layout = True )
367+ executor .run ()
368+ out = [record [0 ].config for record in executor .get_optimal_records ()]
369+ expected_out = [records [3 ][0 ].config , records [1 ][0 ].config , records [2 ][0 ].config ]
370+ assert expected_out == out , "Output mismatch: expecting %s but got %s" \
371+ % (str (expected_out ), str (out ))
372+
373+
374+ def test_tuple ():
375+ target = "llvm"
376+ dtype = "float32"
377+ dshape = (1 , 5 , 32 , 32 )
378+ layout = "NCHW"
379+ target_ops = [relay .nn .conv2d ]
380+
381+ data = relay .var ("data" , shape = dshape , dtype = dtype )
382+ w0 = relay .var ("w0_weight" )
383+ conv0 = relay .nn .conv2d (data , w0 , channels = 2 , kernel_size = (3 , 3 ), padding = (1 , 1 ))
384+ w1 = relay .var ("w1_weight" )
385+ conv1 = relay .nn .conv2d (data , w1 , channels = 3 , kernel_size = (3 , 3 ), padding = (1 , 1 ))
386+ out = relay .concatenate ([conv0 , conv1 ], axis = 1 )
387+ net = relay .Function (relay .analysis .free_vars (out ), out )
388+ net , params = relay .testing .create_workload (net )
389+
390+ tasks = autotvm .task .extract_from_program (net ["main" ],
391+ target = target ,
392+ params = params ,
393+ ops = (relay .op .nn .conv2d ,))
394+ wkl_list = [
395+ create_workload ((1 , 5 , 32 , 32 ), (2 , 5 , 3 , 3 ), (1 , 1 ), (1 , 1 ), (1 , 1 ), layout , layout , dtype , dtype ),
396+ create_workload ((1 , 5 , 32 , 32 ), (3 , 5 , 3 , 3 ), (1 , 1 ), (1 , 1 ), (1 , 1 ), layout , layout , dtype , dtype ),
397+ ]
398+ costs = [0.01 , 0.012 , 0.03 , 0.04 ]
399+ config_list = []
400+ cfg_dict = {"i" : - 1 ,
401+ "c" : None ,
402+ "e" : [["tile_ic" , "sp" , [1 , 5 ]],
403+ ["tile_oc" , "sp" , [1 , 2 ]],
404+ ["tile_ow" , "sp" , [4 , 8 ]],
405+ ["unroll_kw" , "ot" , True ]],
406+ "t" : "" }
407+ config_list .append (ConfigEntity .from_json_dict (cfg_dict ))
408+ cfg_dict = {"i" : - 1 ,
409+ "c" : None ,
410+ "e" : [["tile_ic" , "sp" , [1 , 5 ]],
411+ ["tile_oc" , "sp" , [1 , 3 ]],
412+ ["tile_ow" , "sp" , [2 , 16 ]],
413+ ["unroll_kw" , "ot" , False ]],
414+ "t" : "" }
415+ config_list .append (ConfigEntity .from_json_dict (cfg_dict ))
416+ cfg_dict = {"i" : - 1 ,
417+ "c" : None ,
418+ "e" : [["tile_ic" , "sp" , [1 , 5 ]],
419+ ["tile_oc" , "sp" , [2 , 1 ]],
420+ ["tile_ow" , "sp" , [4 , 8 ]],
421+ ["unroll_kw" , "ot" , True ]],
422+ "t" : "" }
423+ config_list .append (ConfigEntity .from_json_dict (cfg_dict ))
424+ cfg_dict = {"i" : - 1 ,
425+ "c" : None ,
426+ "e" : [["tile_ic" , "sp" , [1 , 5 ]],
427+ ["tile_oc" , "sp" , [3 , 1 ]],
428+ ["tile_ow" , "sp" , [2 , 16 ]],
429+ ["unroll_kw" , "ot" , False ]],
430+ "t" : "" }
431+ config_list .append (ConfigEntity .from_json_dict (cfg_dict ))
432+
433+ records = []
434+
435+ wkl_list = wkl_list + wkl_list
436+ tasks = tasks + tasks
437+ for wkl , cost , config , task in zip (wkl_list , costs , config_list , tasks ):
438+ task .workload = wkl
439+ ms_input = MeasureInput (target = target , task = task , config = config )
440+ ms_output = MeasureResult (costs = (cost ,), error_no = 0 , all_cost = - 1 , timestamp = - 1 )
441+ records .append ((ms_input , ms_output ))
442+
443+ ltf_records = []
444+ ltf_arg = [tvm .placeholder ((1 , 64 , 16 , 16 , 8 ), dtype = dtype ), "NCHW8c" , "NCHW512c" ]
367445 ltf_arg = autotvm .task .topi_integration .serialize_args (ltf_arg )
368446 ltf_wkl = ('layout_transform' ,) + autotvm .task .args_to_workload (ltf_arg )
369- ltf_keys .append (ltf_wkl )
447+ ltf_task = copy .deepcopy (tasks [0 ])
448+ ltf_task .workload = ltf_wkl
449+ ms_input = MeasureInput (target = target , task = ltf_task , config = None )
450+ ms_output = MeasureResult (costs = (1.91224744e-05 ,), error_no = 0 , all_cost = - 1 , timestamp = - 1 )
451+ ltf_records .append ((ms_input , ms_output ))
370452
371453 executor = DPTuner (net , {"data" : dshape }, records , target_ops , target )
372454 executor .benchmark_layout_transform (layout_records = ltf_records , infer_layout = True )
373455 executor .run ()
374456 out = [record [0 ].config for record in executor .get_optimal_records ()]
375- expected_out = [records [3 ][0 ].config , records [1 ][ 0 ]. config , records [ 2 ][0 ].config ]
457+ expected_out = [records [2 ][0 ].config , records [1 ][0 ].config ]
376458 assert expected_out == out , "Output mismatch: expecting %s but got %s" \
377459 % (str (expected_out ), str (out ))
378460
379461 executor = PBQPTuner (net , {"data" : dshape }, records , target_ops , target )
380462 executor .benchmark_layout_transform (layout_records = ltf_records , infer_layout = True )
381463 executor .run ()
382464 out = [record [0 ].config for record in executor .get_optimal_records ()]
383- expected_out = [records [3 ][0 ].config , records [1 ][ 0 ]. config , records [ 2 ][0 ].config ]
465+ expected_out = [records [2 ][0 ].config , records [1 ][0 ].config ]
384466 assert expected_out == out , "Output mismatch: expecting %s but got %s" \
385467 % (str (expected_out ), str (out ))
386468
@@ -390,3 +472,4 @@ def test_many_sub_graphs():
390472 test_DPTuner_run ()
391473 test_PBQPTuner_run ()
392474 test_many_sub_graphs ()
475+ test_tuple ()
0 commit comments