Ejemplo n.º 1
0
 def manipulator(self):
   """
   Define the search space by creating a
   ConfigurationManipulator
   """
   manipulator = ConfigurationManipulator()
   manipulator.add_parameter(IntegerParameter(PARAM, 0, 1000))
   return manipulator
Ejemplo n.º 2
0
 def manipulator(self):
   """
   Define the search space by creating a
   ConfigurationManipulator
   """
   manipulator = ConfigurationManipulator()
   manipulator.add_parameter(
     IntegerParameter('BLOCK_SIZE', 1, 10))
   return manipulator
Ejemplo n.º 3
0
 def manipulator(self):
     """
     Define the search space by creating a
     ConfigurationManipulator
     """
     m_max = min(160, self.args.end)
     n_max = min(160, self.args.end)
     self.granularity = 1
     assert(0 < self.granularity)
     m_max = (m_max + self.granularity - 1) / self.granularity
     n_max = (n_max + self.granularity - 1) / self.granularity
     m_param = IntegerParameter("M", self.granularity, m_max)
     n_param = IntegerParameter("N", self.granularity, n_max)
     manipulator = ConfigurationManipulator()
     manipulator.add_parameter(m_param)
     manipulator.add_parameter(n_param)
     return manipulator
Ejemplo n.º 4
0
 def manipulator(self):
     """
     Define the search space by creating a
     ConfigurationManipulator
     """
     self.granularity = 1
     assert(0 < self.granularity)
     m_max = (64 + self.granularity - 1) / self.granularity
     n_max = (256 + self.granularity - 1) / self.granularity
     k_max = (256 + self.granularity - 1) / self.granularity
     m_param = IntegerParameter("M", self.granularity, m_max)
     n_param = IntegerParameter("N", self.granularity, n_max)
     k_param = IntegerParameter("K", self.granularity, k_max)
     manipulator = ConfigurationManipulator()
     manipulator.add_parameter(m_param)
     manipulator.add_parameter(n_param)
     manipulator.add_parameter(k_param)
     return manipulator
Ejemplo n.º 5
0
 def manipulator(self):
     """
     Define the search space by creating a
     ConfigurationManipulator
     """
     self.mintilesize = 2
     self.granularity = 1
     assert(0 < self.granularity)
     minsize = max(self.mintilesize / self.granularity, 1)
     maxsize = minsize + self.granularity
     m_max = max(min(self.args.maxm, self.args.end), maxsize)
     n_max = max(min(self.args.maxn, self.args.end), maxsize)
     m_max = (m_max + self.granularity - 1) / self.granularity
     n_max = (n_max + self.granularity - 1) / self.granularity
     m_param = IntegerParameter("M", minsize, m_max)
     n_param = IntegerParameter("N", minsize, n_max)
     manipulator = ConfigurationManipulator()
     manipulator.add_parameter(m_param)
     manipulator.add_parameter(n_param)
     return manipulator
Ejemplo n.º 6
0
 def manipulator(self):
     """
     Define the search space by creating a
     ConfigurationManipulator
     """
     self.granularity = 1
     assert (0 < self.granularity)
     max_m = (256 + self.granularity - 1) / self.granularity
     max_n = (256 + self.granularity - 1) / self.granularity
     max_k = (256 + self.granularity - 1) / self.granularity
     manipulator = ConfigurationManipulator()
     manipulator.add_parameter(
         IntegerParameter("M", self.granularity, max_m))
     manipulator.add_parameter(
         IntegerParameter("N", self.granularity, max_n))
     manipulator.add_parameter(
         IntegerParameter("K", self.granularity, max_k))
     return manipulator
Ejemplo n.º 7
0
  def manipulator(self):
    """
    Define the search space by creating a
    ConfigurationManipulator
    """

    manipulator = ConfigurationManipulator()
    manipulator.add_parameter(
      IntegerParameter('opt_level', 0, 3))
    for flag in GCC_FLAGS:
      manipulator.add_parameter(
        EnumParameter(flag,
                      ['on', 'off'])) 
    for param, min, max in GCC_PARAMS:
      manipulator.add_parameter(
        IntegerParameter(param, min, max))
    return manipulator
Ejemplo n.º 8
0
 def manipulator(self):
     """
 Define the search space by creating a
 ConfigurationManipulator
 """
     manipulator = ConfigurationManipulator()
     # manipulator.add_parameter(
     #   IntegerParameter('blockSize', 8,16))
     manipulator.add_parameter(IntegerParameter('opt_level', 0, 3))
     manipulator.add_parameter(
         EnumParameter('blockSize', ['8', '16', '32', '64', '128']))
     return manipulator
Ejemplo n.º 9
0
 def manipulator(self):
     """
 Define the search space by creating a
 ConfigurationManipulator
 """
     manipulator = ConfigurationManipulator()
     manipulator.add_parameter(
         PermutationParameter('hls_order', list(range(NUM_PASSES))))
     for i in range(NUM_PASSES):
         manipulator.add_parameter(BooleanParameter(
             'hls_pass_{}'.format(i)))
     return manipulator
Ejemplo n.º 10
0
 def manipulator(self):
   """
   Define the search space by creating a
   ConfigurationManipulator
   """
   manipulator = ConfigurationManipulator()
   manipulator.add_parameter(
     IntegerParameter('opt_level', 0, 3))
   for flag in GCC_FLAGS:
     manipulator.add_parameter(
       EnumParameter(flag,
                     ['on', 'off', 'default']))
   for param, min, max in GCC_PARAMS:
     manipulator.add_parameter(
       IntegerParameter(param, min, max))
   return manipulator
Ejemplo n.º 11
0
    def manipulator(self):
        m = ConfigurationManipulator()

        for param in self.int_params:
            param_value = self.int_params[param]

            if param_value['max'] > 128:
                m.add_parameter(
                    LogIntegerParameter(param, param_value['min'],
                                        param_value['max']))
            else:
                m.add_parameter(
                    IntegerParameter(param, param_value['min'],
                                     param_value['max']))

        for param in self.power_of_two_params:
            param_value = self.power_of_two_params[param]

            m.add_parameter(
                manipulator.PowerOfTwoParameter(param, param_value['min'],
                                                param_value['max']))

        return m
    def manipulator(self):
        """Define the search space by creating a
		ConfigurationManipulator
		"""
        list_configs = []
        list_configs = read_file_configs()
        manipulator = ConfigurationManipulator()
        print "Executing manipulator"
        for param, mini, maxi in BLOCO_PARAMETROS:
            #print "param: ", param, " mini: ", mini, " maxi: ", maxi
            manipulator.add_parameter(IntegerParameter(param, mini, maxi))

        # E preciso gerar as configuracoes validas com o run.c.
        # manipulator.add_parameter(EnumParameter(param, [ 'gx:1024, gy:1, gz:1, bx:1, by:1, bz:1, ', 'gx:32, gy:32, gz:1, bx:1, by:1, bz:1, ' ]))
        for param in BLOCO_PARAMETROS_CONFIGS:
            manipulator.add_parameter(EnumParameter(param, list_configs))
        return manipulator
Ejemplo n.º 13
0
 def manipulator(self):
     """
     Define the search space by creating a
     ConfigurationManipulator
     """
     self.granularity = 1
     assert (0 < self.granularity)
     m_max = (64 + self.granularity - 1) / self.granularity
     n_max = (256 + self.granularity - 1) / self.granularity
     k_max = (256 + self.granularity - 1) / self.granularity
     m_param = IntegerParameter("M", self.granularity, m_max)
     n_param = IntegerParameter("N", self.granularity, n_max)
     k_param = IntegerParameter("K", self.granularity, k_max)
     manipulator = ConfigurationManipulator()
     manipulator.add_parameter(m_param)
     manipulator.add_parameter(n_param)
     manipulator.add_parameter(k_param)
     return manipulator
Ejemplo n.º 14
0
    def manipulator(self) -> ConfigurationManipulator:
        """Define the search space."""
        manipulator = ConfigurationManipulator()
        # A permutation parameter to order the passes that are present.
        manipulator.add_parameter(
            PermutationParameter("flag_order", list(range(self.flags_limit))))
        # Boolean parameters for whether each pass is present.
        for i in range(self.flags_limit):
            manipulator.add_parameter(BooleanParameter(f"flag{i}"))

        def biased_random():
            cfg = ConfigurationManipulator.random(manipulator)
            # duplicates in the search space, bias to `n / 2` enabled
            disabled = random.sample(range(self.flags_limit),
                                     k=self.flags_limit -
                                     self.env.action_space.n)
            cfg.update({f"flag{x}": False for x in disabled})
            return cfg

        manipulator.random = biased_random

        return manipulator
Ejemplo n.º 15
0
 def manipulator(self):
     """
     Define the search space by creating a
     ConfigurationManipulator
     """
     self.dimset = libxsmm_utilities.load_mnklist(self.args.mnk, 0, -1)
     self.granularity = 1
     assert (0 < self.granularity)
     m_max = (64 + self.granularity - 1) / self.granularity
     n_max = (256 + self.granularity - 1) / self.granularity
     k_max = (256 + self.granularity - 1) / self.granularity
     m_param = IntegerParameter("M", self.granularity, m_max)
     n_param = IntegerParameter("N", self.granularity, n_max)
     k_param = IntegerParameter("K", self.granularity, k_max)
     manipulator = ConfigurationManipulator()
     manipulator.add_parameter(m_param)
     manipulator.add_parameter(n_param)
     manipulator.add_parameter(k_param)
     return manipulator
Ejemplo n.º 16
0
#!/usr/bin/env python
#
from opentuner import ConfigurationManipulator
from opentuner.search.manipulator import PowerOfTwoParameter
from opentuner.search.manipulator import IntegerParameter
mdriver_manipulator = ConfigurationManipulator()

"""
See opentuner/search/manipulator.py for more parameter types,
like IntegerParameter, EnumParameter, etc.

TODO(project3): Implement the parameters of your allocator. Once
you have at least one other parameters, feel free to remove ALIGNMENT.
"""
#mdriver_manipulator.add_parameter(IntegerParameter('SMALL_BIN_SEARCH_MAX', 0, 32))
mdriver_manipulator.add_parameter(IntegerParameter('LARGE_BIN_SEARCH_MAX', 0, 32))
mdriver_manipulator.add_parameter(IntegerParameter('EXTENSION_SIZE', 8, 2000))
#mdriver_manipulator.add_parameter(IntegerParameter('INITIAL_CHUNK_SIZE', 0, 40000))

Ejemplo n.º 17
0
    def manipulator(self):

        manipulator = ConfigurationManipulator()
        manipulator.add_parameter(
            LogIntegerParameter("INIT_INTERVAL_HOR", 1, 16))
        manipulator.add_parameter(
            LogIntegerParameter("INIT_INTERVAL_VER", 1, 16))
        manipulator.add_parameter(IntegerParameter("UNROLL_FACTOR_HOR", 1, 2))
        manipulator.add_parameter(IntegerParameter("UNROLL_FACTOR_VER", 1, 2))
        manipulator.add_parameter(
            LogIntegerParameter("ARRAY_PARTITION_FACTOR", 1, 15))
        manipulator.add_parameter(
            EnumParameter("ACCELERATOR_1_CLOCK", ['0', '1', '2', '3']))
        manipulator.add_parameter(
            EnumParameter("ACCELERATOR_2_CLOCK", ['0', '1', '2', '3']))
        manipulator.add_parameter(
            FloatParameter("ACCELERATOR_1_UNCERTAINTY", 0, 100))
        manipulator.add_parameter(
            FloatParameter("ACCELERATOR_2_UNCERTAINTY", 0, 100))
        manipulator.add_parameter(
            EnumParameter("DATA_MOVER_CLOCK", ['0', '1', '2', '3']))
        return manipulator
Ejemplo n.º 18
0
#!/usr/bin/env python
#
from opentuner import ConfigurationManipulator
from opentuner.search.manipulator import PowerOfTwoParameter

mdriver_manipulator = ConfigurationManipulator()

"""
See opentuner/search/manipulator.py for more parameter types,
like IntegerParameter, EnumParameter, etc.

TODO(project3): Implement the parameters of your allocator. Once
you have at least one other parameters, feel free to remove ALIGNMENT.
"""
mdriver_manipulator.add_parameter(PowerOfTwoParameter("ALIGNMENT", 8, 8))
mdriver_manipulator.add_parameter(PowerOfTwoParameter("MIN_SIZE", 1, 1 << 17))
mdriver_manipulator.add_parameter(PowerOfTwoParameter("MIN_DIFF", 1, 1 << 17))
Ejemplo n.º 19
0
#!/usr/bin/env python
#
from opentuner import ConfigurationManipulator
from opentuner.search.manipulator import PowerOfTwoParameter

mdriver_manipulator = ConfigurationManipulator()

"""
See opentuner/search/manipulator.py for more parameter types,
like IntegerParameter, EnumParameter, etc.

TODO(project3): Implement the parameters of your allocator. Once
you have at least one other parameters, feel free to remove ALIGNMENT.
"""
mdriver_manipulator.add_parameter(PowerOfTwoParameter('ALIGNMENT', 8, 8))
Ejemplo n.º 20
0
    def manipulator(self):
        """                                                                          
        Define the search space by creating a                                        
        ConfigurationManipulator                                                     
        """

        # set the global flags needed for printing schedules
        if self.args.enable_NUMA_tuning == 0:
            self.enable_NUMA_tuning = False
        if self.args.enable_parallel_tuning == 0:
            self.enable_parallel_tuning = False
        if self.args.enable_denseVertexSet_tuning == 0:
            self.enable_denseVertexSet_tuning = False

        manipulator = ConfigurationManipulator()
        manipulator.add_parameter(
            EnumParameter('direction', [
                'SparsePush', 'DensePull', 'SparsePush-DensePull',
                'DensePush-SparsePush'
            ]))

        if self.enable_parallel_tuning:
            manipulator.add_parameter(
                EnumParameter('parallelization', [
                    'dynamic-vertex-parallel',
                    'edge-aware-dynamic-vertex-parallel'
                ]))
        else:
            manipulator.add_parameter(
                EnumParameter('parallelization', ['serial']))

        manipulator.add_parameter(
            IntegerParameter('numSSG', 1, self.args.max_num_segments))

        if self.enable_NUMA_tuning:
            manipulator.add_parameter(
                EnumParameter('NUMA', ['serial', 'static-parallel']))

        if self.enable_denseVertexSet_tuning:
            manipulator.add_parameter(
                EnumParameter('DenseVertexSet',
                              ['boolean-array', 'bitvector']))

        return manipulator
Ejemplo n.º 21
0
    def manipulator(self):
        manipulator = ConfigurationManipulator()

        manipulator.add_parameter(IntegerParameter('nsup', 50, 300))
        manipulator.add_parameter(IntegerParameter('nrel', 10, 40))
        manipulator.add_parameter(IntegerParameter('colperm', 0, 4))
        manipulator.add_parameter(IntegerParameter('lookahead', 0, 10))
        manipulator.add_parameter(IntegerParameter('numthreads', 1, 10))

        '''
   	Parameters for testing SuperLU     
        '''

        return manipulator
Ejemplo n.º 22
0
#!/usr/bin/env python
#
from opentuner import ConfigurationManipulator
from opentuner.search.manipulator import PowerOfTwoParameter, IntegerParameter

mdriver_manipulator = ConfigurationManipulator()

"""
See opentuner/search/manipulator.py for more parameter types,
like IntegerParameter, EnumParameter, etc.

TODO(project3): Implement the parameters of your allocator. Once
you have at least one other parameters, feel free to remove ALIGNMENT.
"""
# mdriver_manipulator.add_parameter(PowerOfTwoParameter('ALIGNMENT', 8, 8))
mdriver_manipulator.add_parameter(IntegerParameter('NUMBUCKETS', 2, 128))
mdriver_manipulator.add_parameter(IntegerParameter('BASESIZE', 2, 1000))
Ejemplo n.º 23
0
#!/usr/bin/env python
#
from opentuner import ConfigurationManipulator
from opentuner.search.manipulator import PowerOfTwoParameter
from opentuner.search.manipulator import IntegerParameter
mdriver_manipulator = ConfigurationManipulator()
"""
See opentuner/search/manipulator.py for more parameter types,
like IntegerParameter, EnumParameter, etc.

TODO(project3): Implement the parameters of your allocator. Once
you have at least one other parameters, feel free to remove ALIGNMENT.
"""
#mdriver_manipulator.add_parameter(IntegerParameter('SMALL_BIN_SEARCH_MAX', 0, 32))
mdriver_manipulator.add_parameter(
    IntegerParameter('LARGE_BIN_SEARCH_MAX', 0, 32))
mdriver_manipulator.add_parameter(IntegerParameter('EXTENSION_SIZE', 8, 2000))
#mdriver_manipulator.add_parameter(IntegerParameter('INITIAL_CHUNK_SIZE', 0, 40000))
Ejemplo n.º 24
0
    def manipulator(self):
        """
    Returns an object that represents the parameters that can be tuned.
    """

        manipulator = ConfigurationManipulator()
        if 'ExhaustiveSearch' in self.args.technique:
            #      manipulator.add_parameter(EnumParameter("CLOCK", ['0', '1', '2', '3']))
            #      manipulator.add_parameter(EnumParameter("KERNEL_CLOCK", ['0', '1', '2', '3']))
            manipulator.add_parameter(LogIntegerParameter("CONVOLVERS", 1, 16))
            manipulator.add_parameter(
                IntegerParameter("BIN_DENSE_PIPELINE", 1, 16))
#      manipulator.add_parameter(IntegerParameter("FP_CONV_UNROLL", 1, 16))
        else:
            manipulator.add_parameter(
                EnumParameter("KERNEL_CLOCK", ['0', '1', '2', '3']))
            manipulator.add_parameter(
                FloatParameter("CLOCK_UNCERTAINTY", 0, 100))
            manipulator.add_parameter(
                EnumParameter("DATA_MOVER_CLOCK", ['0', '1', '2', '3']))
            manipulator.add_parameter(
                EnumParameter("DATA_MOVER_SHARING", ['0', '1', '2', '3']))
            manipulator.add_parameter(IntegerParameter("IMPL_STRATEGY", 0, 27))
            manipulator.add_parameter(
                LogIntegerParameter("CONVOLVERS", 1, 16, prior="inc"))
            manipulator.add_parameter(
                IntegerParameter("BIN_DENSE_PIPELINE", 1, 16, prior="dec"))
            manipulator.add_parameter(
                IntegerParameter("FP_CONV_UNROLL", 1, 16, prior="inc"))
        return manipulator
Ejemplo n.º 25
0
    def manipulator(self):
        """
    Define the search space by creating a
    ConfigurationManipulator
    """
        sys.stderr.write('AUTOTUNER:   Create the design space\n')

        # Check if manipulator has already been invoked
        defineDesignSpace = len(self.designSpace) == 0

        # Read the range of each dimension of the design space
        inputFile = os.environ['RANGE_FILE']
        ranges = utils.readFile(inputFile)

        # Describe the design space to opentuner
        param = 0
        manipulator = ConfigurationManipulator()
        for elem in ranges:

            # Check if there is a design space
            if defineDesignSpace:
                self.designSpace.append(elem)

            # Check if the current dimension has a cardinality higher than 1
            if elem > 1:

                # Check the type of the parameter
                paramType = param % 9

                # Create the parameter
                if paramType == 0:

                    # Should the loop be parallelized?
                    openTuner_param = SwitchParameter(str(param), elem)

                elif paramType == 1:

                    # Unroll factor
                    openTuner_param = IntegerParameter(str(param), 0,
                                                       str(elem - 1))

                elif paramType == 2:

                    # Peel factor
                    openTuner_param = IntegerParameter(str(param), 0,
                                                       str(elem - 1))

                elif paramType == 3:

                    # Parallelization technique
                    openTuner_param = IntegerParameter(str(param), 0,
                                                       str(elem - 1))

                elif paramType == 4:

                    # Number of cores to dedicate to the current loop
                    openTuner_param = IntegerParameter(str(param), 0,
                                                       str(elem - 1))

                elif paramType == 5:

                    # DOALL parameter: chunk factor
                    openTuner_param = IntegerParameter(str(param), 0,
                                                       str(elem - 1))

                elif paramType == 6:

                    # HELIX parameter: should we fix the maximum number of sequential segments?
                    openTuner_param = SwitchParameter(str(param), elem)

                elif paramType == 7:

                    # HELIX parameter: maximum number of sequential segments
                    openTuner_param = IntegerParameter(str(param), 0,
                                                       str(elem - 1))

                elif paramType == 8:

                    # DSWP parameter: should we use queue packing?
                    openTuner_param = SwitchParameter(str(param), elem)

                # Share the parameter to OpenTuner
                manipulator.add_parameter(openTuner_param)

            param += 1

        # Load outputDistortion module if possible
        benchmark = os.environ['BENCHMARK_NAME']
        self.outputDistortionModule = None
        try:
            self.outputDistortionModule = importlib.import_module(
                'benchmark.' + benchmark + '.outputDistortion')
        except ImportError:
            self.outputDistortionModule = None

        if defineDesignSpace:
            sys.stderr.write('AUTOTUNER:     Whole design space (' +
                             str(len(self.designSpace)) + ') = ' +
                             str(self.designSpace) + '\n')

        return manipulator
Ejemplo n.º 26
0
    def manipulator(self):
        """                                                                          
        Define the search space by creating a                                        
        ConfigurationManipulator                                                     
        """

        # set the global flags needed for printing schedules
        if self.args.enable_NUMA_tuning == 0:
            self.enable_NUMA_tuning = False
        if self.args.enable_parallel_tuning == 0:
            self.enable_parallel_tuning = False
        if self.args.enable_denseVertexSet_tuning == 0:
            self.enable_denseVertexSet_tuning = False


        manipulator = ConfigurationManipulator()
        manipulator.add_parameter(
            EnumParameter('direction', 
                          ['SparsePush','DensePull', 'SparsePush-DensePull', 'DensePush-SparsePush']))

        #'edge-aware-dynamic-vertex-parallel' not supported with the latest g++ cilk implementation
        if self.enable_parallel_tuning:
            manipulator.add_parameter(EnumParameter('parallelization',['dynamic-vertex-parallel'])) 
        else:
            manipulator.add_parameter(EnumParameter('parallelization', ['serial']))

        manipulator.add_parameter(IntegerParameter('numSSG', 1, self.args.max_num_segments))
        
        if self.enable_NUMA_tuning:
            manipulator.add_parameter(EnumParameter('NUMA',['serial','static-parallel']))

        if self.enable_denseVertexSet_tuning:
            manipulator.add_parameter(EnumParameter('DenseVertexSet', ['boolean-array', 'bitvector']))

        # adding new parameters for PriorityGraph (Ordered GraphIt) 
        manipulator.add_parameter(IntegerParameter('delta', 1, self.args.max_delta))

        manipulator.add_parameter(
            EnumParameter('bucket_update_strategy', 
                          ['eager_priority_update','eager_priority_update_with_merge', 'lazy_priority_update']))

        return manipulator
Ejemplo n.º 27
0
  def manipulator(self):
    """
    Define the search space by creating a
    ConfigurationManipulator
    """
    manipulator = ConfigurationManipulator()
    manipulator.add_parameter(IntegerParameter('batch_size', 50, 200))
    manipulator.add_parameter(IntegerParameter('layer', 1, 5))
    manipulator.add_parameter(IntegerParameter('neural', 50, 200))
    manipulator.add_parameter(IntegerParameter('max_iter', 1, 500))
    manipulator.add_parameter(FloatParameter('learning_rate_init', 0.0001, 0.01))
    manipulator.add_parameter(FloatParameter('power_t', 0.2, 0.8))
    manipulator.add_parameter(FloatParameter('alpha', 0.00001, 0.001))

    return manipulator
Ejemplo n.º 28
0
 def manipulator(self):
     """Setup common state and define search space"""
     manipulator = ConfigurationManipulator()
     # parse and sanitize kernel shape argument
     if not self.args.mnk:
         self.args.mnk = default_mnk
     mnk = tuple(max(int(i), 1) for i in self.args.mnk.split("x"))
     self.mnk = (mnk + (mnk[0], mnk[0]))[:3]
     # sanitize input arguments
     self.args.mb = max(self.args.mb, 1)
     self.args.bs = max(min(self.args.bs, self.args.mb), 1)
     self.args.bm = [max(self.args.bm, 1), self.mnk[0]][0 == self.args.bm]
     self.args.bn = [max(self.args.bn, 1), 1][0 == self.args.bn]
     self.args.bk = [max(self.args.bk, 1), self.mnk[2]][0 == self.args.bk]
     self.args.ws = min(self.args.ws, self.mnk[0] * self.mnk[1])
     self.bs = self.bm = self.bn = self.bk = self.ws = self.wg = self.lu = None
     self.nz = self.al = self.tb = self.tc = None
     self.ap = self.aa = self.ab = self.ac = None
     self.typename = self.typeid = None
     self.device = self.size = None
     self.gfbase = self.gflops = 0
     self.config = None
     self.exename = "acc_bench_smm"
     self.exepath = os.path.join(
         os.path.dirname(sys.argv[0]), "..", "..", self.exename
     )
     run_result = (  # verbosity to capture device name and tuned parameters
         self.launch(["ACC_OPENCL_VERBOSE=2", "CHECK=0"], nrep=1)
         if (self.args.merge is None or 0 > self.args.merge)
         and (self.args.update is None or "" == self.args.update)
         else None
     )
     if run_result:
         stdout = str(run_result["stdout"])
         if 0 >= self.args.size:
             size = re.search(
                 "{}\\s+[0-9]+\\s+([0-9]+)".format(self.exepath),
                 stdout,
             )
             self.size = int(size.group(1)) if size and size.group(1) else 0
         else:
             self.size = self.args.size
         typename = re.search("typename \\(id=([0-9]+)\\):\\s+(\\w+)", stdout)
         self.typename = typename.group(2) if typename and typename.group(2) else ""
         self.typeid = (
             int(typename.group(1)) if typename and typename.group(1) else 0
         )
         device = re.search(
             'INFO ACC/OpenCL:\\s+ndevices=[0-9]+\\s+device[0-9]+="(.+)"\\s+uid=',
             str(run_result["stderr"]),
         )
         self.device = device.group(1) if device and device.group(1) else ""
     elif self.args.update is not None and "" != self.args.update:
         self.device = self.args.update
     if run_result and 0 == run_result["returncode"]:
         seedpat = "INFO ACC/OpenCL:\\s+SMM-kernel\\s+{}={}\\s+gen=".format(
             "{t,m,n,k, bs,bm,bn,bk, ws,wg, lu,nz,al, tb,tc, ap,aa,ab,ac}",
             "{{{}, {}}}".format(  # key and value
                 "{},{},{},{}".format(  # t,m,n,k (key)
                     self.typeid, self.mnk[0], self.mnk[1], self.mnk[2]
                 ),
                 "{}, {}, {}, {}, {}".format(  # value: some can be neg. hence "-*[0-9]+"
                     "(-*[0-9]+),(-*[0-9]+),(-*[0-9]+),(-*[0-9]+)",  # bs,bm,bn,bk
                     "(-*[0-9]+),(-*[0-9]+)",  # ws,wg
                     "(-*[0-9]+),(-*[0-9]+),(-*[0-9]+)",  # lu,nz,al
                     "(-*[0-9]+),(-*[0-9]+)",  # tb,tc
                     "(-*[0-9]+),(-*[0-9]+),(-*[0-9]+),(-*[0-9]+)",  # ap,aa,ab,ac
                 ),
             ),
         )
         seed = re.search(seedpat, str(run_result["stderr"]))
         if 15 != (len(seed.groups()) if seed else 0):
             print("WARNING: missed to parse initial parameters!")
         # setup fixed and tunable parameters
         params, paramt = [], []
         self.create_param("BS", params, paramt, seed, 1, 1, self.args.mb)
         self.create_param("BM", params, paramt, seed, 2, 1, self.mnk[0])
         self.create_param("BN", params, paramt, seed, 3, 1, self.mnk[1])
         self.create_param("BK", params, paramt, seed, 4, 1, self.mnk[0])
         self.create_param(
             "WS", params, paramt, seed, 5, 1, self.mnk[0] * self.mnk[1]
         )
         self.create_param("WG", params, paramt, seed, 6, -2, 1)  # avoid WG=2
         self.create_param("LU", params, paramt, seed, 7, -2, 2)
         self.create_param("NZ", params, paramt, seed, 8, 0, 1)
         self.create_param("AL", params, paramt, seed, 9, 0, 1)
         self.create_param("TB", params, paramt, seed, 10, 0, 1)
         self.create_param("TC", params, paramt, seed, 11, 0, 1)
         self.create_param("AP", params, paramt, seed, 12, 0, 1)
         self.create_param("AA", params, paramt, seed, 13, 0, 3)
         self.create_param("AB", params, paramt, seed, 14, 0, 3)
         self.create_param("AC", params, paramt, seed, 15, 0, 2)
         if not paramt:
             sys.tracebacklimit = 0
             raise RuntimeError(
                 "All tunable parameters are fixed with environment variables!"
             )
         for param in params + paramt:
             manipulator.add_parameter(param)
     # consider to update and/or merge JSONS (update first)
     if (
         (self.args.merge is not None and (0 <= self.args.merge or self.typeid))
         or self.args.update is None
         or "" != self.args.update
     ):
         filepattern = "{}-*.json".format(default_basename)
         filenames = glob.glob(
             os.path.normpath(os.path.join(self.args.jsondir, filepattern))
         )
         if self.args.update is None or "" != self.args.update:
             self.update_jsons(filenames)
         if self.args.merge is not None:
             self.merge_jsons(filenames)
         exit(0)
     elif (
         (self.typename and "" != self.typename)
         and (self.device and "" != self.device)
         and (self.size and 0 < self.size)
         and self.typeid
     ):  # construct label used for the database session
         if not self.args.label:  # consider to include self.device
             self.args.label = "{}-{}-{}x{}x{}-s{}".format(
                 default_basename,
                 self.typename,
                 self.mnk[0],
                 self.mnk[1],
                 self.mnk[2],
                 ilog2(self.size),
             )
     else:
         sys.tracebacklimit = 0
         raise RuntimeError("Setup failed for {}!".format(self.exepath))
     # register signal handler (CTRL-C)
     signal(SIGINT, self.handle_sigint)
     return manipulator
Ejemplo n.º 29
0
#!/usr/bin/env python
#
from opentuner import ConfigurationManipulator
from opentuner.search.manipulator import PowerOfTwoParameter

mdriver_manipulator = ConfigurationManipulator()
"""
See opentuner/search/manipulator.py for more parameter types,
like IntegerParameter, EnumParameter, etc.

TODO(project3): Implement the parameters of your allocator. Once
you have at least one other parameters, feel free to remove ALIGNMENT.
"""
mdriver_manipulator.add_parameter(PowerOfTwoParameter('ALIGNMENT', 8, 8))
Ejemplo n.º 30
0
    def manipulator(self):
        """
    Returns an object that represents the parameters that can be tuned.
    """

        manipulator = ConfigurationManipulator()
        manipulator.add_parameter(BooleanParameter("PIPELINE_SUB"))
        manipulator.add_parameter(BooleanParameter("PIPELINE_ADDKEY"))
        manipulator.add_parameter(BooleanParameter("PIPELINE_CPKEY"))
        manipulator.add_parameter(BooleanParameter("PIPELINE_MIX"))
        manipulator.add_parameter(BooleanParameter("PIPELINE_EXP1"))
        manipulator.add_parameter(BooleanParameter("PIPELINE_EXP2"))
        manipulator.add_parameter(BooleanParameter("PIPELINE_ECB1"))
        manipulator.add_parameter(BooleanParameter("PIPELINE_ECB2"))
        manipulator.add_parameter(BooleanParameter("PIPELINE_ECB3"))
        manipulator.add_parameter(
            IntegerParameter("UNROLL_FACTOR_SUB", 1, 16, prior="inc"))
        manipulator.add_parameter(
            IntegerParameter("UNROLL_FACTOR_ADDKEY", 1, 16, prior="inc"))
        manipulator.add_parameter(
            IntegerParameter("UNROLL_FACTOR_CPKEY", 1, 16, prior="inc"))
        manipulator.add_parameter(
            IntegerParameter("UNROLL_FACTOR_MIX", 1, 4, prior="inc"))
        manipulator.add_parameter(
            IntegerParameter("UNROLL_FACTOR_EXP1", 1, 3, prior="inc"))
        manipulator.add_parameter(
            IntegerParameter("UNROLL_FACTOR_EXP2", 1, 3, prior="inc"))
        manipulator.add_parameter(
            IntegerParameter("UNROLL_FACTOR_ECB1", 1, 32, prior="inc"))
        manipulator.add_parameter(
            IntegerParameter("UNROLL_FACTOR_ECB2", 1, 8, prior="inc"))
        manipulator.add_parameter(
            IntegerParameter("UNROLL_FACTOR_ECB3", 1, 13, prior="inc"))
        manipulator.add_parameter(
            IntegerParameter("PIPELINE_II_SUB", 1, 16, prior="dec"))
        manipulator.add_parameter(
            IntegerParameter("PIPELINE_II_ADDKEY", 1, 16, prior="dec"))
        manipulator.add_parameter(
            IntegerParameter("PIPELINE_II_CPKEY", 1, 16, prior="dec"))
        manipulator.add_parameter(
            IntegerParameter("PIPELINE_II_MIX", 1, 4, prior="dec"))
        manipulator.add_parameter(
            IntegerParameter("PIPELINE_II_EXP1", 1, 3, prior="dec"))
        manipulator.add_parameter(
            IntegerParameter("PIPELINE_II_EXP2", 1, 3, prior="dec"))
        manipulator.add_parameter(
            IntegerParameter("PIPELINE_II_ECB1", 1, 32, prior="dec"))
        manipulator.add_parameter(
            IntegerParameter("PIPELINE_II_ECB2", 1, 8, prior="dec"))
        manipulator.add_parameter(
            IntegerParameter("PIPELINE_II_ECB3", 1, 13, prior="dec"))
        manipulator.add_parameter(
            EnumParameter("KERNEL_CLOCK", ['0', '1', '2', '3']))
        manipulator.add_parameter(
            EnumParameter("DATA_MOVER_CLOCK", ['0', '1', '2', '3']))
        return manipulator
Ejemplo n.º 31
0
 def manipulator(self):
     """
 Define the search space by creating a
 ConfigurationManipulator
 """
     manipulator = ConfigurationManipulator()
     manipulator.add_parameter(
         EnumParameter('hibench.yarn.executor.cores',
                       ['1', '4', '8', '16', '24', '48']))
     manipulator.add_parameter(
         EnumParameter('hibench.yarn.executor.num',
                       ['1', '2', '3', '6', '12', '48']))
     manipulator.add_parameter(IntegerParameter('spark.task.cpus', 1, 4))
     manipulator.add_parameter(
         EnumParameter('spark.shuffle.compress', ['1', '0']))
     manipulator.add_parameter(
         EnumParameter('spark.memory.fraction',
                       ['0.25', '0.4', '0.5', '0.6', '0.7', '0.8']))
     manipulator.add_parameter(EnumParameter('spark.serializer',
                                             ['0', '1']))
     manipulator.add_parameter(
         EnumParameter('spark.scheduler.maxRegisteredResourcesWaitingTime',
                       ['10', '15', '25', '30', '40', '60']))
     manipulator.add_parameter(
         EnumParameter(
             'spark.default.parallelism',
             ['8', '15', '25', '35', '50', '-1'
              ]))  #-1 represents default value of config and we need it
     manipulator.add_parameter(
         EnumParameter('spark.sql.shuffle.partitions',
                       ['75', '100', '150', '200', '250', '400']))
     manipulator.add_parameter(
         EnumParameter('spark.cleaner.periodicGC.interval',
                       ['5', '10', '15', '30', '35', '60']))
     manipulator.add_parameter(
         EnumParameter('spark.io.compression.lz4.blockSize',
                       ['8', '16', '32', '40', '64', '80']))
     manipulator.add_parameter(
         EnumParameter('spark.memory.storageFraction',
                       ['0.3', '0.35', '0.4', '0.5', '0.6', '0.7']))
     manipulator.add_parameter(
         EnumParameter('spark.yarn.am.memory',
                       ['256', '400', '512', '750', '1000', '1500']))
     manipulator.add_parameter(
         EnumParameter('spark.scheduler.revive.interval',
                       ['1000', '1500', '2000', '2500', '3000', '4000']))
     manipulator.add_parameter(
         EnumParameter('spark.locality.wait.process',
                       ['1500', '2000', '2500', '3000', '4000', '6000']))
     manipulator.add_parameter(
         EnumParameter('spark.shuffle.sort.bypassMergeThreshold',
                       ['75', '100', '150', '200', '250', '400']))
     manipulator.add_parameter(
         EnumParameter('spark.shuffle.io.preferDirectBufs', ['1', '0']))
     manipulator.add_parameter(
         EnumParameter('spark.task.maxFailures',
                       ['1', '2', '3', '4', '6', '8']))
     manipulator.add_parameter(
         EnumParameter('spark.files.openCostInBytes', [
             '1000000', '2000000', '3500000', '4194304', '7000000',
             '9000000'
         ]))
     manipulator.add_parameter(
         EnumParameter('spark.shuffle.file.buffer',
                       ['16', '28', '32', '45', '64', '80']))
     manipulator.add_parameter(
         EnumParameter('spark.cleaner.referenceTracking.blocking',
                       ['1', '0']))
     manipulator.add_parameter(
         EnumParameter('spark.kryoserializer.buffer.max',
                       ['24', '32', '50', '64', '90', '128']))
     manipulator.add_parameter(
         EnumParameter('spark.executor.memory', [
             '600', '1000', '2400', '4800', '9600', '19200', '54000',
             '108000'
         ]))
     return manipulator
Ejemplo n.º 32
0
 def manipulator(self):
     manipulator = ConfigurationManipulator()
     for param in self.adjParams:
         manipulator.add_parameter(param)
     return manipulator
Ejemplo n.º 33
0
#!/usr/bin/env python
#
from opentuner import ConfigurationManipulator
from opentuner.search.manipulator import PowerOfTwoParameter
from opentuner.search.manipulator import IntegerParameter

mdriver_manipulator = ConfigurationManipulator()
"""
See opentuner/search/manipulator.py for more parameter types,
like IntegerParameter, EnumParameter, etc.

TODO(project3): Implement the parameters of your allocator. Once
you have at least one other parameters, feel free to remove ALIGNMENT.
"""
mdriver_manipulator.add_parameter(PowerOfTwoParameter('ALIGNMENT', 8, 8))
mdriver_manipulator.add_parameter(
    PowerOfTwoParameter('MIN_BLOCK_SIZE', 16, 32768))
mdriver_manipulator.add_parameter(
    PowerOfTwoParameter('MIN_SPLIT_SIZE', 16, 32768))
Ejemplo n.º 34
0
 def manipulator(self):
     manipulator = ConfigurationManipulator()
     manipulator.add_parameter(PowerOfTwoParameter('local1D', 1, 64))
     #manipulator.add_parameter(PowerOfTwoParameter('local2D_x',1,1024))
     #manipulator.add_parameter(PowerOfTwoParameter('local2D_y',1,1024))
     return manipulator
Ejemplo n.º 35
0
#!/usr/bin/env python
#
from opentuner import ConfigurationManipulator
from opentuner.search.manipulator import PowerOfTwoParameter

mdriver_manipulator = ConfigurationManipulator()
"""
See opentuner/search/manipulator.py for more parameter types,
like IntegerParameter, EnumParameter, etc.

TODO(project3): Implement the parameters of your allocator. Once
you have at least one other parameters, feel free to remove ALIGNMENT.
"""
#mdriver_manipulator.add_parameter(PowerOfTwoParameter('ALIGNMENT', 8, 8))

mdriver_manipulator.add_parameter(PowerOfTwoParameter('BLOCK_SIZE', 32, 32768))
Ejemplo n.º 36
0
 def manipulator(self):
     """
 Define the search space by creating a
 ConfigurationManipulator
 """
     manipulator = ConfigurationManipulator()
     for i, param in enumerate(self.params):
         if param[0] == "None":
             continue
         if param[0] == "Int":
             manipulator.add_parameter(
                 IntegerParameter(i, int(param[1]), int(param[2])))
             continue
         if param[0] == "Log":
             manipulator.add_parameter(
                 LogIntegerParameter(i, int(param[1]), int(param[2])))
             continue
         if param[0] == "Pow":
             manipulator.add_parameter(
                 PowerOfTwoParameter(i, 2**int(param[1]), 2**int(param[2])))
             continue
         if param[0] == "Switch":
             manipulator.add_parameter(SwitchParameter(i, int(param[1])))
             continue
         if param[0] == "Bool":
             manipulator.add_parameter(BooleanParameter(i))
             continue
     return manipulator