From 93ec7562c6e6bb4642d7550f2bf819f76db21a14 Mon Sep 17 00:00:00 2001 From: "Christian Y. Brenninkmeijer" Date: Mon, 2 Sep 2024 09:24:39 +0100 Subject: [PATCH] there is one region and if empty write to data asap --- .../front_end/download/DataGatherer.java | 29 ++++++++++--------- .../download/DirectDataGatherer.java | 6 ++-- .../download/RecordingRegionDataGatherer.java | 5 ++-- 3 files changed, 21 insertions(+), 19 deletions(-) diff --git a/SpiNNaker-front-end/src/main/java/uk/ac/manchester/spinnaker/front_end/download/DataGatherer.java b/SpiNNaker-front-end/src/main/java/uk/ac/manchester/spinnaker/front_end/download/DataGatherer.java index 76d355e0cb..0476e0cf57 100644 --- a/SpiNNaker-front-end/src/main/java/uk/ac/manchester/spinnaker/front_end/download/DataGatherer.java +++ b/SpiNNaker-front-end/src/main/java/uk/ac/manchester/spinnaker/front_end/download/DataGatherer.java @@ -219,9 +219,9 @@ private static final class WorkItems { * theoretically be done in any order... but needs to be processed * single-threaded anyway. */ - private final List> regions; + private final List regions; - WorkItems(Monitor m, List> region) { + WorkItems(Monitor m, List region) { this.monitor = m; this.regions = region; } @@ -257,11 +257,16 @@ private Map> discoverActualWork( m.updateTransactionIdFromMachine(txrx); for (var p : m.getPlacements()) { - var regions = new ArrayList>(); + var regions = new ArrayList(); for (int id : p.getVertex().getRecordedRegionIds()) { var r = getRegion(p, id); - regions.add(r); - count += r.size(); + if (r.size > 0) { + regions.add(r); + count += 1; + } else { + storeData(r, allocate(0)); + } + } workitems.add(new WorkItems(m, regions)); } @@ -363,19 +368,17 @@ private void fastDownload(List work, log.info("processing fast downloads for {}", conn.getChip()); var dl = new Downloader(conn); for (var item : work) { - for (var regionsOnCore : item.regions) { + for (var region : item.regions) { /* * Once there's something too small, all subsequent * retrieves for that recording region have to be done the * same way to get the data in the DB in the right order. */ - for (var region : regionsOnCore) { - var data = dl.doDownload(item.monitor, region); - if (SPINNAKER_COMPARE_DOWNLOAD != null) { - compareDownloadWithSCP(region, data); - } - storeData(region, data); + var data = dl.doDownload(item.monitor, region); + if (SPINNAKER_COMPARE_DOWNLOAD != null) { + compareDownloadWithSCP(region, data); } + storeData(region, data); } } } @@ -479,7 +482,7 @@ private static List describeChunk(Chunk chunk) { */ @UsedInJavadocOnly(BufferManagerStorage.class) @ForOverride - protected abstract List getRegion(Placement placement, int regionID) + protected abstract Region getRegion(Placement placement, int regionID) throws IOException, ProcessException, StorageException, InterruptedException; diff --git a/SpiNNaker-front-end/src/main/java/uk/ac/manchester/spinnaker/front_end/download/DirectDataGatherer.java b/SpiNNaker-front-end/src/main/java/uk/ac/manchester/spinnaker/front_end/download/DirectDataGatherer.java index b99e1883ed..cd6bd2cb67 100644 --- a/SpiNNaker-front-end/src/main/java/uk/ac/manchester/spinnaker/front_end/download/DirectDataGatherer.java +++ b/SpiNNaker-front-end/src/main/java/uk/ac/manchester/spinnaker/front_end/download/DirectDataGatherer.java @@ -132,14 +132,14 @@ private IntBuffer getCoreRegionTable(CoreLocation core, Vertex vertex) } @Override - protected List getRegion(Placement placement, int regionID) + protected Region getRegion(Placement placement, int regionID) throws IOException, ProcessException, InterruptedException { var b = getCoreRegionTable(placement.asCoreLocation(), placement.getVertex()); // TODO This is wrong because of shared regions! int size = b.get(regionID + 1) - b.get(regionID); - return List.of(new Region(placement, regionID, - new MemoryLocation(b.get(regionID)), size)); + return new Region( + placement, regionID, new MemoryLocation(b.get(regionID)), size); } @Override diff --git a/SpiNNaker-front-end/src/main/java/uk/ac/manchester/spinnaker/front_end/download/RecordingRegionDataGatherer.java b/SpiNNaker-front-end/src/main/java/uk/ac/manchester/spinnaker/front_end/download/RecordingRegionDataGatherer.java index f9cd82258c..d278c42c3b 100644 --- a/SpiNNaker-front-end/src/main/java/uk/ac/manchester/spinnaker/front_end/download/RecordingRegionDataGatherer.java +++ b/SpiNNaker-front-end/src/main/java/uk/ac/manchester/spinnaker/front_end/download/RecordingRegionDataGatherer.java @@ -113,13 +113,12 @@ private List getRegions(Placement placement) } @Override - protected List getRegion(Placement placement, int index) + protected Region getRegion(Placement placement, int index) throws IOException, ProcessException, InterruptedException { var region = getRegions(placement).get(index); log.debug("got region of {} R:{} as {}", placement.asCoreLocation(), index, region); - return List.of(new Region(placement, index, region.data, - (int) region.size)); + return new Region(placement, index, region.data, (int) region.size); } @Override