Files
openvino/inference-engine/ie_bridges/java/samples/benchmark_app/InferRequestsQueue.java

71 lines
1.9 KiB
Java
Raw Normal View History

2020-09-09 17:49:23 +03:00
import org.intel.openvino.*;
import java.util.Vector;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;
public class InferRequestsQueue {
public InferRequestsQueue(ExecutableNetwork net, int nireq) {
for (int id = 0; id < nireq; id++) {
requests.add(new InferReqWrap(net, id, this));
idleIds.add(id);
}
resetTimes();
}
2020-09-09 17:49:23 +03:00
void resetTimes() {
startTime = Long.MAX_VALUE;
endTime = Long.MIN_VALUE;
latencies.clear();
}
2020-09-09 17:49:23 +03:00
double getDurationInMilliseconds() {
2020-09-09 17:49:23 +03:00
return (double) (endTime - startTime) * 1e-6;
}
2020-09-09 17:49:23 +03:00
void putIdleRequest(int id, double latency) {
latencies.add(latency);
idleIds.add(id);
endTime = Math.max(System.nanoTime(), endTime);
synchronized (foo) {
foo.notify();
}
}
2020-09-09 17:49:23 +03:00
InferReqWrap getIdleRequest() {
try {
InferReqWrap request = requests.get(idleIds.take());
startTime = Math.min(System.nanoTime(), startTime);
return request;
} catch (InterruptedException e) {
System.out.println(e.getMessage());
}
return null;
}
2020-09-09 17:49:23 +03:00
void waitAll() {
synchronized (foo) {
try {
2020-09-09 17:49:23 +03:00
while (idleIds.size() != requests.size()) {
foo.wait();
}
} catch (InterruptedException e) {
System.out.println("InterruptedException: " + e.getMessage());
}
}
}
2020-09-09 17:49:23 +03:00
Vector<Double> getLatencies() {
return latencies;
}
2020-09-09 17:49:23 +03:00
Vector<InferReqWrap> requests = new Vector<InferReqWrap>();
private BlockingQueue<Integer> idleIds = new LinkedBlockingQueue<Integer>();
private long startTime;
private long endTime;
2020-09-09 17:49:23 +03:00
Vector<Double> latencies = new Vector<Double>();
Object foo = new Object();
}