The PR adds the support to allow client to select part of environment variables. i.e, in reducible operations, the initial value, which is a live-in variable, doesn't need to be included into the task but can be later initialized with the identity value of that operation in the cloned task instead. Below is a breakdown of all the changes to different classes in NOELLE. Two clients, DOALL and HELIX has been modified to ignore the initial value while parallelized with reducible operations.
DOALL
public:
apply: add lambda isSkippable to skip the initial value of reduction variable, and let skipped variables tacked by the task
ParallelizationTechnique
public:
new constructor that takes a skippable lambda function as initial argument
adjustDataFlowToUseClones: skip a value if it's a skipped environment variable
populateLiveInEnvironment: check if an environment variable is included in the builder before creating store instruction
LoopEnvironmentBuilder
public:
new constructor that takes a skippable lambda function as initial argument
create method isIncludedEnvironmentVariable: return true if a environment variable is considered by the builder
Task
public:
create method isSkippedEnvironmentVariable: check if an environment variable is skipped from the client
create method addSkippedEnvironmentVariable: marked an environment variable to be skipped from the client
private:
add unordered_set skippedEnvironmentVariables to track all skipped environmnent variables
Overview
The PR adds the support to allow client to select part of environment variables. i.e, in reducible operations, the initial value, which is a live-in variable, doesn't need to be included into the task but can be later initialized with the identity value of that operation in the cloned task instead. Below is a breakdown of all the changes to different classes in NOELLE. Two clients, DOALL and HELIX has been modified to ignore the initial value while parallelized with reducible operations.
DOALL
ParallelizationTechnique
LoopEnvironmentBuilder
Task