2020-09-09 17:49:23 +03:00
|
|
|
import org.intel.openvino.*;
|
|
|
|
|
|
2020-08-18 08:38:48 +03:00
|
|
|
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
|
|
|
|
2020-08-18 08:38:48 +03:00
|
|
|
void resetTimes() {
|
|
|
|
|
startTime = Long.MAX_VALUE;
|
|
|
|
|
endTime = Long.MIN_VALUE;
|
|
|
|
|
latencies.clear();
|
|
|
|
|
}
|
2020-09-09 17:49:23 +03:00
|
|
|
|
2020-08-18 08:38:48 +03:00
|
|
|
double getDurationInMilliseconds() {
|
2020-09-09 17:49:23 +03:00
|
|
|
return (double) (endTime - startTime) * 1e-6;
|
2020-08-18 08:38:48 +03:00
|
|
|
}
|
2020-09-09 17:49:23 +03:00
|
|
|
|
2020-08-18 08:38:48 +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
|
|
|
|
2020-08-18 08:38:48 +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
|
|
|
|
2020-08-18 08:38:48 +03:00
|
|
|
void waitAll() {
|
|
|
|
|
synchronized (foo) {
|
|
|
|
|
try {
|
2020-09-09 17:49:23 +03:00
|
|
|
while (idleIds.size() != requests.size()) {
|
2020-08-18 08:38:48 +03:00
|
|
|
foo.wait();
|
|
|
|
|
}
|
|
|
|
|
} catch (InterruptedException e) {
|
|
|
|
|
System.out.println("InterruptedException: " + e.getMessage());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2020-09-09 17:49:23 +03:00
|
|
|
|
2020-08-18 08:38:48 +03:00
|
|
|
Vector<Double> getLatencies() {
|
|
|
|
|
return latencies;
|
|
|
|
|
}
|
2020-09-09 17:49:23 +03:00
|
|
|
|
2020-08-18 08:38:48 +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>();
|
2020-08-18 08:38:48 +03:00
|
|
|
|
|
|
|
|
Object foo = new Object();
|
|
|
|
|
}
|