Ejemplo n.º 1
0
     ('DynamicBitset&', 'bitset_comp_current'),
     ('HGAccumulator<unsigned int>', 'DGAccumulator_accum')
 ], [
     CDecl([
         ("__shared__ cub::BlockReduce<unsigned int, TB_SIZE>::TempStorage",
          "DGAccumulator_accum_ts", "")
     ]),
     CBlock(["DGAccumulator_accum.thread_entry()"]),
     ForAll("src", G.nodes("__begin", "__end"), [
         CDecl([("bool", "pop", " = src < __end")]),
         If("pop", []),
         UniformConditional(If("!pop", [CBlock("continue")]),
                            uniform_only=False,
                            _only_if_np=True),
         ClosureHint(
             ForAll("jj", G.edges("src"), [
                 CDecl([("index_type", "dst", "")]),
                 CBlock(["dst = graph.getAbsDestination(jj)"]),
                 CDecl([("uint32_t", "new_comp", "")]),
                 CBlock(["new_comp = p_comp_current[dst]"]),
                 CDecl([("uint32_t", "old_comp", "")]),
                 CBlock([
                     "old_comp = atomicTestMin(&p_comp_current[src], new_comp)"
                 ]),
                 If("old_comp > new_comp", [
                     CBlock(["bitset_comp_current.set(src)"]),
                     CBlock(["DGAccumulator_accum.reduce( 1)"]),
                 ]),
             ]), ),
     ]),
     CBlock([
Ejemplo n.º 2
0
     ForAll("src", G.nodes("__begin", "__end"), [
         CDecl([("bool", "pop", " = src < __end")]),
         If("pop", [
             If("p_delta[src] > 0", [
                 CBlock(["_delta = p_delta[src]"]),
                 CBlock(["p_delta[src]  = 0"]),
                 CBlock(["active_vertices.reduce( 1)"]),
             ], [
                 CBlock(["pop = false"]),
             ]),
         ]),
         UniformConditional(If("!pop", [CBlock("continue")]),
                            uniform_only=False,
                            _only_if_np=True),
         ClosureHint(
             ForAll("nbr", G.edges("src"), [
                 CDecl([("index_type", "dst", "")]),
                 CBlock(["dst = graph.getAbsDestination(nbr)"]),
                 CBlock(["atomicTestAdd(&p_residual[dst], _delta)"]),
                 CBlock(["bitset_residual.set(dst)"]),
             ]), ),
     ]),
     CBlock([
         "active_vertices.thread_exit<cub::BlockReduce<unsigned int, TB_SIZE> >(active_vertices_ts)"
     ],
            parse=False),
 ]),
 Kernel("PageRankSanity", [
     G.param(), ('unsigned int', '__begin'), ('unsigned int', '__end'),
     ('float', 'local_tolerance'), ('float *', 'p_residual'),
     ('float *', 'p_value'),
Ejemplo n.º 3
0
         ]),
     ]),
 ]),
 Kernel("FirstIterationSSSP", [
     G.param(), ('unsigned int', '__begin'), ('unsigned int', '__end'),
     ('uint32_t *', 'p_current_length'),
     ('DynamicBitset&', 'bitset_current_length')
 ], [
     ForAll("src", G.nodes("__begin", "__end"), [
         CDecl([("bool", "pop", " = src < __end")]),
         If("pop", []),
         UniformConditional(If("!pop", [CBlock("continue")]),
                            uniform_only=False,
                            _only_if_np=True),
         ClosureHint(
             ForAll("current_edge", G.edges("src"), [
                 CDecl([("index_type", "dst", "")]),
                 CBlock(["dst = graph.getAbsDestination(current_edge)"]),
                 CDecl([("int", "edge_weight", "")]),
                 CBlock(["edge_weight = 1"]),
                 CBlock(["edge_weight += graph.getAbsWeight(current_edge)"
                         ]),
                 CDecl([("uint32_t", "new_dist", "")]),
                 CBlock(["new_dist = edge_weight + p_current_length[src]"]),
                 CBlock(["atomicMin(&p_current_length[dst], new_dist)"]),
                 CBlock(["bitset_current_length.set(dst)"]),
             ]), ),
     ]),
 ]),
 Kernel("SSSP", [
     G.param(), ('unsigned int', '__begin'), ('unsigned int', '__end'),
Ejemplo n.º 4
0
G = Graph("graph")
WL = Worklist()

ast = Module([
    CDecl([("extern int", "N_NODES", ""), ("extern int*", "COLORS", ""),
           ("extern int", "CHROMATIC_NUMBER", "")]),
    CBlock([
        cgen.Define("NOT_VALID", "0"),
        cgen.Define("VALID", "1"),
    ]),
    Kernel(
        "check_coloring",
        [G.param(), ("int *", "colors"), ("int *", "chromatic_number")], [
            ForAll("node", G.nodes(), [
                CBlock([("graph.node_data[node] = VALID")]),
                ForAll("edge", G.edges("node"), [
                    CDecl([("int", "dst", "=graph.getAbsDestination(edge)")]),
                    If("colors[node] == colors[dst]", [
                        CBlock([("graph.node_data[node] = NOT_VALID")]),
                    ]),
                ]),
                CBlock(["atomicMax(chromatic_number, colors[node])"]),
            ]),
        ]),
    Kernel("gg_main", [('CSRGraphTy&', 'hg'), ('CSRGraphTy&', 'gg')], [
        CDecl([("Shared<int>", "colors", "(hg.nnodes)"),
               ("Shared<int>", "chromatic_number", "(1)")]),
        CFor(CDecl(("int", "i", "= 0")), "i < N_NODES", "i++",
             [CBlock([("colors.cpu_wr_ptr()[i] = COLORS[i]")])]),
        Invoke("check_coloring",
               ["gg", "colors.gpu_rd_ptr()", "chromatic_number.zero_gpu()"]),