Differential D1900 Diff 6381 java/server/src/main/java/org/softwareheritage/graph/benchmark/Benchmark.java
Changeset View
Changeset View
Standalone View
Standalone View
java/server/src/main/java/org/softwareheritage/graph/benchmark/Benchmark.java
Show First 20 Lines • Show All 113 Lines • ▼ Show 20 Lines | public class Benchmark { | ||||
* href="https://docs.softwareheritage.org/devel/swh-graph/api.html#walk">API</a> | * href="https://docs.softwareheritage.org/devel/swh-graph/api.html#walk">API</a> | ||||
* @param algorithm traversal algorithm used in endpoint call (either "dfs" or "bfs") | * @param algorithm traversal algorithm used in endpoint call (either "dfs" or "bfs") | ||||
*/ | */ | ||||
public void timeEndpoint(String useCaseName, Graph graph, long[] nodeIds, | public void timeEndpoint(String useCaseName, Graph graph, long[] nodeIds, | ||||
Function<Endpoint.Input, Endpoint.Output> operation, String dstFmt, String algorithm) | Function<Endpoint.Input, Endpoint.Output> operation, String dstFmt, String algorithm) | ||||
throws IOException { | throws IOException { | ||||
ArrayList<Double> timings = new ArrayList<>(); | ArrayList<Double> timings = new ArrayList<>(); | ||||
ArrayList<Double> timingsNormalized = new ArrayList<>(); | ArrayList<Double> timingsNormalized = new ArrayList<>(); | ||||
ArrayList<Double> nbEdgesAccessed = new ArrayList<>(); | |||||
final boolean append = true; | final boolean append = true; | ||||
try (Writer csvLog = new BufferedWriter(new FileWriter(args.logFile, append))) { | try (Writer csvLog = new BufferedWriter(new FileWriter(args.logFile, append))) { | ||||
for (long nodeId : nodeIds) { | for (long nodeId : nodeIds) { | ||||
SwhPID swhPID = graph.getSwhPID(nodeId); | SwhPID swhPID = graph.getSwhPID(nodeId); | ||||
Endpoint.Output output = (dstFmt == null) | Endpoint.Output output = (dstFmt == null) | ||||
? operation.apply(new Endpoint.Input(swhPID)) | ? operation.apply(new Endpoint.Input(swhPID)) | ||||
: operation.apply(new Endpoint.Input(swhPID, dstFmt, algorithm)); | : operation.apply(new Endpoint.Input(swhPID, dstFmt, algorithm)); | ||||
StringJoiner csvLine = new StringJoiner(CSV_SEPARATOR); | StringJoiner csvLine = new StringJoiner(CSV_SEPARATOR); | ||||
csvLine.add(useCaseName) | csvLine.add(useCaseName) | ||||
.add(swhPID.toString()) | .add(swhPID.toString()) | ||||
.add(Long.toString(output.meta.nbEdgesAccessed)) | .add(Long.toString(output.meta.nbEdgesAccessed)) | ||||
.add(Double.toString(output.meta.timings.traversal)) | .add(Double.toString(output.meta.timings.traversal)) | ||||
.add(Double.toString(output.meta.timings.pid2node)) | .add(Double.toString(output.meta.timings.pid2node)) | ||||
.add(Double.toString(output.meta.timings.node2pid)); | .add(Double.toString(output.meta.timings.node2pid)); | ||||
csvLog.write(csvLine.toString() + "\n"); | csvLog.write(csvLine.toString() + "\n"); | ||||
timings.add(output.meta.timings.traversal); | timings.add(output.meta.timings.traversal); | ||||
nbEdgesAccessed.add((double) output.meta.nbEdgesAccessed); | |||||
if (output.meta.nbEdgesAccessed != 0) { | if (output.meta.nbEdgesAccessed != 0) { | ||||
timingsNormalized.add(output.meta.timings.traversal / output.meta.nbEdgesAccessed); | timingsNormalized.add(output.meta.timings.traversal / output.meta.nbEdgesAccessed); | ||||
} | } | ||||
} | } | ||||
} | } | ||||
System.out.println("\n" + useCaseName + " use-case:"); | System.out.println("\n" + useCaseName + " use-case:"); | ||||
System.out.println("timings:"); | System.out.println("timings:"); | ||||
Statistics stats = new Statistics(timings); | Statistics stats = new Statistics(timings); | ||||
stats.printAll(); | stats.printAll(); | ||||
System.out.println("timings normalized:"); | System.out.println("timings normalized:"); | ||||
Statistics statsNormalized = new Statistics(timingsNormalized); | Statistics statsNormalized = new Statistics(timingsNormalized); | ||||
statsNormalized.printAll(); | statsNormalized.printAll(); | ||||
System.out.println("nb edges accessed:"); | |||||
Statistics statsNbEdgesAccessed = new Statistics(nbEdgesAccessed); | |||||
statsNbEdgesAccessed.printAll(); | |||||
} | } | ||||
/** | /** | ||||
* Same as {@link timeEndpoint} but without destination or algorithm specified to endpoint call. | * Same as {@link timeEndpoint} but without destination or algorithm specified to endpoint call. | ||||
*/ | */ | ||||
public void timeEndpoint(String useCaseName, Graph graph, long[] nodeIds, | public void timeEndpoint(String useCaseName, Graph graph, long[] nodeIds, | ||||
Function<Endpoint.Input, Endpoint.Output> operation) throws IOException { | Function<Endpoint.Input, Endpoint.Output> operation) throws IOException { | ||||
timeEndpoint(useCaseName, graph, nodeIds, operation, null, null); | timeEndpoint(useCaseName, graph, nodeIds, operation, null, null); | ||||
} | } | ||||
} | } |