[ https://issues.apache.org/jira/browse/FLINK-8117?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16260475#comment-16260475 ]
ASF GitHub Bot commented on FLINK-8117: --------------------------------------- GitHub user ggevay opened a pull request: https://github.com/apache/flink/pull/5041 [FLINK-8117] [runtime] [streaming] Eliminate modulo operation from round robin partitioners ## What is the purpose of the change This PR changes `RebalancePartitioner`, `RescalePartitioner`, and `RoundRobinChannelSelector` to not use `%` for wrapping around when reaching the number of channels, but use an `if`-statement instead. ## Brief change log - Make the above change in `RebalancePartitioner`, `RescalePartitioner`, and `RoundRobinChannelSelector` - Additionally, I added `final` to the field that is holding the reused return array in `RebalancePartitioner`, `RoundRobinChannelSelector`, `ShufflePartitioner`, `ForwardPartitioner`, `GlobalPartitioner`, `CustomPartitionerWrapper`. ## Verifying this change This change is already covered by existing tests, such as `RebalancePartitionerTest`, `RescalePartitionerTest`. ## Does this pull request potentially affect one of the following parts: - Dependencies (does it add or upgrade a dependency): no - The public API, i.e., is any changed class annotated with `@Public(Evolving)`: no - The serializers: no - The runtime per-record code paths (performance sensitive): **yes** - Anything that affects deployment or recovery: JobManager (and its components), Checkpointing, Yarn/Mesos, ZooKeeper: no - The S3 file system connector: no ## Documentation - Does this pull request introduce a new feature? no - If yes, how is the feature documented? not applicable You can merge this pull request into a Git repository by running: $ git pull https://github.com/ggevay/flink round-robin-no-modulo Alternatively you can review and apply these changes as the patch at: https://github.com/apache/flink/pull/5041.patch To close this pull request, make a commit to your master/trunk branch with (at least) the following in the commit message: This closes #5041 ---- commit 04ff7134e3e5fc750b6f94a385a3ff3bfd921fa3 Author: Gabor Gevay <gga...@gmail.com> Date: 2017-11-20T14:12:17Z [FLINK-8117] [runtime] [streaming] Eliminate modulo operation from round-robin partitioners ---- > Eliminate modulo operation from RoundRobinChannelSelector and > RebalancePartitioner > ---------------------------------------------------------------------------------- > > Key: FLINK-8117 > URL: https://issues.apache.org/jira/browse/FLINK-8117 > Project: Flink > Issue Type: Improvement > Components: Local Runtime, Streaming > Reporter: Gabor Gevay > Assignee: Gabor Gevay > Priority: Minor > Labels: performance > Fix For: 1.5.0 > > > {{RoundRobinChannelSelector}}, {{RebalancePartitioner}}, and > {{RescalePartitioner}} use a modulo operation to wrap around when the current > channel counter reaches the number of channels. Using an {{if}} would have > better performance. > A division with 32 bit operands is ~25 cycles on modern Intel CPUs \[1\], but > the {{if}} will be only 1-2 cycles on average, since the branch predictor can > most of the time predict the condition to be false. > \[1\] http://www.agner.org/optimize/instruction_tables.pdf -- This message was sent by Atlassian JIRA (v6.4.14#64029)