Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

#728: Avoid ICEs and compilation failures in Intel 19.x and Nvidia with gcc<=7.2.0 #1178

Merged
merged 5 commits into from
Dec 8, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
145 changes: 145 additions & 0 deletions ci/azure/azure-intel-19-ubuntu-mpich.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,145 @@
###############################################################################
############## Warning this is a generated file---do not modify ###############
###############################################################################

name: PR tests (intel 19, ubuntu, mpich)

trigger:
branches:
include:
- develop
- 1.0.0*

pr:
branches:
include:
- '*'


resources:
- repo: self

variables:
tag: '$(Build.BuildId)'
REPO: lifflander1/vt
ARCH: amd64
UBUNTU: 18.04
COMPILER_TYPE: intel
COMPILER: icc-19
BUILD_TYPE: release
ULIMIT_CORE: 0
CODE_COVERAGE: 0
VT_LB: 1
VT_TRACE: 1
VT_TRACE_RT: 0
VT_MIMALLOC: 0
VT_DOCS: 0
VT_ASAN: 0
VT_POOL: 0
VT_EXTENDED_TESTS: 0
VT_UNITY_BUILD: 1
VT_ZOLTAN: 0
VT_CI_BUILD: 1
VT_DIAGNOSTICS: 1
CACHE: "$(Agent.TempDirectory)/cache/"
cache_name: ubuntu-intel-19-cache
build_root: "$(CACHE)/$(ARCH)-ubuntu-$(UBUNTU)-$(COMPILER)-cache/"
TS: 0
TS_YEAR: 0
TS_MONTH: 0
TS_DAY: 0

stages:
- stage: Build
displayName: Build image
jobs:
- job: Build
displayName: Build
pool:
vmImage: 'ubuntu-18.04'
timeoutInMinutes: 180
steps:
- task: Bash@3
displayName: Job setup
inputs:
targetType: 'inline'
script: |
echo setup
- task: Bash@3
displayName: Build timestep for caching
inputs:
targetType: 'inline'
script: |
echo 'string(TIMESTAMP current_date "%H;%M;%S" UTC)' > script
echo 'execute_process(COMMAND ${CMAKE_COMMAND} -E echo "${current_date}")' >> script
val=$(cmake -P script)
echo "##vso[task.setvariable variable=TS]$val"
echo 'string(TIMESTAMP current_date "%Y" UTC)' > script
echo 'execute_process(COMMAND ${CMAKE_COMMAND} -E echo "${current_date}")' >> script
val=$(cmake -P script)
echo "##vso[task.setvariable variable=TS_YEAR]$val"
echo 'string(TIMESTAMP current_date "%m" UTC)' > script
echo 'execute_process(COMMAND ${CMAKE_COMMAND} -E echo "${current_date}")' >> script
val=$(cmake -P script)
echo "##vso[task.setvariable variable=TS_MONTH]$val"
echo 'string(TIMESTAMP current_date "%d" UTC)' > script
echo 'execute_process(COMMAND ${CMAKE_COMMAND} -E echo "${current_date}")' >> script
val=$(cmake -P script)
echo "##vso[task.setvariable variable=TS_DAY]$val"
- task: Bash@3
displayName: Output timestamp for caching
inputs:
targetType: 'inline'
script: 'echo "my pipeline variable is $(TS) $(TS_YEAR) $(TS_MONTH) $(TS_DAY)"'
- task: Cache@2
displayName: Update cache
inputs:
securityNamespace: cache
key: $(Agent.OS) | "$(cache_name)" | $(TS_YEAR) | $(TS_MONTH) | $(TS_DAY) | $(TS)
path: '$(build_root)/ccache'
restoreKeys: |
$(Agent.OS) | "$(cache_name)" | $(TS_YEAR) | $(TS_MONTH) | $(TS_DAY)
$(Agent.OS) | "$(cache_name)" | $(TS_YEAR) | $(TS_MONTH)
$(Agent.OS) | "$(cache_name)" | $(TS_YEAR)
$(Agent.OS) | "$(cache_name)"
- task: DockerCompose@0
displayName: Pull container
inputs:
containerregistrytype: 'Container Registry'
dockerComposeFile: '**/docker-compose.yml'
action: 'Run a Docker Compose command'
dockerComposeCommand: 'pull --ignore-pull-failures ubuntu-cpp-clean'
- task: DockerCompose@0
displayName: Build container
inputs:
containerregistrytype: 'Container Registry'
dockerComposeFile: '**/docker-compose.yml'
action: 'Run a Docker Compose command'
dockerComposeCommand: 'run ubuntu-cpp-clean'
- task: DockerCompose@0
displayName: Push container to registry
inputs:
containerregistrytype: 'Container Registry'
dockerRegistryEndpoint: 'dockerRegistryConnection1'
dockerComposeFile: '**/docker-compose.yml'
action: 'Run a Docker Compose command'
dockerComposeCommand: 'push ubuntu-cpp-clean'
- task: Bash@3
displayName: Create artifacts
inputs:
targetType: 'inline'
script: |
zip -j $(Agent.TempDirectory)/LastTest.log.gz $(build_root)/vt/Testing/Temporary/LastTest.log
zip -j $(Agent.TempDirectory)/cmake-output.log.gz $(build_root)/vt/cmake-output.log
- task: PublishPipelineArtifact@1
displayName: Upload CMake test output artifact
inputs:
targetPath: '$(Agent.TempDirectory)/LastTest.log.gz'
artifact: 'CMakeLastTestLog'
publishLocation: 'pipeline'
- task: PublishPipelineArtifact@1
displayName: Upload CMake full output artifact
inputs:
targetPath: '$(Agent.TempDirectory)/cmake-output.log.gz'
artifact: 'CMakeOutputLog'
publishLocation: 'pipeline'
10 changes: 10 additions & 0 deletions scripts/workflows-azure.ini
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,16 @@ vt_trace = 1
vt_pool = 0
vt_extended_tests = 0

[PR-tests-intel-19]
test_configuration = "intel 19, ubuntu, mpich"
compiler_type = intel
compiler = icc-19
cache_name = ubuntu-intel-19-cache
output_name = ci/azure/azure-intel-19-ubuntu-mpich.yml
vt_trace = 1
vt_pool = 0
vt_extended_tests = 0

[PR-tests-intel-18-03-extended]
test_type = "PR tests extended"
test_configuration = "intel 18.03, ubuntu, mpich"
Expand Down
88 changes: 80 additions & 8 deletions src/vt/collective/reduce/reduce.h
Original file line number Diff line number Diff line change
Expand Up @@ -179,15 +179,33 @@ struct Reduce : virtual collective::tree::Tree {
template <
typename OpT,
typename MsgT,
ActiveTypedFnType<MsgT> *f = MsgT::template msgHandler<
MsgT, OpT, collective::reduce::operators::ReduceCallback<MsgT>
>
ActiveTypedFnType<MsgT> *f
>
PendingSendType reduce(
NodeType const& root, MsgT* msg, Callback<MsgT> cb,
detail::ReduceStamp id = detail::ReduceStamp{},
ReduceNumType const& num_contrib = 1
);
template <
typename OpT,
typename MsgT
>
PendingSendType reduce(
NodeType const& root, MsgT* msg, Callback<MsgT> cb,
detail::ReduceStamp id = detail::ReduceStamp{},
ReduceNumType const& num_contrib = 1
)
{
return reduce<
OpT,
MsgT,
&MsgT::template msgHandler<
MsgT,
OpT,
collective::reduce::operators::ReduceCallback<MsgT>
>
>(root, msg, cb, id, num_contrib);
}

/**
* \brief Reduce a message up the tree
Expand All @@ -203,15 +221,33 @@ struct Reduce : virtual collective::tree::Tree {
template <
typename OpT,
typename MsgT,
ActiveTypedFnType<MsgT> *f = MsgT::template msgHandler<
MsgT, OpT, collective::reduce::operators::ReduceCallback<MsgT>
>
ActiveTypedFnType<MsgT> *f
>
detail::ReduceStamp reduceImmediate(
NodeType const& root, MsgT* msg, Callback<MsgT> cb,
detail::ReduceStamp id = detail::ReduceStamp{},
ReduceNumType const& num_contrib = 1
);
template <
typename OpT,
typename MsgT
>
detail::ReduceStamp reduceImmediate(
NodeType const& root, MsgT* msg, Callback<MsgT> cb,
detail::ReduceStamp id = detail::ReduceStamp{},
ReduceNumType const& num_contrib = 1
)
{
return reduceImmediate<
OpT,
MsgT,
&MsgT::template msgHandler<
MsgT,
OpT,
collective::reduce::operators::ReduceCallback<MsgT>
>
>(root, msg, cb, id, num_contrib);
}

/**
* \brief Reduce a message up the tree with a target function on the root node
Expand All @@ -227,13 +263,31 @@ struct Reduce : virtual collective::tree::Tree {
typename OpT,
typename FunctorT,
typename MsgT,
ActiveTypedFnType<MsgT> *f = MsgT::template msgHandler<MsgT, OpT, FunctorT>
ActiveTypedFnType<MsgT> *f
>
PendingSendType reduce(
NodeType const& root, MsgT* msg,
detail::ReduceStamp id = detail::ReduceStamp{},
ReduceNumType const& num_contrib = 1
);
template <
typename OpT,
typename FunctorT,
typename MsgT
>
PendingSendType reduce(
NodeType const& root, MsgT* msg,
detail::ReduceStamp id = detail::ReduceStamp{},
ReduceNumType const& num_contrib = 1
)
{
return reduce<
OpT,
FunctorT,
MsgT,
&MsgT::template msgHandler<MsgT, OpT, FunctorT>
>(root, msg, id, num_contrib);
}

/**
* \brief Reduce a message up the tree with a target function on the root node
Expand All @@ -249,13 +303,31 @@ struct Reduce : virtual collective::tree::Tree {
typename OpT,
typename FunctorT,
typename MsgT,
ActiveTypedFnType<MsgT> *f = MsgT::template msgHandler<MsgT, OpT, FunctorT>
ActiveTypedFnType<MsgT> *f
>
detail::ReduceStamp reduceImmediate(
NodeType const& root, MsgT* msg,
detail::ReduceStamp id = detail::ReduceStamp{},
ReduceNumType const& num_contrib = 1
);
template <
typename OpT,
typename FunctorT,
typename MsgT
>
detail::ReduceStamp reduceImmediate(
NodeType const& root, MsgT* msg,
detail::ReduceStamp id = detail::ReduceStamp{},
ReduceNumType const& num_contrib = 1
)
{
return reduceImmediate<
OpT,
FunctorT,
MsgT,
&MsgT::template msgHandler<MsgT, OpT, FunctorT>
>(root, msg, id, num_contrib);
}

/**
* \internal \brief Combine in a new message for a given reduction
Expand Down
42 changes: 37 additions & 5 deletions src/vt/objgroup/proxy/proxy_objgroup.h
Original file line number Diff line number Diff line change
Expand Up @@ -149,14 +149,30 @@ struct Proxy {
template <
typename OpT = collective::None,
typename MsgPtrT,
typename MsgT = typename util::MsgPtrType<MsgPtrT>::MsgType,
ActiveTypedFnType<MsgT> *f = MsgT::template msgHandler<
MsgT, OpT, collective::reduce::operators::ReduceCallback<MsgT>
>
typename MsgT,
ActiveTypedFnType<MsgT> *f
>
PendingSendType reduce(
MsgPtrT msg, Callback<MsgT> cb, ReduceStamp stamp = ReduceStamp{}
) const;
template <
typename OpT = collective::None,
typename MsgPtrT,
typename MsgT = typename util::MsgPtrType<MsgPtrT>::MsgType
>
PendingSendType reduce(
MsgPtrT msg, Callback<MsgT> cb, ReduceStamp stamp = ReduceStamp{}
) const
{
return reduce<
OpT,
MsgPtrT,
MsgT,
&MsgT::template msgHandler<
MsgT, OpT, collective::reduce::operators::ReduceCallback<MsgT>
>
>(msg, cb, stamp);
}

/**
* \brief Reduce over the objgroup instances on each node with a functor
Expand All @@ -172,9 +188,25 @@ struct Proxy {
typename FunctorT,
typename MsgPtrT,
typename MsgT = typename util::MsgPtrType<MsgPtrT>::MsgType,
ActiveTypedFnType<MsgT> *f = MsgT::template msgHandler<MsgT, OpT, FunctorT>
ActiveTypedFnType<MsgT> *f
>
PendingSendType reduce(MsgPtrT msg, ReduceStamp stamp = ReduceStamp{}) const;
template <
typename OpT = collective::None,
typename FunctorT,
typename MsgPtrT,
typename MsgT = typename util::MsgPtrType<MsgPtrT>::MsgType
>
PendingSendType reduce(MsgPtrT msg, ReduceStamp stamp = ReduceStamp{}) const
{
return reduce<
OpT,
FunctorT,
MsgPtrT,
MsgT,
&MsgT::template msgHandler<MsgT, OpT, FunctorT>
>(msg, stamp);
}

/**
* \brief Reduce over the objgroup instance on each node with target specified
Expand Down
Loading