Skip to content

Commit

Permalink
Improved error message when partitioning doesn't have enough resources
Browse files Browse the repository at this point in the history
  • Loading branch information
rowleya committed Jun 25, 2015
1 parent 010b9ac commit fa26ce3
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -333,12 +333,18 @@ def _scale_down_resources(self, lo_atom, hi_atom, vertices,
used_placements, resource_tracker, lo_atom, hi_atom, graph)

# Attempt to allocate the resources for this vertex on the machine
(x, y, p, ip_tags, reverse_ip_tags) = \
resource_tracker.allocate_constrained_resources(
used_resources, vertex.constraints)
used_placements.append(
(vertex, x, y, p, used_resources,
ip_tags, reverse_ip_tags))
try:
(x, y, p, ip_tags, reverse_ip_tags) = \
resource_tracker.allocate_constrained_resources(
used_resources, vertex.constraints)
used_placements.append(
(vertex, x, y, p, used_resources,
ip_tags, reverse_ip_tags))
except exceptions.PacmanValueError as e:

raise exceptions.PacmanValueError(
"Unable to allocate requested resources to"
" vertex {}:\n{}".format(vertex, e))

# reduce data to what the parent requires
final_placements = list()
Expand Down
22 changes: 21 additions & 1 deletion pacman/utilities/resource_tracker.py
Original file line number Diff line number Diff line change
Expand Up @@ -697,9 +697,29 @@ def allocate_resources(self, resources, chips=None,
reverse_ip_tags_allocated)

# If no chip is available, raise an exception
n_cores, n_chips, max_sdram = self._available_resources(usable_chips)
raise exceptions.PacmanValueError(
"No resources available to allocate the given resources"
" within the given constraints")
" within the given constraints:\n"
" Request for CPU: {}, DTCM: {}, SDRAM: {}\n"
" Resources available which meet constraints:"
" {} Cores on {} chips, largest SDRAM space: {}".format(
resources.cpu.get_value(), resources.dtcm.get_value(),
resources.sdram.get_value(), n_cores, n_chips, max_sdram))

def _available_resources(self, usable_chips):
n_cores = 0
max_sdram = 0
for x, y in usable_chips:
chip = self._machine.get_chip_at(x, y)
if (x, y) in self._core_tracker:
n_cores += len(self._core_tracker[x, y])
else:
n_cores += len(chip.processors)
sdram_available = self._sdram_available(chip, (x, y))
if sdram_available > max_sdram:
max_sdram = sdram_available
return n_cores, len(usable_chips), max_sdram

def get_maximum_constrained_resources_available(self, constraints,
chips=None):
Expand Down

0 comments on commit fa26ce3

Please sign in to comment.