Permalink
Browse files

release 0.1

  • Loading branch information...
1 parent 2454773 commit 75d307fa47d3ffd4467851c573f6636648a3d62a @claudiugh committed Mar 13, 2011
View
31 README
@@ -3,12 +3,37 @@ README
Amstel is a framework for processing large-scale graphs, based on the BSP computational model.
+RUN AMSTEL
+==========
+
+1. install java >= 1.5
+
+2. get Ibis and setup ibis.properties (server address and pool name) along with log4j.properties (set log4j.logger.nl.vu.cs.amstel.master=info)
+
+3. start the Ibis server
+
+4. start the application by using the previously defined ibis server and port
+
+RELEASE NOTES
+=============
+
+Release 0.1
+-----------
+March 13, 2011
+
+This is the first release of the Amstel framework and it contains the basic functionality for running graph applications.
+Outline of the features included:
+ - generic applications, with parameterized types for vertex value, edge value and messages
+ - combiners
+ - aggregators
+ - input: text file, binary file with outdegree and live graph generators
+ - applications: Maximum Value, Single Source Shortest Path, Semi Clustering
+
+
PACKAGE DESCRIPTION
===================
src/ - source code for the framework
-graphs/ - examples of input data and scripts for generating graphs
-docs/ - documentation/reports
-proto/ - a prototype of Amstel, implemented on shared memory model (threads)
+scripts/ - scripts for running certain applications like SSSP or SemiClustering
build.xml - ant build script
View
@@ -1,20 +1,20 @@
<project name="Ibis IPL examples" default="build" basedir=".">
<description>
- Build file for the Ibis IPL applications.
+ Build file for Amstel framework
</description>
<!-- Global properties -->
<property environment="env" />
<property name="ibis" location="${env.IPL_HOME}" />
- <property name="version-tag" value="" />
+ <property name="version-tag" value="0.1" />
<property name="src" location="src" />
<property name="tmp" location="tmp" />
<property name="lib" location="lib" />
- <property name="jar" location="lib/amstel${version-tag}.jar" />
+ <property name="jar" location="lib/amstel-${version-tag}.jar" />
<target name="build" description="build the Amstel framework">
<!-- Clean up -->
View
@@ -0,0 +1,9 @@
+#!/bin/bash
+
+RELEASE=0.1
+DIR=amstel-$RELEASE
+rm -rf ./$DIR
+mkdir $DIR
+cp -r input maxval sssp semiclustering lib $DIR/
+zip -r $DIR.zip $DIR/*
+rm -rf ./$DIR
Binary file not shown.
View
@@ -1,12 +0,0 @@
-This document contains the development schedule for the Amstel project. We are planning to span it over 6 weeks, from 25th October to 6th December.
-
-The schedule is planned as follows:
-- Weeks 1-3: the first working implementation
- week 1: the implementation of the synchronization mechanism (barrier)
- week 2: messaging and aggregators
- week 3: implement multiple algorithms and optimize some critical parts
-
-- Week 4-5: IO on real huge datasets
-
-- Week 6: documenting, finalize testing
-
@@ -1,51 +0,0 @@
-#!/usr/bin/python
-
-#
-# Converter from GTgraph to Amstel input format.
-# It assumes that the edges are sorted by source.
-#
-
-from optparse import OptionParser
-
-def dump_vertex(fout, u, edges):
- fout.write("%s %d %d" %(u, 0, len(edges)))
- for e in edges:
- (v, w) = e
- fout.write(" %s %s" %(v, w))
- fout.write("\n")
-
-def gt2amstel(input_filename, output_filename):
- fin = open(input_filename, 'r')
- fout = open(output_filename, 'w')
- edges = []
- prev_u = None
- for line in fin:
- parts = line.split()
- if parts[0] == 'a':
- u = parts[1]
- v = parts[2]
- w = parts[3]
- if u != prev_u and prev_u:
- dump_vertex(fout, prev_u, edges)
- edges = []
- edges.append((v, w));
- prev_u = u
- dump_vertex(fout, prev_u, edges)
- fin.close()
- fout.close()
-
-def main():
- parser = OptionParser()
- parser.add_option("-i", "--input", dest="input", type="string",
- help="input filename, in GT format")
- parser.add_option("-o", "--output", dest="output", type="string",
- help="output filename, in Amstel format")
- (options, args) = parser.parse_args()
- if not options.input or not options.output:
- parser.print_help()
- else:
- gt2amstel(options.input, options.output)
-
-if __name__ == '__main__':
- main()
-
View
@@ -1,148 +0,0 @@
-#!/usr/bin/python
-"""
-Script for generating graphs used in testing Amstel
-"""
-
-import random
-import struct
-from optparse import OptionParser
-
-def write_amstel_format(vertices, vertex_values, edges, filename):
- """
- write the graph given by number of vertices (0 .. vertices - 1),
- value on each vertex and the edges (edges[i] contains a list of
- pairs (target, value))
- """
- f = open(filename, 'wt')
- for i in xrange(vertices):
- f.write("V%d %d %d" % (i, vertex_values[i], len(edges[i])))
- for e in edges[i]:
- (target, value) = e
- f.write(" V%d %d" % (target, value))
- f.write("\n")
- f.close()
-
-
-def generate_wheel_graph(vertices, edges_count, filename):
- """
- generate a simple wheel graph. A vertex i is connected to the next
- edges_count vertices, with an unitary cost.
- The vertex values is an integer in [1, vertices].
- """
- vertex_values = []
- edges = []
- for i in xrange(vertices):
- value = random.randint(1, vertices)
- vedges = []
- for j in xrange(edges_count):
- target = (i + 1 + j) % vertices
- cost = 1
- vedges.append((target, cost))
- vertex_values.append(value)
- edges.append(vedges)
- write_amstel_format(vertices, vertex_values, edges, filename)
-
-
-def generate_lognorm_outdegree(vertices, filename):
- """
- generate a lognormal distribution outdegree in a binary file
- """
- f = open(filename, "wb")
- mu = 4
- sigma = 1.3
- for i in xrange(vertices):
- outdegree = int(random.lognormvariate(mu, sigma))
- data = struct.pack('i', outdegree)
- f.write(data)
- f.close()
-
-
-def generate_nondir_lognorm(vertices, filename):
- """
- Generate a non-directed weighted graph with a lognormal distribution
- of the outdegree.
- Both edge targets and values are picked randomly without introducing
- duplicates and by keeping the outdegree as given by the lognormal
- distribution.
- """
- max_edge_value = 10
- mu = 2
- sigma = 1.1
- outdegree = {}
- edges = {}
- edge_values = {}
- ordered_vertices = []
- for i in xrange(vertices):
- edges[i] = []
- edge_values[i] = []
- outdegree[i] = int(random.lognormvariate(mu, sigma)) % vertices
- ordered_vertices.append((i, outdegree[i]))
- ordered_vertices.sort(key=lambda vertex: vertex[1], reverse=True)
- for vertex in ordered_vertices:
- vid = vertex[0]
- available = []
- for i in xrange(vertices):
- if i != vid and outdegree[i] > 0 and not i in edges[vid]:
- available.append(i)
- random.shuffle(available)
- bidir_edges = min(outdegree[vid], len(available))
- for i in xrange(bidir_edges):
- target = available[i]
- value = random.randint(1, max_edge_value)
- edges[vid].append(target)
- edge_values[vid].append(value)
- edges[target].append(vid)
- edge_values[target].append(value)
- outdegree[vid] -= 1
- outdegree[target] -= 1
- # we consider 0 values for vertices
- vertex_values = []
- compact_edges = []
- for i in xrange(vertices):
- vertex_values.append(0)
- compact_edges.append([])
- for e in xrange(len(edges[i])):
- compact_edges[i].append((edges[i][e], edge_values[i][e]))
- write_amstel_format(vertices, vertex_values, compact_edges, filename)
-
-
-def main():
- parser = OptionParser()
- parser.add_option("-t", "--type", dest="type", type="string",
- help="wheel, lnod, lnndir");
- parser.add_option("-v", "--vertices", dest="vertices",
- help="number of vertices from the graph", type="int")
- parser.add_option("-e", "--edges", dest="edges", type="int",
- help="number of edges per vertex")
- parser.add_option("-o", "--output", dest="filename",
- help="output filename", type="string")
- (options, args) = parser.parse_args()
-
- if not options.type in ("wheel", "lnod", "lnndir") or \
- not options.filename or not options.vertices:
- parser.print_help()
- else:
- graph_type = options.type
- if graph_type == "wheel":
- if not options.edges:
- print "It is required to specify the number of edges for the "\
- "wheel graph \n"
- parser.print_help()
- else:
- print "Generating wheel graph with %d vertices and %d edges " \
- % (options.vertices, options.edges)
- generate_wheel_graph(options.vertices, options.edges,
- options.filename)
- elif graph_type == "lnod":
- print "Generating lognornal distribution outdegree for " \
- " %d vertices " % (options.vertices)
- generate_lognorm_outdegree(options.vertices, options.filename)
- elif graph_type == "lnndir":
- print "Generating non-directed weighted graph with lognormal " \
- "distribution of the outdegree with %d vertices " \
- % (options.vertices)
- generate_nondir_lognorm(options.vertices, options.filename)
-
-
-if __name__ == '__main__':
- main()
@@ -1,10 +0,0 @@
-V0 0 1 V1 1
-V1 1 1 V2 1
-V2 2 1 V3 1
-V3 3 1 V4 1
-V4 4 1 V5 1
-V5 5 1 V6 1
-V6 6 1 V7 1
-V7 7 1 V8 1
-V8 8 1 V9 1
-V9 9 1 V0 1
Oops, something went wrong.

0 comments on commit 75d307f

Please sign in to comment.