Skip to content

Commit

Permalink
Merge pull request #80 from GraphIt-DSL/feature-delete-operator
Browse files Browse the repository at this point in the history
Feature delete operator
  • Loading branch information
yunmingzhang17 authored Nov 1, 2018
2 parents 9c76523 + 5498d5a commit 3f8725c
Show file tree
Hide file tree
Showing 33 changed files with 232 additions and 54 deletions.
3 changes: 1 addition & 2 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,7 @@ file(GLOB_RECURSE HEADER_FILES include/*.h)


file(GLOB_RECURSE SOURCE_FILES include/*.h include/graphit/midend/*.h src/*.cpp src/frontend/*.cpp src/midend/*.cpp src/backend/*.cpp src/utils/*.cpp src/utils/*.h include/utils/*.h)
add_executable(graphitc ${SOURCE_FILES})
target_compile_definitions(graphitc PRIVATE USE_DEFAULT_SCHEDULE)
add_executable(graphitc ${SOURCE_FILES} src/default_schedule.cpp)

# build a front end library used for unit testing
file(GLOB_RECURSE LIB_SOURCE_FILES include/*.h src/frontend/*.cpp src/midend/*.cpp src/backend/*.cpp src/utils/*.cpp src/main.cpp)
Expand Down
7 changes: 5 additions & 2 deletions apps/sssp.gt
Original file line number Diff line number Diff line change
Expand Up @@ -24,13 +24,16 @@ func main()

var rounds : int = 0;
while (frontier.getVertexSetSize() != 0)
#s1# frontier = edges.from(frontier).applyModified(updateEdge, SP);
rounds = rounds + 1;
#s1# var output: vertexset{Vertex} = edges.from(frontier).applyModified(updateEdge, SP);
delete frontier;
frontier = output;
rounds = rounds + 1;
if rounds == n
print "negative cycle";
break;
end
end
delete frontier;
var elapsed_time : float = stopTimer();
print "elapsed time: ";
print elapsed_time;
Expand Down
4 changes: 2 additions & 2 deletions graphit_eval/eval/table7/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -31,9 +31,9 @@ bfs = bfs_hybrid_dense bfs_hybrid_dense_bitvec
prd = pagerankdelta_hybrid_dense pagerankdelta_hybrid_dense_bitvec_segment pagerankdelta_sparse_push
cf = cf_pull_load_balance_segment

all: $(prd) $(bfs) $(cc) $(sssp) $(pr) openmp
all: $(prd) $(bfs) $(cc) $(sssp) $(pr) openmp_only_schedules

openmp:
openmp_only_schedules:
$(PCC) $(OPENMP_FLAGS) -o bin/bfs_push_slq cpps/bfs_push_slq.cpp
$(PCC) $(OPENMP_FLAGS) -o bin/sssp_push_slq cpps/sssp_push_slq.cpp
% : cpps/%.cpp
Expand Down
7 changes: 2 additions & 5 deletions graphit_eval/eval/table7/benchmark.py
Original file line number Diff line number Diff line change
Expand Up @@ -113,9 +113,6 @@ def get_cmd(framework, graph, app, point):

def main():
parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter)
parser.add_argument('-f', '--frameworks', nargs='+',
default=["graphit"], # "netflix" only used for cf
help="frameworks to benchmark")
parser.add_argument('-g', '--graphs', nargs='+',
default=["testGraph"], help = "enable graphs with socLive, road-usad, twitter, webGraph, friendster.Defaults to the test graph.")
parser.add_argument('-a', '--applications', nargs='+',
Expand All @@ -127,10 +124,10 @@ def main():
if args.use_NUMACTL != 1:
use_NUMACTL = False

path_setup(args.frameworks)
path_setup(["graphit"])

for graph in args.graphs:
for framework in args.frameworks:
for framework in ["graphit"]:
for generic_app_name in args.applications:
assert generic_app_name in framework_app_lookup[framework]

Expand Down
4 changes: 3 additions & 1 deletion include/graphit/frontend/parser.h
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,8 @@ namespace graphit {

fir::PrintStmt::Ptr parsePrintStmt();

fir::ExprStmt::Ptr parseDeleteStmt();

fir::ApplyStmt::Ptr parseApplyStmt();

fir::ExprStmt::Ptr parseExprOrAssignStmt();
Expand Down Expand Up @@ -241,4 +243,4 @@ namespace graphit {
}


#endif //GRAPHIT_PARSER_H
#endif //GRAPHIT_PARSER_H
5 changes: 5 additions & 0 deletions src/default_schedule.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
#include <graphit/frontend/high_level_schedule.h>
namespace graphit {
void user_defined_schedule (graphit::fir::high_level_schedule::ProgramScheduleNode::Ptr program) {
}
}
38 changes: 37 additions & 1 deletion src/frontend/parser.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -370,6 +370,8 @@ namespace graphit {
stmt->stmt_label = label->ident;
return stmt;
}
case Token::Type::DELETE:
return parseDeleteStmt();
default:
return parseExprOrAssignStmt();
}
Expand Down Expand Up @@ -689,6 +691,39 @@ namespace graphit {
}
}

// delete_stmt: ('delete') expr ';'
fir::ExprStmt::Ptr Parser::parseDeleteStmt() {
try {
fir::ExprStmt::Ptr stmt;
stmt = std::make_shared<fir::ExprStmt>();

const Token deleteToken = consume(Token::Type::DELETE);
fir::CallExpr::Ptr call_expr = std::make_shared<fir::CallExpr>();

auto ident = std::make_shared<fir::Identifier>();
ident->ident = "deleteObject";
ident->setLoc(deleteToken);
call_expr->func = ident;

const fir::Expr::Ptr arg = parseExpr();
call_expr->args.push_back(arg);

stmt->expr = call_expr;

const Token endToken = consume(Token::Type::SEMICOL);
call_expr->setLoc(endToken);
stmt->setLoc(endToken);

return stmt;

} catch (const SyntaxError &) {
skipTo({Token::Type::SEMICOL});
consume(Token::Type::SEMICOL);

return fir::ExprStmt::Ptr();
}
}

// apply_stmt: apply ident ['<' endpoints '>'] ['(' [expr_params] ')']
// 'to' set_index_set ';'
fir::ApplyStmt::Ptr Parser::parseApplyStmt() {
Expand Down Expand Up @@ -2506,7 +2541,8 @@ namespace graphit {
decls.insert("fabs", IdentType::FUNCTION);
decls.insert("startTimer", IdentType::FUNCTION);
decls.insert("stopTimer", IdentType::FUNCTION);

decls.insert("atoi", IdentType::FUNCTION);

}

fir::BreakStmt::Ptr Parser::parseBreakStmt() {
Expand Down
7 changes: 5 additions & 2 deletions src/midend/mir_emitter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,10 @@ namespace graphit {
addVarOrConst(var_decl, false);
auto mir_var_decl = std::make_shared<mir::VarDecl>();
mir_var_decl->name = var_decl->name->ident;
mir_var_decl->initVal = emitExpr(var_decl->initVal);
if (var_decl->initVal != nullptr)
mir_var_decl->initVal = emitExpr(var_decl->initVal);
else
mir_var_decl->initVal = nullptr;
mir_var_decl->type = emitType(var_decl->type);
mir_var_decl->stmt_label = var_decl->stmt_label;

Expand Down Expand Up @@ -732,4 +735,4 @@ namespace graphit {
ctx->addElementType(element_type);
}

}
}
6 changes: 3 additions & 3 deletions src/midend/mir_rewriter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -120,8 +120,8 @@ namespace graphit {
if (var_decl->stmt_label != "") {
label_scope_.scope(var_decl->stmt_label);
}

var_decl->initVal = rewrite<Expr>(var_decl->initVal);
if (var_decl->initVal != nullptr)
var_decl->initVal = rewrite<Expr>(var_decl->initVal);
node = var_decl;

if (var_decl->stmt_label != "") {
Expand Down Expand Up @@ -299,4 +299,4 @@ namespace graphit {
}

}
}
}
4 changes: 2 additions & 2 deletions src/midend/mir_visitor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -116,8 +116,8 @@ namespace graphit {
if (var_decl->stmt_label != "") {
label_scope_.scope(var_decl->stmt_label);
}

var_decl->initVal->accept(this);
if (var_decl->initVal != nullptr)
var_decl->initVal->accept(this);

if (var_decl->stmt_label != "") {
label_scope_.unscope();
Expand Down
6 changes: 6 additions & 0 deletions src/runtime_lib/intrinsics.h
Original file line number Diff line number Diff line change
Expand Up @@ -142,4 +142,10 @@ template<typename APPLY_FUNC> void builtin_vertexset_apply(VertexSubset<int>* ve
}
}

template<typename OBJECT_TYPE>
void deleteObject(OBJECT_TYPE* object) {
if(object)
delete object;
}

#endif //GRAPHIT_INTRINSICS_H_H
6 changes: 6 additions & 0 deletions src/runtime_lib/vertexsubset.h
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,12 @@ struct VertexSubset {

// delete the contents
~VertexSubset(){
if(dense_vertex_set_)
delete[] dense_vertex_set_;
if(bitmap_)
delete bitmap_;
if(bool_map_)
delete[] bool_map_;
}

bool contains(NodeID_ v){
Expand Down
7 changes: 5 additions & 2 deletions test/input/bc.gt
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,8 @@ func main()
vertices.apply(mark_unvisited);

% pop off the empty frontier
frontier_list.pop();
frontier = frontier_list.pop();
delete frontier;

% start from the last frontier
frontier = frontier_list.pop();
Expand All @@ -77,12 +78,14 @@ func main()
% backward pass to accumulate the dependencies
while (round > 0)
#s2# transposed_edges.from(frontier).to(visited_vertex_filter).apply(backward_update);
delete frontier;
frontier = frontier_list.pop();
frontier.apply(backward_vertex_f);
round = round - 1;
end
delete frontier;

vertices.apply(final_vertex_f);


end
end
10 changes: 7 additions & 3 deletions test/input/bfs_with_filename_arg.gt
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,12 @@ func main()
parent[8] = 8;

while (frontier.getVertexSetSize() != 0)
#s1# frontier = edges.from(frontier).to(toFilter).applyModified(updateEdge, parent, true);
var output : vertexset{Vertex};
#s1# output = edges.from(frontier).to(toFilter).applyModified(updateEdge, parent, true);
delete frontier;
frontier = output;
end

delete frontier;

#s2# vertices.apply(printParent);
end
end
7 changes: 5 additions & 2 deletions test/input/cc.gt
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,12 @@ func main()
var frontier : vertexset{Vertex} = new vertexset{Vertex}(n);
vertices.apply(init);
while (frontier.getVertexSetSize() != 0)
#s1# frontier = edges.from(frontier).applyModified(updateEdge, IDs);
var output : vertexset{Vertex};
#s1# output = edges.from(frontier).applyModified(updateEdge, IDs);
delete frontier;
frontier = output;
end

delete frontier;
#s2# vertices.apply(printID);
end

Expand Down
8 changes: 5 additions & 3 deletions test/input/closeness_centrality_unweighted.gt
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,13 @@ func main()


while (frontier.getVertexSetSize() != 0)

#s1# frontier = edges.from(frontier).to(toFilter).applyModified(updateEdge, checked);

#s1# var output : vertexset{Vertex} = edges.from(frontier).to(toFilter).applyModified(updateEdge, checked);
delete frontier;
frontier = output;

end

delete frontier;

var elapsed_time : float = stopTimer();
print "elapsed time: ";
Expand Down
6 changes: 4 additions & 2 deletions test/input/closeness_centrality_unweighted_for_testing.gt
Original file line number Diff line number Diff line change
Expand Up @@ -28,10 +28,12 @@ func main()

while (frontier.getVertexSetSize() != 0)

#s1# frontier = edges.from(frontier).to(toFilter).applyModified(updateEdge, checked);
#s1# var output : vertexset{Vertex} = edges.from(frontier).to(toFilter).applyModified(updateEdge, checked);
delete frontier;
frontier = output;

end

delete frontier;

var elapsed_time : float = stopTimer();
print "elapsed time: ";
Expand Down
5 changes: 4 additions & 1 deletion test/input/closeness_centrality_weighted.gt
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,16 @@ func main()
var n : int = edges.getVertices();
var rounds : int = 0;
while (frontier.getVertexSetSize() != 0)
#s1# frontier = edges.from(frontier).applyModified(updateEdge, distance_from_start);
#s1# var output : vertexset{Vertex} = edges.from(frontier).applyModified(updateEdge, distance_from_start);
delete frontier;
frontier = output;
rounds = rounds + 1;
if rounds == n
print "negative cycle";
break;
end
end
delete frontier;
var sum: int = 0;
var numVerts : int = vertices.size();
for i in 0 : numVerts
Expand Down
5 changes: 4 additions & 1 deletion test/input/closeness_centrality_weighted_for_testing.gt
Original file line number Diff line number Diff line change
Expand Up @@ -23,13 +23,16 @@ func main()

startTimer();
while (frontier.getVertexSetSize() != 0)
#s1# frontier = edges.from(frontier).applyModified(updateEdge, distance_from_start);
#s1# var output : vertexset{Vertex} = edges.from(frontier).applyModified(updateEdge, distance_from_start);
delete frontier;
frontier = output;
rounds = rounds + 1;
if rounds == n
print "negative cycle";
break;
end
end
delete frontier;

var elapsed_time : float = stopTimer();
print "elapsed time: ";
Expand Down
11 changes: 8 additions & 3 deletions test/input/pr_delta.gt
Original file line number Diff line number Diff line change
Expand Up @@ -49,10 +49,15 @@ func main()
print frontier.getVertexSetSize();

#s1# edges.from(frontier).apply(updateEdge);
var output : vertexset{Vertex};
if i == 1
frontier = vertices.where(updateVertexFirstRound);
output = vertices.where(updateVertexFirstRound);
else
frontier = vertices.where(updateVertex);
output = vertices.where(updateVertex);
end
delete frontier;
frontier = output;

end
end
delete frontier;
end
5 changes: 5 additions & 0 deletions test/input/simple_atoi.gt
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
func main()
var input1 : int = atoi(argv[1]);
var input2 : int = atoi(argv[2]);
print input1 + input2;
end
Loading

0 comments on commit 3f8725c

Please sign in to comment.