Skip to content
Snippets Groups Projects
Select Git revision
  • 84a3a5863b4a55056726851267a70f4995d0747c
  • master default
  • test_nb_threads
  • crazy
  • sigmoid
  • GatherBcast
6 results

tools.py

Blame
  • tools.py 4.17 KiB
    import argparse
    import re
    import math
    
    #--------------------------------------------------------------------------
    # Cmd line parsing 
    #--------------------------------------------------------------------------
    
    def cmdLineParsing():
        n1 = 256
        n2 = 256
        n3 = 256
        nb_threads = 8
        reps = 100
        cbx = 32
        cby = 32
        cbz = 32
    
        parser = argparse.ArgumentParser()
        parser.add_argument("--n1", help="n1", default=n1, type=int)
        parser.add_argument("--n2", help="n1", default=n2, type=int)
        parser.add_argument("--n3", help="n1", default=n3, type=int)
        parser.add_argument("--thds", help="Number of threads", default=nb_threads, type=int)
        parser.add_argument("--reps", help="Number of reps", default=reps, type=int)
        parser.add_argument("--cbx", help="n1 Thread block size", default=cbx, type=int)
        parser.add_argument("--cby", help="n2 Thread block size", default=cby, type=int)
        parser.add_argument("--cbz", help="n3 Thread block size", default=cbz, type=int)
    
        args = parser.parse_args()
    
        return args.n1, args.n2, args.n3, args.thds, args.reps, args.cbx, args.cby, args.cbz
    
    
    #-----------------------------------------------------------------
    # Extracting function
    #-----------------------------------------------------------------
    
    def commandLineExtract(commandLineOutput):
        """Extract time, throughput and GFlops from the mpirun execution
    
        Args:
            commandLineOutput (string): Corresponds to the command line output of the exeFile execution
    
        Returns:
            list[float]: List of executions times
            list[float]: List of executions throughputs
            list[float]: List of executions Gflops
            list[list]:
                list[float]: [time, throughput, gflop] Executions caracteristics
    
        """
    
        # Initialize outputs
        times = []
        throughputs = []
        gflops = []
        byRun = []
    
        # Setup for one execution
        run = []
    
        # Extract caracteristics
        for line in str(commandLineOutput.stdout,'utf-8').split('\n'):
            # Extract time
            if "time" in line:
                # Find float in line
                time = float(re.findall("\d+\.\d+", line)[0])
                times.append(time)
                run.append(time)
    
            # Extract troughput speed
            if "throughput" in line:
                # Find float in line
                throughput = float(re.findall("\d+\.\d+", line)[0])
                throughputs.append(throughput)
                run.append(throughput)
    
            if "flops" in line:
                # Find GFlops in line
                gflop = float(re.findall("\d+\.\d+", line)[0])
                gflops.append(gflop)
                run.append(gflop)
                byRun.append(run)
    
                # Reset execution caracteristics
                run = []
    
        return times, throughputs, gflops, byRun
    
    
    #-----------------------------------------------------------------
    # Add pheromones function
    #-----------------------------------------------------------------
    
    def add_pheromones(tau, paths, costs, Q, n1_size, n2_size, n3_size, n_cbx, n_cby):
        """Computing of the pheromon matrix and the cost of each path.
    
        Args:
            tau (np.array): Pheromon matrix
            paths (np.array): Array of the paths taken by the ants: paths[i]=(cb_x//16,cb_y,cb_z)
            costs (np.array): Column array containing the costs.
            Q (float): quantity of pheromones added by an ant on an edge
            n1_size (int): First dimension of the problem
            n2_size (int): Second dimension of the problem
            n3_size (int): Third dimension of problem
            n_cbx (int): First dimension of the cache
            n_cby (int): Second dimension of the cache
    
        Returns:
            (np.array): the updated pheromon matrix
        """
    
        for i in range(len(costs)):
            p = paths[i, :]
            cost = costs[i, 0]
            tau[0,p[0]] += Q*(-1)*cost
            tau[p[0], p[1] + n1_size] += Q*(-1)*cost
            tau[p[1] + n1_size, p[2] + n1_size + n2_size] += Q*(-1)*cost
            tau[p[2] + n1_size + n2_size, p[3] + n1_size + n2_size + n3_size] += Q*(-1)*cost
            tau[p[3] + n1_size + n2_size + n3_size, p[4] + n1_size + n2_size + n3_size + n_cbx] += Q*(-1)*cost
            tau[p[4] + n1_size + n2_size + n3_size + n_cbx, p[5] + n1_size + n2_size + n3_size + n_cbx + n_cby] += Q*(-1)*cost
    
        return tau