sanha closed pull request #102: [NEMO-180] Java Annotation for Prerequisite Execution Properties URL: https://github.com/apache/incubator-nemo/pull/102
This is a PR merged from a forked repository. As GitHub hides the original diff on merge, it is displayed below for the sake of provenance: As this is a foreign pull request (from a fork), the diff is supplied below (as it won't show otherwise due to GitHub magic): diff --git a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/Requires.java b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/Requires.java new file mode 100644 index 000000000..1283cf1ce --- /dev/null +++ b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/Requires.java @@ -0,0 +1,31 @@ +/* + * Copyright (C) 2018 Seoul National University + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package edu.snu.nemo.compiler.optimizer.pass.compiletime; + +import edu.snu.nemo.common.ir.executionproperty.ExecutionProperty; + +import java.lang.annotation.*; + +/** + * Annotation used to indicate which execution properties the class requires as prerequisites. + */ +@Target(ElementType.TYPE) +@Retention(RetentionPolicy.RUNTIME) +@Inherited +public @interface Requires { + Class<? extends ExecutionProperty>[] value() default {}; +} diff --git a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/Annotates.java b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/Annotates.java new file mode 100644 index 000000000..cf96224cf --- /dev/null +++ b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/Annotates.java @@ -0,0 +1,31 @@ +/* + * Copyright (C) 2018 Seoul National University + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package edu.snu.nemo.compiler.optimizer.pass.compiletime.annotating; + +import edu.snu.nemo.common.ir.executionproperty.ExecutionProperty; + +import java.lang.annotation.*; + +/** + * Annotation used to indicate which execution properties the class annotates. + */ +@Target(ElementType.TYPE) +@Retention(RetentionPolicy.RUNTIME) +@Inherited +public @interface Annotates { + Class<? extends ExecutionProperty>[] value() default {}; +} diff --git a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/AnnotatingPass.java b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/AnnotatingPass.java index 3fcb7bdb5..c60d4f243 100644 --- a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/AnnotatingPass.java +++ b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/AnnotatingPass.java @@ -17,8 +17,10 @@ import edu.snu.nemo.common.ir.executionproperty.ExecutionProperty; import edu.snu.nemo.compiler.optimizer.pass.compiletime.CompileTimePass; +import edu.snu.nemo.compiler.optimizer.pass.compiletime.Requires; -import java.util.Collections; +import java.util.Arrays; +import java.util.HashSet; import java.util.Set; /** @@ -26,34 +28,28 @@ * It is ensured by the compiler that the shape of the IR DAG itself is not modified by an AnnotatingPass. */ public abstract class AnnotatingPass extends CompileTimePass { - private final Class<? extends ExecutionProperty> keyOfExecutionPropertyToModify; + private final Set<Class<? extends ExecutionProperty>> executionPropertiesToAnnotate; private final Set<Class<? extends ExecutionProperty>> prerequisiteExecutionProperties; /** * Constructor. - * @param keyOfExecutionPropertyToModify key of execution property to modify. - * @param prerequisiteExecutionProperties prerequisite execution properties. + * @param cls the annotating pass class. */ - public AnnotatingPass(final Class<? extends ExecutionProperty> keyOfExecutionPropertyToModify, - final Set<Class<? extends ExecutionProperty>> prerequisiteExecutionProperties) { - this.keyOfExecutionPropertyToModify = keyOfExecutionPropertyToModify; - this.prerequisiteExecutionProperties = prerequisiteExecutionProperties; - } + public AnnotatingPass(final Class<? extends AnnotatingPass> cls) { + final Annotates annotates = cls.getAnnotation(Annotates.class); + this.executionPropertiesToAnnotate = new HashSet<>(Arrays.asList(annotates.value())); - /** - * Constructor. - * @param keyOfExecutionPropertyToModify key of execution property to modify. - */ - public AnnotatingPass(final Class<? extends ExecutionProperty> keyOfExecutionPropertyToModify) { - this(keyOfExecutionPropertyToModify, Collections.emptySet()); + final Requires requires = cls.getAnnotation(Requires.class); + this.prerequisiteExecutionProperties = requires == null + ? new HashSet<>() : new HashSet<>(Arrays.asList(requires.value())); } /** - * Getter for key of execution property to modify. - * @return key of execution property to modify. + * Getter for the execution properties to annotate through the pass. + * @return key of execution properties to annotate through the pass. */ - public final Class<? extends ExecutionProperty> getExecutionPropertyToModify() { - return keyOfExecutionPropertyToModify; + public final Set<Class<? extends ExecutionProperty>> getExecutionPropertiesToAnnotate() { + return executionPropertiesToAnnotate; } @Override diff --git a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/ClonedSchedulingPass.java b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/ClonedSchedulingPass.java index f8080020f..32797eb06 100644 --- a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/ClonedSchedulingPass.java +++ b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/ClonedSchedulingPass.java @@ -20,17 +20,16 @@ import edu.snu.nemo.common.ir.vertex.IRVertex; import edu.snu.nemo.common.ir.vertex.executionproperty.ClonedSchedulingProperty; -import java.util.Collections; - /** * Set the ClonedScheduling property of source vertices. */ +@Annotates(ClonedSchedulingProperty.class) public final class ClonedSchedulingPass extends AnnotatingPass { /** * Default constructor. */ public ClonedSchedulingPass() { - super(ClonedSchedulingProperty.class, Collections.emptySet()); + super(ClonedSchedulingPass.class); } @Override diff --git a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/CompressionPass.java b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/CompressionPass.java index 0c8420316..2dcd04beb 100644 --- a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/CompressionPass.java +++ b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/CompressionPass.java @@ -24,6 +24,7 @@ /** * A pass for applying compression algorithm for data flowing between vertices. */ +@Annotates(CompressionProperty.class) public final class CompressionPass extends AnnotatingPass { private final CompressionProperty.Value compression; @@ -31,8 +32,7 @@ * Default constructor. Uses LZ4 as default. */ public CompressionPass() { - super(CompressionProperty.class); - this.compression = CompressionProperty.Value.LZ4; + this(CompressionProperty.Value.LZ4); } /** @@ -40,7 +40,7 @@ public CompressionPass() { * @param compression Compression to apply on edges. */ public CompressionPass(final CompressionProperty.Value compression) { - super(CompressionProperty.class); + super(CompressionPass.class); this.compression = compression; } diff --git a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DecompressionPass.java b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DecompressionPass.java index 628307115..dc5f733e4 100644 --- a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DecompressionPass.java +++ b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DecompressionPass.java @@ -20,19 +20,22 @@ import edu.snu.nemo.common.ir.edge.executionproperty.CompressionProperty; import edu.snu.nemo.common.ir.edge.executionproperty.DecompressionProperty; import edu.snu.nemo.common.ir.vertex.IRVertex; +import edu.snu.nemo.compiler.optimizer.pass.compiletime.Requires; /** * A pass for applying decompression algorithm for data flowing between vertices. * It always */ +@Annotates(CompressionProperty.class) +@Requires(CompressionProperty.class) public final class DecompressionPass extends AnnotatingPass { /** * Constructor. */ public DecompressionPass() { - super(CompressionProperty.class); + super(DecompressionPass.class); } @Override diff --git a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DefaultDataPersistencePass.java b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DefaultDataPersistencePass.java index 8f96da576..a89369e91 100644 --- a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DefaultDataPersistencePass.java +++ b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DefaultDataPersistencePass.java @@ -20,19 +20,20 @@ import edu.snu.nemo.common.ir.edge.executionproperty.DataStoreProperty; import edu.snu.nemo.common.ir.edge.executionproperty.DataPersistenceProperty; import edu.snu.nemo.common.ir.vertex.IRVertex; - -import java.util.Collections; +import edu.snu.nemo.compiler.optimizer.pass.compiletime.Requires; /** * Pass for initiating IREdge data persistence ExecutionProperty with default values. */ +@Annotates(DataPersistenceProperty.class) +@Requires(DataStoreProperty.class) public final class DefaultDataPersistencePass extends AnnotatingPass { /** * Default constructor. */ public DefaultDataPersistencePass() { - super(DataPersistenceProperty.class, Collections.singleton(DataStoreProperty.class)); + super(DefaultDataPersistencePass.class); } @Override diff --git a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DefaultDataStorePass.java b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DefaultDataStorePass.java index e40b95a2a..79018dce6 100644 --- a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DefaultDataStorePass.java +++ b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DefaultDataStorePass.java @@ -20,17 +20,16 @@ import edu.snu.nemo.common.ir.edge.executionproperty.DataStoreProperty; import edu.snu.nemo.common.ir.vertex.IRVertex; -import java.util.Collections; - /** * Edge data store pass to process inter-stage memory store edges. */ +@Annotates(DataStoreProperty.class) public final class DefaultDataStorePass extends AnnotatingPass { /** * Default constructor. */ public DefaultDataStorePass() { - super(DataStoreProperty.class, Collections.emptySet()); + super(DefaultDataStorePass.class); } @Override diff --git a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DefaultEdgeDecoderPass.java b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DefaultEdgeDecoderPass.java index 2283bfb5a..3c40c56fb 100644 --- a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DefaultEdgeDecoderPass.java +++ b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DefaultEdgeDecoderPass.java @@ -24,6 +24,7 @@ /** * Pass for initiating IREdge Decoder ExecutionProperty with default dummy coder. */ +@Annotates(DecoderProperty.class) public final class DefaultEdgeDecoderPass extends AnnotatingPass { private static final DecoderProperty DEFAULT_DECODER_PROPERTY = @@ -33,7 +34,7 @@ * Default constructor. */ public DefaultEdgeDecoderPass() { - super(DecoderProperty.class); + super(DefaultEdgeDecoderPass.class); } @Override diff --git a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DefaultEdgeEncoderPass.java b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DefaultEdgeEncoderPass.java index 0238c72b8..a13a1f249 100644 --- a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DefaultEdgeEncoderPass.java +++ b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DefaultEdgeEncoderPass.java @@ -24,6 +24,7 @@ /** * Pass for initiating IREdge Encoder ExecutionProperty with default dummy coder. */ +@Annotates(EncoderProperty.class) public final class DefaultEdgeEncoderPass extends AnnotatingPass { private static final EncoderProperty DEFAULT_DECODER_PROPERTY = @@ -33,7 +34,7 @@ * Default constructor. */ public DefaultEdgeEncoderPass() { - super(EncoderProperty.class); + super(DefaultEdgeEncoderPass.class); } @Override diff --git a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DefaultMetricPass.java b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DefaultMetricPass.java index c96ac0bc0..e13b15e5f 100644 --- a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DefaultMetricPass.java +++ b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DefaultMetricPass.java @@ -31,12 +31,13 @@ /** * Pass for initiating IREdge Metric ExecutionProperty with default key range. */ +@Annotates(DataSkewMetricProperty.class) public final class DefaultMetricPass extends AnnotatingPass { /** * Default constructor. */ public DefaultMetricPass() { - super(DataSkewMetricProperty.class); + super(DefaultMetricPass.class); } @Override diff --git a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DefaultParallelismPass.java b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DefaultParallelismPass.java index 8b8545424..87cc71ade 100644 --- a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DefaultParallelismPass.java +++ b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DefaultParallelismPass.java @@ -22,13 +22,15 @@ import edu.snu.nemo.common.ir.vertex.SourceVertex; import edu.snu.nemo.common.dag.DAG; import edu.snu.nemo.common.ir.vertex.executionproperty.ParallelismProperty; +import edu.snu.nemo.compiler.optimizer.pass.compiletime.Requires; -import java.util.Collections; import java.util.List; /** * Optimization pass for tagging parallelism execution property. */ +@Annotates(ParallelismProperty.class) +@Requires(CommunicationPatternProperty.class) public final class DefaultParallelismPass extends AnnotatingPass { private final int desiredSourceParallelism; // we decrease the number of parallelism by this number on each shuffle boundary. @@ -49,7 +51,7 @@ public DefaultParallelismPass() { */ public DefaultParallelismPass(final int desiredSourceParallelism, final int shuffleDecreaseFactor) { - super(ParallelismProperty.class, Collections.singleton(CommunicationPatternProperty.class)); + super(DefaultParallelismPass.class); this.desiredSourceParallelism = desiredSourceParallelism; this.shuffleDecreaseFactor = shuffleDecreaseFactor; } diff --git a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DefaultScheduleGroupPass.java b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DefaultScheduleGroupPass.java index 4dbf45554..53dd17ec3 100644 --- a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DefaultScheduleGroupPass.java +++ b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DefaultScheduleGroupPass.java @@ -24,11 +24,10 @@ import edu.snu.nemo.common.ir.vertex.IRVertex; import edu.snu.nemo.common.ir.edge.executionproperty.DataFlowProperty; import edu.snu.nemo.common.ir.vertex.executionproperty.ScheduleGroupProperty; +import edu.snu.nemo.compiler.optimizer.pass.compiletime.Requires; import org.apache.commons.lang3.mutable.MutableInt; import java.util.*; -import java.util.stream.Collectors; -import java.util.stream.Stream; /** * A pass for assigning each stages in schedule groups. @@ -49,6 +48,8 @@ * </li> * </ul> */ +@Annotates(ScheduleGroupProperty.class) +@Requires({CommunicationPatternProperty.class, DataFlowProperty.class}) public final class DefaultScheduleGroupPass extends AnnotatingPass { private final boolean allowBroadcastWithinScheduleGroup; @@ -71,10 +72,7 @@ public DefaultScheduleGroupPass() { public DefaultScheduleGroupPass(final boolean allowBroadcastWithinScheduleGroup, final boolean allowShuffleWithinScheduleGroup, final boolean allowMultipleInEdgesWithinScheduleGroup) { - super(ScheduleGroupProperty.class, Stream.of( - CommunicationPatternProperty.class, - DataFlowProperty.class - ).collect(Collectors.toSet())); + super(DefaultScheduleGroupPass.class); this.allowBroadcastWithinScheduleGroup = allowBroadcastWithinScheduleGroup; this.allowShuffleWithinScheduleGroup = allowShuffleWithinScheduleGroup; this.allowMultipleInEdgesWithinScheduleGroup = allowMultipleInEdgesWithinScheduleGroup; diff --git a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DisaggregationEdgeDataStorePass.java b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DisaggregationEdgeDataStorePass.java index 262f0ca48..9122dc059 100644 --- a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DisaggregationEdgeDataStorePass.java +++ b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DisaggregationEdgeDataStorePass.java @@ -19,20 +19,22 @@ import edu.snu.nemo.common.ir.edge.executionproperty.DataStoreProperty; import edu.snu.nemo.common.ir.vertex.IRVertex; import edu.snu.nemo.common.dag.DAG; +import edu.snu.nemo.compiler.optimizer.pass.compiletime.Requires; -import java.util.Collections; import java.util.List; /** * A pass to support Disaggregated Resources by tagging edges. * This pass handles the DataStore ExecutionProperty. */ +@Annotates(DataStoreProperty.class) +@Requires(DataStoreProperty.class) public final class DisaggregationEdgeDataStorePass extends AnnotatingPass { /** * Default constructor. */ public DisaggregationEdgeDataStorePass() { - super(DataStoreProperty.class, Collections.singleton(DataStoreProperty.class)); + super(DisaggregationEdgeDataStorePass.class); } @Override diff --git a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DuplicateEdgeGroupSizePass.java b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DuplicateEdgeGroupSizePass.java index c4db80231..8dbe7251d 100644 --- a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DuplicateEdgeGroupSizePass.java +++ b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DuplicateEdgeGroupSizePass.java @@ -27,13 +27,14 @@ /** * A pass for annotate duplicate data for each edge. */ +@Annotates(DuplicateEdgeGroupProperty.class) public final class DuplicateEdgeGroupSizePass extends AnnotatingPass { /** * Default constructor. */ public DuplicateEdgeGroupSizePass() { - super(DuplicateEdgeGroupProperty.class); + super(DuplicateEdgeGroupSizePass.class); } @Override diff --git a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/LargeSuffleCompressionPass.java b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/LargeShuffleCompressionPass.java similarity index 86% rename from compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/LargeSuffleCompressionPass.java rename to compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/LargeShuffleCompressionPass.java index 08ede7271..ae9044ece 100644 --- a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/LargeSuffleCompressionPass.java +++ b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/LargeShuffleCompressionPass.java @@ -20,8 +20,8 @@ import edu.snu.nemo.common.ir.edge.executionproperty.CommunicationPatternProperty; import edu.snu.nemo.common.ir.edge.executionproperty.CompressionProperty; import edu.snu.nemo.common.ir.vertex.IRVertex; +import edu.snu.nemo.compiler.optimizer.pass.compiletime.Requires; -import java.util.Collections; import java.util.List; /** @@ -29,12 +29,14 @@ * This pass modifies the encoder property toward {@link edu.snu.nemo.common.ir.vertex.transform.RelayTransform} * to write data as byte arrays. */ -public final class LargeSuffleCompressionPass extends AnnotatingPass { +@Annotates(CompressionProperty.class) +@Requires(CommunicationPatternProperty.class) +public final class LargeShuffleCompressionPass extends AnnotatingPass { /** * Default constructor. */ - public LargeSuffleCompressionPass() { - super(CompressionProperty.class, Collections.singleton(CommunicationPatternProperty.class)); + public LargeShuffleCompressionPass() { + super(LargeShuffleCompressionPass.class); } @Override diff --git a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/LargeShuffleDataFlowPass.java b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/LargeShuffleDataFlowPass.java index d5d18acb2..6a623a072 100644 --- a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/LargeShuffleDataFlowPass.java +++ b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/LargeShuffleDataFlowPass.java @@ -20,20 +20,22 @@ import edu.snu.nemo.common.ir.edge.executionproperty.CommunicationPatternProperty; import edu.snu.nemo.common.ir.edge.executionproperty.DataFlowProperty; import edu.snu.nemo.common.ir.vertex.IRVertex; +import edu.snu.nemo.compiler.optimizer.pass.compiletime.Requires; -import java.util.Collections; import java.util.List; /** * A pass to optimize large shuffle by tagging edges. * This pass handles the DataFlowModel ExecutionProperty. */ +@Annotates(DataFlowProperty.class) +@Requires(CommunicationPatternProperty.class) public final class LargeShuffleDataFlowPass extends AnnotatingPass { /** * Default constructor. */ public LargeShuffleDataFlowPass() { - super(DataFlowProperty.class, Collections.singleton(CommunicationPatternProperty.class)); + super(LargeShuffleDataFlowPass.class); } @Override diff --git a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/LargeShuffleDataPersistencePass.java b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/LargeShuffleDataPersistencePass.java index d7901f29d..e4e8e28cf 100644 --- a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/LargeShuffleDataPersistencePass.java +++ b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/LargeShuffleDataPersistencePass.java @@ -20,20 +20,21 @@ import edu.snu.nemo.common.ir.edge.executionproperty.DataFlowProperty; import edu.snu.nemo.common.ir.edge.executionproperty.DataPersistenceProperty; import edu.snu.nemo.common.ir.vertex.IRVertex; - -import java.util.Collections; +import edu.snu.nemo.compiler.optimizer.pass.compiletime.Requires; /** * A pass to optimize large shuffle by tagging edges. * This pass handles the data persistence ExecutionProperty. */ +@Annotates(DataPersistenceProperty.class) +@Requires(DataFlowProperty.class) public final class LargeShuffleDataPersistencePass extends AnnotatingPass { /** * Default constructor. */ public LargeShuffleDataPersistencePass() { - super(DataPersistenceProperty.class, Collections.singleton(DataFlowProperty.class)); + super(LargeShuffleDataPersistencePass.class); } @Override diff --git a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/LargeShuffleDataStorePass.java b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/LargeShuffleDataStorePass.java index 40b4bb41f..575825bdc 100644 --- a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/LargeShuffleDataStorePass.java +++ b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/LargeShuffleDataStorePass.java @@ -20,19 +20,20 @@ import edu.snu.nemo.common.ir.edge.executionproperty.CommunicationPatternProperty; import edu.snu.nemo.common.ir.edge.executionproperty.DataStoreProperty; import edu.snu.nemo.common.ir.vertex.IRVertex; - -import java.util.Collections; +import edu.snu.nemo.compiler.optimizer.pass.compiletime.Requires; /** * A pass to optimize large shuffle by tagging edges. * This pass handles the DataStore ExecutionProperty. */ +@Annotates(DataStoreProperty.class) +@Requires(CommunicationPatternProperty.class) public final class LargeShuffleDataStorePass extends AnnotatingPass { /** * Default constructor. */ public LargeShuffleDataStorePass() { - super(DataStoreProperty.class, Collections.singleton(CommunicationPatternProperty.class)); + super(LargeShuffleDataStorePass.class); } @Override diff --git a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/LargeShuffleDecoderPass.java b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/LargeShuffleDecoderPass.java index 978aff1bf..c0647e328 100644 --- a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/LargeShuffleDecoderPass.java +++ b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/LargeShuffleDecoderPass.java @@ -21,8 +21,8 @@ import edu.snu.nemo.common.ir.edge.executionproperty.CommunicationPatternProperty; import edu.snu.nemo.common.ir.edge.executionproperty.DecoderProperty; import edu.snu.nemo.common.ir.vertex.IRVertex; +import edu.snu.nemo.compiler.optimizer.pass.compiletime.Requires; -import java.util.Collections; import java.util.List; /** @@ -30,12 +30,14 @@ * This pass modifies the decoder property toward {@link edu.snu.nemo.common.ir.vertex.transform.RelayTransform} * to read data as byte arrays. */ +@Annotates(DecoderProperty.class) +@Requires(CommunicationPatternProperty.class) public final class LargeShuffleDecoderPass extends AnnotatingPass { /** * Default constructor. */ public LargeShuffleDecoderPass() { - super(DecoderProperty.class, Collections.singleton(CommunicationPatternProperty.class)); + super(LargeShuffleDecoderPass.class); } @Override diff --git a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/LargeShuffleDecompressionPass.java b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/LargeShuffleDecompressionPass.java index 625b2c988..7706c9801 100644 --- a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/LargeShuffleDecompressionPass.java +++ b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/LargeShuffleDecompressionPass.java @@ -21,8 +21,8 @@ import edu.snu.nemo.common.ir.edge.executionproperty.CompressionProperty; import edu.snu.nemo.common.ir.edge.executionproperty.DecompressionProperty; import edu.snu.nemo.common.ir.vertex.IRVertex; +import edu.snu.nemo.compiler.optimizer.pass.compiletime.Requires; -import java.util.Collections; import java.util.List; /** @@ -30,12 +30,14 @@ * This pass modifies the decoder property toward {@link edu.snu.nemo.common.ir.vertex.transform.RelayTransform} * to read data as byte arrays. */ +@Annotates(DecompressionProperty.class) +@Requires(CommunicationPatternProperty.class) public final class LargeShuffleDecompressionPass extends AnnotatingPass { /** * Default constructor. */ public LargeShuffleDecompressionPass() { - super(DecompressionProperty.class, Collections.singleton(CommunicationPatternProperty.class)); + super(LargeShuffleDecompressionPass.class); } @Override diff --git a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/LargeShuffleEncoderPass.java b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/LargeShuffleEncoderPass.java index 43def8b87..bd15052a9 100644 --- a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/LargeShuffleEncoderPass.java +++ b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/LargeShuffleEncoderPass.java @@ -21,8 +21,8 @@ import edu.snu.nemo.common.ir.edge.executionproperty.CommunicationPatternProperty; import edu.snu.nemo.common.ir.edge.executionproperty.EncoderProperty; import edu.snu.nemo.common.ir.vertex.IRVertex; +import edu.snu.nemo.compiler.optimizer.pass.compiletime.Requires; -import java.util.Collections; import java.util.List; /** @@ -30,12 +30,14 @@ * This pass modifies the encoder property toward {@link edu.snu.nemo.common.ir.vertex.transform.RelayTransform} * to write data as byte arrays. */ +@Annotates(EncoderProperty.class) +@Requires(CommunicationPatternProperty.class) public final class LargeShuffleEncoderPass extends AnnotatingPass { /** * Default constructor. */ public LargeShuffleEncoderPass() { - super(EncoderProperty.class, Collections.singleton(CommunicationPatternProperty.class)); + super(LargeShuffleEncoderPass.class); } @Override diff --git a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/LargeShufflePartitionerPass.java b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/LargeShufflePartitionerPass.java index 084ab6278..e191ff7ac 100644 --- a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/LargeShufflePartitionerPass.java +++ b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/LargeShufflePartitionerPass.java @@ -20,8 +20,8 @@ import edu.snu.nemo.common.ir.edge.executionproperty.CommunicationPatternProperty; import edu.snu.nemo.common.ir.edge.executionproperty.PartitionerProperty; import edu.snu.nemo.common.ir.vertex.IRVertex; +import edu.snu.nemo.compiler.optimizer.pass.compiletime.Requires; -import java.util.Collections; import java.util.List; /** @@ -31,12 +31,14 @@ * This enables that every byte[] element, which was a partition for the reduce task, becomes one partition again * and flushed to disk write after it is relayed. */ +@Annotates(PartitionerProperty.class) +@Requires(CommunicationPatternProperty.class) public final class LargeShufflePartitionerPass extends AnnotatingPass { /** * Default constructor. */ public LargeShufflePartitionerPass() { - super(PartitionerProperty.class, Collections.singleton(CommunicationPatternProperty.class)); + super(LargeShufflePartitionerPass.class); } @Override diff --git a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/LargeShuffleResourceSlotPass.java b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/LargeShuffleResourceSlotPass.java index f47462984..efce189bd 100644 --- a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/LargeShuffleResourceSlotPass.java +++ b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/LargeShuffleResourceSlotPass.java @@ -20,16 +20,20 @@ import edu.snu.nemo.common.ir.edge.executionproperty.DataFlowProperty; import edu.snu.nemo.common.ir.vertex.IRVertex; import edu.snu.nemo.common.ir.vertex.executionproperty.ResourceSlotProperty; - -import java.util.Collections; +import edu.snu.nemo.compiler.optimizer.pass.compiletime.Requires; /** * Sets {@link ResourceSlotProperty}. */ +@Annotates(ResourceSlotProperty.class) +@Requires(DataFlowProperty.class) public final class LargeShuffleResourceSlotPass extends AnnotatingPass { + /** + * Default constructor. + */ public LargeShuffleResourceSlotPass() { - super(ResourceSlotProperty.class, Collections.singleton(DataFlowProperty.class)); + super(LargeShuffleResourceSlotPass.class); } @Override diff --git a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/ResourceLocalityPass.java b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/ResourceLocalityPass.java index 53f23dfc9..9884808cf 100644 --- a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/ResourceLocalityPass.java +++ b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/ResourceLocalityPass.java @@ -23,10 +23,11 @@ /** * Sets {@link ResourceLocalityProperty}. */ +@Annotates(ResourceLocalityProperty.class) public final class ResourceLocalityPass extends AnnotatingPass { public ResourceLocalityPass() { - super(ResourceLocalityProperty.class); + super(ResourceLocalityPass.class); } @Override diff --git a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/ResourceSitePass.java b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/ResourceSitePass.java index 005138cdb..5883ac133 100644 --- a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/ResourceSitePass.java +++ b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/ResourceSitePass.java @@ -23,6 +23,7 @@ import edu.snu.nemo.common.ir.vertex.IRVertex; import edu.snu.nemo.common.ir.vertex.executionproperty.ResourceSiteProperty; import edu.snu.nemo.common.ir.vertex.executionproperty.ParallelismProperty; +import edu.snu.nemo.compiler.optimizer.pass.compiletime.Requires; import org.apache.commons.math3.optim.BaseOptimizer; import org.apache.commons.math3.optim.PointValuePair; import org.apache.commons.math3.optim.linear.*; @@ -50,6 +51,8 @@ * Also, this pass assumes network bandwidth to be the bottleneck. Each node should have enough capacity to run * TaskGroups immediately as scheduler attempts to schedule a TaskGroup. */ +@Annotates(ResourceSiteProperty.class) +@Requires(ParallelismProperty.class) public final class ResourceSitePass extends AnnotatingPass { // Index of the objective parameter, in the coefficient vector @@ -64,7 +67,7 @@ * Default constructor. */ public ResourceSitePass() { - super(ResourceSiteProperty.class, Collections.singleton(ParallelismProperty.class)); + super(ResourceSitePass.class); } @Override diff --git a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/ResourceSlotPass.java b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/ResourceSlotPass.java index f9718828b..bbb3fc614 100644 --- a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/ResourceSlotPass.java +++ b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/ResourceSlotPass.java @@ -23,10 +23,11 @@ /** * Sets {@link ResourceSlotProperty}. */ +@Annotates(ResourceSlotProperty.class) public final class ResourceSlotPass extends AnnotatingPass { public ResourceSlotPass() { - super(ResourceSlotProperty.class); + super(ResourceSlotPass.class); } @Override diff --git a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/ShuffleEdgePushPass.java b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/ShuffleEdgePushPass.java index feff84f69..0820dde6c 100644 --- a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/ShuffleEdgePushPass.java +++ b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/ShuffleEdgePushPass.java @@ -20,20 +20,22 @@ import edu.snu.nemo.common.ir.edge.executionproperty.CommunicationPatternProperty; import edu.snu.nemo.common.ir.edge.executionproperty.DataFlowProperty; import edu.snu.nemo.common.ir.vertex.IRVertex; +import edu.snu.nemo.compiler.optimizer.pass.compiletime.Requires; -import java.util.Collections; import java.util.List; /** * A pass for tagging shuffle edges different from the default ones. * It sets DataFlowModel ExecutionProperty as "push". */ +@Annotates(DataFlowProperty.class) +@Requires(CommunicationPatternProperty.class) public final class ShuffleEdgePushPass extends AnnotatingPass { /** * Default constructor. */ public ShuffleEdgePushPass() { - super(DataFlowProperty.class, Collections.singleton(CommunicationPatternProperty.class)); + super(ShuffleEdgePushPass.class); } @Override diff --git a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/SkewDataStorePass.java b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/SkewDataStorePass.java index 8b1592b23..984e8dfd0 100644 --- a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/SkewDataStorePass.java +++ b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/SkewDataStorePass.java @@ -26,12 +26,13 @@ * It specifies the incoming one-to-one edges to MetricCollectionVertices to have either MemoryStore or LocalFileStore * as its DataStore ExecutionProperty. */ +@Annotates(DataStoreProperty.class) public final class SkewDataStorePass extends AnnotatingPass { /** * Default constructor. */ public SkewDataStorePass() { - super(DataStoreProperty.class); + super(SkewDataStorePass.class); } @Override diff --git a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/SkewMetricCollectionPass.java b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/SkewMetricCollectionPass.java index f2bf9d354..ad635c6c3 100644 --- a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/SkewMetricCollectionPass.java +++ b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/SkewMetricCollectionPass.java @@ -21,20 +21,21 @@ import edu.snu.nemo.common.ir.vertex.IRVertex; import edu.snu.nemo.common.ir.vertex.MetricCollectionBarrierVertex; import edu.snu.nemo.common.ir.edge.executionproperty.MetricCollectionProperty; - -import java.util.Collections; +import edu.snu.nemo.compiler.optimizer.pass.compiletime.Requires; /** * Pass to annotate the DAG for a job to perform data skew. * It specifies the outgoing Shuffle edges from MetricCollectionVertices with a MetricCollection ExecutionProperty * which lets the edge to know what metric collection it should perform. */ +@Annotates(MetricCollectionProperty.class) +@Requires(CommunicationPatternProperty.class) public final class SkewMetricCollectionPass extends AnnotatingPass { /** * Default constructor. */ public SkewMetricCollectionPass() { - super(MetricCollectionProperty.class, Collections.singleton(CommunicationPatternProperty.class)); + super(SkewMetricCollectionPass.class); } @Override diff --git a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/SkewPartitionerPass.java b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/SkewPartitionerPass.java index 58c785f51..7ffd221b9 100644 --- a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/SkewPartitionerPass.java +++ b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/SkewPartitionerPass.java @@ -21,19 +21,21 @@ import edu.snu.nemo.common.ir.vertex.IRVertex; import edu.snu.nemo.common.ir.vertex.MetricCollectionBarrierVertex; import edu.snu.nemo.common.ir.edge.executionproperty.PartitionerProperty; +import edu.snu.nemo.compiler.optimizer.pass.compiletime.Requires; -import java.util.Collections; import java.util.List; /** * Transient resource pass for tagging edges with {@link PartitionerProperty}. */ +@Annotates(PartitionerProperty.class) +@Requires(MetricCollectionProperty.class) public final class SkewPartitionerPass extends AnnotatingPass { /** * Default constructor. */ public SkewPartitionerPass() { - super(PartitionerProperty.class, Collections.singleton(MetricCollectionProperty.class)); + super(SkewPartitionerPass.class); } @Override diff --git a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/SkewResourceSkewedDataPass.java b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/SkewResourceSkewedDataPass.java index c5bc1d9d5..c3739aff1 100644 --- a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/SkewResourceSkewedDataPass.java +++ b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/SkewResourceSkewedDataPass.java @@ -28,12 +28,13 @@ * Pass to annotate the DAG for a job to perform data skew. * It specifies which optimization to perform on the MetricCollectionBarrierVertex. */ +@Annotates(DynamicOptimizationProperty.class) public final class SkewResourceSkewedDataPass extends AnnotatingPass { /** * Default constructor. */ public SkewResourceSkewedDataPass() { - super(DynamicOptimizationProperty.class); + super(SkewResourceSkewedDataPass.class); } private boolean hasMetricCollectionBarrierVertexAsParent(final DAG<IRVertex, IREdge> dag, diff --git a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/TransientResourceDataFlowPass.java b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/TransientResourceDataFlowPass.java index 4da3bcf9f..9850d8133 100644 --- a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/TransientResourceDataFlowPass.java +++ b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/TransientResourceDataFlowPass.java @@ -20,8 +20,8 @@ import edu.snu.nemo.common.ir.edge.executionproperty.DataFlowProperty; import edu.snu.nemo.common.ir.vertex.IRVertex; import edu.snu.nemo.common.ir.vertex.executionproperty.ResourcePriorityProperty; +import edu.snu.nemo.compiler.optimizer.pass.compiletime.Requires; -import java.util.Collections; import java.util.List; import static edu.snu.nemo.compiler.optimizer.pass.compiletime.annotating.TransientResourceDataStorePass.fromTransientToReserved; @@ -29,12 +29,14 @@ /** * Push from transient resources to reserved resources. */ +@Annotates(DataFlowProperty.class) +@Requires(ResourcePriorityProperty.class) public final class TransientResourceDataFlowPass extends AnnotatingPass { /** * Default constructor. */ public TransientResourceDataFlowPass() { - super(DataFlowProperty.class, Collections.singleton(ResourcePriorityProperty.class)); + super(TransientResourceDataFlowPass.class); } @Override diff --git a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/TransientResourceDataStorePass.java b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/TransientResourceDataStorePass.java index dcd913264..1f8165173 100644 --- a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/TransientResourceDataStorePass.java +++ b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/TransientResourceDataStorePass.java @@ -21,19 +21,21 @@ import edu.snu.nemo.common.ir.vertex.IRVertex; import edu.snu.nemo.common.dag.DAG; import edu.snu.nemo.common.ir.vertex.executionproperty.ResourcePriorityProperty; +import edu.snu.nemo.compiler.optimizer.pass.compiletime.Requires; -import java.util.Collections; import java.util.List; /** * Transient resource pass for tagging edges with DataStore ExecutionProperty. */ +@Annotates(DataStoreProperty.class) +@Requires(ResourcePriorityProperty.class) public final class TransientResourceDataStorePass extends AnnotatingPass { /** * Default constructor. */ public TransientResourceDataStorePass() { - super(DataStoreProperty.class, Collections.singleton(ResourcePriorityProperty.class)); + super(TransientResourceDataStorePass.class); } @Override diff --git a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/TransientResourcePriorityPass.java b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/TransientResourcePriorityPass.java index cdf25a204..177ffbd48 100644 --- a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/TransientResourcePriorityPass.java +++ b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/TransientResourcePriorityPass.java @@ -20,19 +20,21 @@ import edu.snu.nemo.common.ir.vertex.IRVertex; import edu.snu.nemo.common.dag.DAG; import edu.snu.nemo.common.ir.vertex.executionproperty.ResourcePriorityProperty; +import edu.snu.nemo.compiler.optimizer.pass.compiletime.Requires; -import java.util.Collections; import java.util.List; /** * Place valuable computations on reserved resources, and the rest on transient resources. */ +@Annotates(ResourcePriorityProperty.class) +@Requires(CommunicationPatternProperty.class) public final class TransientResourcePriorityPass extends AnnotatingPass { /** * Default constructor. */ public TransientResourcePriorityPass() { - super(ResourcePriorityProperty.class, Collections.singleton(CommunicationPatternProperty.class)); + super(TransientResourcePriorityPass.class); } @Override diff --git a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/composite/CompositePass.java b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/composite/CompositePass.java index 378d125c1..aa44e26d3 100644 --- a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/composite/CompositePass.java +++ b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/composite/CompositePass.java @@ -41,7 +41,7 @@ public CompositePass(final List<CompileTimePass> passList) { passList.forEach(pass -> prerequisiteExecutionProperties.addAll(pass.getPrerequisiteExecutionProperties())); passList.forEach(pass -> { if (pass instanceof AnnotatingPass) { - prerequisiteExecutionProperties.remove(((AnnotatingPass) pass).getExecutionPropertyToModify()); + prerequisiteExecutionProperties.removeAll(((AnnotatingPass) pass).getExecutionPropertiesToAnnotate()); } }); } diff --git a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/composite/LargeShuffleCompositePass.java b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/composite/LargeShuffleCompositePass.java index e69e56c8e..851890554 100644 --- a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/composite/LargeShuffleCompositePass.java +++ b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/composite/LargeShuffleCompositePass.java @@ -36,7 +36,7 @@ public LargeShuffleCompositePass() { new LargeShuffleDecoderPass(), new LargeShuffleEncoderPass(), new LargeShufflePartitionerPass(), - new LargeSuffleCompressionPass(), + new LargeShuffleCompressionPass(), new LargeShuffleDecompressionPass(), new LargeShuffleDataPersistencePass(), new LargeShuffleResourceSlotPass() diff --git a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/reshaping/CommonSubexpressionEliminationPass.java b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/reshaping/CommonSubexpressionEliminationPass.java index 606d84b2c..818e1b719 100644 --- a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/reshaping/CommonSubexpressionEliminationPass.java +++ b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/reshaping/CommonSubexpressionEliminationPass.java @@ -26,6 +26,7 @@ import edu.snu.nemo.common.ir.vertex.transform.Transform; import edu.snu.nemo.common.dag.DAG; import edu.snu.nemo.common.dag.DAGBuilder; +import edu.snu.nemo.compiler.optimizer.pass.compiletime.Requires; import java.util.*; import java.util.stream.Collectors; @@ -36,12 +37,13 @@ * they include the same transform, and has incoming edges from an identical set of vertices. * Refer to CommonSubexpressionEliminationPassTest for such cases. */ +@Requires(CommunicationPatternProperty.class) public final class CommonSubexpressionEliminationPass extends ReshapingPass { /** * Default constructor. */ public CommonSubexpressionEliminationPass() { - super(Collections.singleton(CommunicationPatternProperty.class)); + super(CommonSubexpressionEliminationPass.class); } @Override diff --git a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/reshaping/LargeShuffleRelayReshapingPass.java b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/reshaping/LargeShuffleRelayReshapingPass.java index 7abee7e0d..fa2afeef2 100644 --- a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/reshaping/LargeShuffleRelayReshapingPass.java +++ b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/reshaping/LargeShuffleRelayReshapingPass.java @@ -24,8 +24,7 @@ import edu.snu.nemo.common.ir.vertex.IRVertex; import edu.snu.nemo.common.ir.vertex.OperatorVertex; import edu.snu.nemo.common.ir.vertex.transform.RelayTransform; - -import java.util.Collections; +import edu.snu.nemo.compiler.optimizer.pass.compiletime.Requires; /** * Pass to modify the DAG for a job to batch the disk seek. @@ -33,13 +32,14 @@ * receiving shuffle edges, * to merge the shuffled data in memory and write to the disk at once. */ +@Requires(CommunicationPatternProperty.class) public final class LargeShuffleRelayReshapingPass extends ReshapingPass { /** * Default constructor. */ public LargeShuffleRelayReshapingPass() { - super(Collections.singleton(CommunicationPatternProperty.class)); + super(LargeShuffleRelayReshapingPass.class); } @Override diff --git a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/reshaping/LoopExtractionPass.java b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/reshaping/LoopExtractionPass.java index 6c1afb225..e11d7127f 100644 --- a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/reshaping/LoopExtractionPass.java +++ b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/reshaping/LoopExtractionPass.java @@ -23,6 +23,7 @@ import edu.snu.nemo.common.ir.vertex.LoopVertex; import edu.snu.nemo.common.ir.vertex.OperatorVertex; import edu.snu.nemo.common.ir.vertex.SourceVertex; +import edu.snu.nemo.compiler.optimizer.pass.compiletime.Requires; import java.util.*; @@ -32,12 +33,13 @@ * Then, it rolls repetitive operators into one root LoopOperator, which contains enough information to produce all * other iterative computations. */ +@Requires(CommunicationPatternProperty.class) public final class LoopExtractionPass extends ReshapingPass { /** * Default constructor. */ public LoopExtractionPass() { - super(Collections.singleton(CommunicationPatternProperty.class)); + super(LoopExtractionPass.class); } @Override diff --git a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/reshaping/LoopOptimizations.java b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/reshaping/LoopOptimizations.java index 4dc53ac49..9d9f8bc92 100644 --- a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/reshaping/LoopOptimizations.java +++ b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/reshaping/LoopOptimizations.java @@ -23,6 +23,7 @@ import edu.snu.nemo.common.ir.vertex.LoopVertex; import edu.snu.nemo.common.dag.DAG; import edu.snu.nemo.common.dag.DAGBuilder; +import edu.snu.nemo.compiler.optimizer.pass.compiletime.Requires; import java.util.*; import java.util.function.IntPredicate; @@ -98,12 +99,13 @@ private static void collectLoopVertices(final DAG<IRVertex, IREdge> dag, /** * Pass for Loop Fusion optimization. */ + @Requires(CommunicationPatternProperty.class) public static final class LoopFusionPass extends ReshapingPass { /** * Default constructor. */ public LoopFusionPass() { - super(Collections.singleton(CommunicationPatternProperty.class)); + super(LoopFusionPass.class); } @Override @@ -246,12 +248,13 @@ private Boolean checkEqualityOfIntPredicates(final IntPredicate predicate1, fina /** * Pass for Loop Invariant Code Motion optimization. */ + @Requires(CommunicationPatternProperty.class) public static final class LoopInvariantCodeMotionPass extends ReshapingPass { /** * Default constructor. */ public LoopInvariantCodeMotionPass() { - super(Collections.singleton(CommunicationPatternProperty.class)); + super(LoopInvariantCodeMotionPass.class); } @Override diff --git a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/reshaping/LoopUnrollingPass.java b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/reshaping/LoopUnrollingPass.java index d11b7ab0c..c1408e5e0 100644 --- a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/reshaping/LoopUnrollingPass.java +++ b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/reshaping/LoopUnrollingPass.java @@ -27,6 +27,13 @@ * Then, it decomposes each of the LoopVertices with the DAG information that each of them contain. */ public final class LoopUnrollingPass extends ReshapingPass { + /** + * Default constructor. + */ + public LoopUnrollingPass() { + super(LoopUnrollingPass.class); + } + @Override public DAG<IRVertex, IREdge> apply(final DAG<IRVertex, IREdge> dag) { return recursivelyUnroll(dag); diff --git a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/reshaping/ReshapingPass.java b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/reshaping/ReshapingPass.java index d8159960c..85ec3fd47 100644 --- a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/reshaping/ReshapingPass.java +++ b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/reshaping/ReshapingPass.java @@ -17,7 +17,9 @@ import edu.snu.nemo.common.ir.executionproperty.ExecutionProperty; import edu.snu.nemo.compiler.optimizer.pass.compiletime.CompileTimePass; +import edu.snu.nemo.compiler.optimizer.pass.compiletime.Requires; +import java.util.Arrays; import java.util.HashSet; import java.util.Set; @@ -28,19 +30,14 @@ public abstract class ReshapingPass extends CompileTimePass { private final Set<Class<? extends ExecutionProperty>> prerequisiteExecutionProperties; - /** - * Default constructor. - */ - public ReshapingPass() { - this(new HashSet<>()); - } - /** * Constructor. - * @param prerequisiteExecutionProperties prerequisite of execution properties. + * @param cls the reshaping pass class. */ - public ReshapingPass(final Set<Class<? extends ExecutionProperty>> prerequisiteExecutionProperties) { - this.prerequisiteExecutionProperties = prerequisiteExecutionProperties; + public ReshapingPass(final Class<? extends ReshapingPass> cls) { + final Requires requires = cls.getAnnotation(Requires.class); + this.prerequisiteExecutionProperties = requires == null + ? new HashSet<>() : new HashSet<>(Arrays.asList(requires.value())); } public final Set<Class<? extends ExecutionProperty>> getPrerequisiteExecutionProperties() { diff --git a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/reshaping/SkewReshapingPass.java b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/reshaping/SkewReshapingPass.java index f7074bbf6..a8763bd45 100644 --- a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/reshaping/SkewReshapingPass.java +++ b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/reshaping/SkewReshapingPass.java @@ -24,9 +24,9 @@ import edu.snu.nemo.common.ir.vertex.IRVertex; import edu.snu.nemo.common.ir.vertex.MetricCollectionBarrierVertex; import edu.snu.nemo.common.ir.vertex.OperatorVertex; +import edu.snu.nemo.compiler.optimizer.pass.compiletime.Requires; import java.util.ArrayList; -import java.util.Collections; import java.util.List; /** @@ -37,12 +37,13 @@ * a snapshot at the end of the pass. This could be prevented by modifying other passes to take the snapshot of the * DAG at the end of each passes for metricCollectionVertices. */ +@Requires(CommunicationPatternProperty.class) public final class SkewReshapingPass extends ReshapingPass { /** * Default constructor. */ public SkewReshapingPass() { - super(Collections.singleton(CommunicationPatternProperty.class)); + super(SkewReshapingPass.class); } @Override diff --git a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/policy/PolicyBuilder.java b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/policy/PolicyBuilder.java index 13a250726..4a84a625b 100644 --- a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/policy/PolicyBuilder.java +++ b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/policy/PolicyBuilder.java @@ -81,7 +81,7 @@ public PolicyBuilder registerCompileTimePass(final CompileTimePass compileTimePa // check annotation of annotating passes. if (compileTimePass instanceof AnnotatingPass) { final AnnotatingPass annotatingPass = (AnnotatingPass) compileTimePass; - this.annotatedExecutionProperties.add(annotatingPass.getExecutionPropertyToModify()); + this.annotatedExecutionProperties.addAll(annotatingPass.getExecutionPropertiesToAnnotate()); } this.compileTimePasses.add(compileTimePass); diff --git a/compiler/test/src/test/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DefaultEdgeCoderPassTest.java b/compiler/test/src/test/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DefaultEdgeCoderPassTest.java index e21ee55f5..800bc40d8 100644 --- a/compiler/test/src/test/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DefaultEdgeCoderPassTest.java +++ b/compiler/test/src/test/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DefaultEdgeCoderPassTest.java @@ -31,6 +31,7 @@ import org.powermock.modules.junit4.PowerMockRunner; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; /** * Test {@link DefaultEdgeEncoderPass} and {@link DefaultEdgeDecoderPass}. @@ -48,9 +49,9 @@ public void setUp() throws Exception { @Test public void testAnnotatingPass() { final AnnotatingPass encoderPass = new DefaultEdgeEncoderPass(); - assertEquals(EncoderProperty.class, encoderPass.getExecutionPropertyToModify()); + assertTrue(encoderPass.getExecutionPropertiesToAnnotate().contains(EncoderProperty.class)); final AnnotatingPass decoderPass = new DefaultEdgeDecoderPass(); - assertEquals(DecoderProperty.class, decoderPass.getExecutionPropertyToModify()); + assertTrue(decoderPass.getExecutionPropertiesToAnnotate().contains(DecoderProperty.class)); } @Test diff --git a/compiler/test/src/test/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DefaultParallelismPassTest.java b/compiler/test/src/test/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DefaultParallelismPassTest.java index 59c54c230..1205f64de 100644 --- a/compiler/test/src/test/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DefaultParallelismPassTest.java +++ b/compiler/test/src/test/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DefaultParallelismPassTest.java @@ -29,6 +29,7 @@ import org.powermock.modules.junit4.PowerMockRunner; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; /** * Test {@link DefaultParallelismPass}. @@ -46,7 +47,7 @@ public void setUp() throws Exception { @Test public void testAnnotatingPass() { final AnnotatingPass parallelismPass = new DefaultParallelismPass(); - assertEquals(ParallelismProperty.class, parallelismPass.getExecutionPropertyToModify()); + assertTrue(parallelismPass.getExecutionPropertiesToAnnotate().contains(ParallelismProperty.class)); } @Test diff --git a/compiler/test/src/test/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DefaultScheduleGroupPassTest.java b/compiler/test/src/test/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DefaultScheduleGroupPassTest.java index 70b327580..c8bfc85a7 100644 --- a/compiler/test/src/test/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DefaultScheduleGroupPassTest.java +++ b/compiler/test/src/test/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DefaultScheduleGroupPassTest.java @@ -48,7 +48,7 @@ @Test public void testAnnotatingPass() { final AnnotatingPass scheduleGroupPass = new DefaultScheduleGroupPass(); - assertEquals(ScheduleGroupProperty.class, scheduleGroupPass.getExecutionPropertyToModify()); + assertTrue(scheduleGroupPass.getExecutionPropertiesToAnnotate().contains(ScheduleGroupProperty.class)); } /** diff --git a/compiler/test/src/test/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/composite/SkewCompositePassTest.java b/compiler/test/src/test/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/composite/SkewCompositePassTest.java index ed2156149..1cd8996be 100644 --- a/compiler/test/src/test/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/composite/SkewCompositePassTest.java +++ b/compiler/test/src/test/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/composite/SkewCompositePassTest.java @@ -67,7 +67,7 @@ public void testCompositePass() { prerequisites.addAll(compileTimePass.getPrerequisiteExecutionProperties())); dataSkewPass.getPassList().forEach(compileTimePass -> { if (compileTimePass instanceof AnnotatingPass) { - prerequisites.remove(((AnnotatingPass) compileTimePass).getExecutionPropertyToModify()); + prerequisites.removeAll(((AnnotatingPass) compileTimePass).getExecutionPropertiesToAnnotate()); } }); assertEquals(prerequisites, dataSkewPass.getPrerequisiteExecutionProperties()); ---------------------------------------------------------------- This is an automated message from the Apache Git Service. To respond to the message, please log on GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: us...@infra.apache.org With regards, Apache Git Services