Repository navigation
Conversation
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
3 reproducers showing issues related to the OD-pair deduplication mechanism (i.e. function
find_duplicates(..)incpp/src/shortest_path.cpp) that is used in mostparallelXXX(..)functions.Issue 1 (see
testODPairDedup_issue_1_accessibleLinkLabel.cpp)The OD ("origin-destination") pair deduplication mechanism does not consider the
accessibleLinkLabelsparameter.Consequences:
parallelDijkstra()is called with OD pairs that differ from each other only by their respectiveaccessibleLinkLabels, some of them get the path computed for a set of links different from what is requested.find_duplicates(), especiallyparallelKShortestPath().Issue 2 (see
testODPairDedup_issue_2_nodeIDConcatenation.cpp)The OD pair deduplication mechanism identifies the OD pairs by concatenating the IDs of their origin and destination nodes.
Consequences:
parallelDijkstra()is called with OD pairs whose concatenated node IDs are identical (e.g."1" -> "23"and"12" -> "3"), some of them get the path computed for another OD pair.find_duplicates(), especiallyparallelKShortestPath().Issue 3 (see
testODPairDedup_issue_3_kPaths.cpp)The 3rd issue is specific to
parallelKShortestPath(). In this function, OD pairs that differ from each other only by their respectivekPathsparameter are computed once, with the largestkPaths. The post-process at the end ofparallelKShortestPath()then keeps, for each OD pair, thekPathspaths with the lowest costs. This assumes thatKShortestPath()returns the paths in order of increasing costs, which is not the case (see example in the reproducer).Consequence: the paths returned by
parallelKShortestPath()for an OD pair may depend of the other OD-pairs in the same batch, and may also be distinct from what would be returned by the non-parallel version of the same algorithm (i.e.KShortestPath()). This is less severe as issues 1 and 2, but this breaks the per-OD-pair result independence guarantee that could be expected fromparallelKShortestPath().