package jembench.stream; import jembench.Runner; import jembench.StreamBenchmark; import jembench.Util; public class Increment extends StreamBenchmark { private final IncrementWork[] work; //Should be more than the number of cores private final int load; private int iterations = 1; private int finished_cnt = 0; public Increment(int work_cnt, int load) { this.load = load; work = new IncrementWork[work_cnt]; for (int i = 0; i < work.length; i++) { work[i] = new IncrementWork(i); } } public String toString() { return "Increment Load="+load; } public Runnable[] getWorkers() { return work; } protected int getDepth() { return work.length; } public void reset(int cnt) { iterations = cnt; finished_cnt = 0; } public boolean isFinished() { if(finished_cnt == work.length) { return true; } return false; } private synchronized void addFinished() { finished_cnt++; } private class IncrementWork implements Runnable { private int index; private int cnt; private IncrementWork(int index) { this.index = index; } public void run() { for (int i = 0; i < iterations; i++) { for (int j = index; j < work.length; j++) { synchronized (work[j]) { for (int k = 0; k < load; k++) { work[j].cnt++; } } } for (int j = 0; j < index; j++) { synchronized (work[j]) { for (int k = 0; k < load; k++) { work[j].cnt++; } } } } addFinished(); if(isFinished()) { Runner.stop(); } } } }