Skip to content

Commit 303b41a

Browse files
authored
Intel(R) oneAPI Collective Communications Library (oneCCL) 2021.16 (#175)
1 parent 383d6c7 commit 303b41a

File tree

215 files changed

+15992
-5045
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

215 files changed

+15992
-5045
lines changed

CMakeLists.txt

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ option(ENABLE_SYCL_INTEROP_EVENT "Enable SYCL interop event support" TRUE)
6969
option(ENABLE_OFI_HMEM "Enable OFI HMEM support" TRUE)
7070
option(ENABLE_OFI_OOT_PROV "Enable OFI out-of-tree providers support" FALSE)
7171
option(ENABLE_ITT "Enable ITT profiling support" TRUE)
72+
option(ENABLE_PROFILING "Enable profiling support" TRUE)
7273
option(ENABLE_PMIX "Enable PMIX support" TRUE)
7374
option(ENABLE_UMF "Enable UMF support" TRUE)
7475
option(ENABLE_STUB_BACKEND "Enable stub backend" TRUE)
@@ -99,6 +100,7 @@ message(STATUS "Enable SYCL interop event support: ${ENABLE_SYCL_INTEROP_EVENT}"
99100
message(STATUS "Enable OFI HMEM support: ${ENABLE_OFI_HMEM}")
100101
message(STATUS "Enable OFI out-of-tree providers support: ${ENABLE_OFI_OOT_PROV}")
101102
message(STATUS "Enable ITT profiling support: ${ENABLE_ITT}")
103+
message(STATUS "Enable CCL profiling support: ${ENABLE_PROFILING}")
102104
message(STATUS "Enable PMIX support: ${ENABLE_PMIX}")
103105
message(STATUS "Enable UMF support: ${ENABLE_UMF}")
104106
message(STATUS "Enable DRM support: ${ENABLE_DRM}")
@@ -238,6 +240,12 @@ if (ENABLE_ITT)
238240
message(STATUS "Enable ITT profiling support")
239241
endif()
240242

243+
if (ENABLE_PROFILING)
244+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DCCL_ENABLE_PROFILING=1")
245+
message(STATUS "Enable CCL profiling support")
246+
endif()
247+
248+
241249
if (ENABLE_PMIX)
242250
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DCCL_ENABLE_PMIX=1")
243251
message(STATUS "Enable PMIX support")
@@ -334,8 +342,8 @@ file(GLOB spv_kernels "${PROJECT_SOURCE_DIR}/src/kernels/kernels.spv")
334342
endif()
335343

336344
set(CCL_MAJOR_VERSION "2021")
337-
set(CCL_MINOR_VERSION "15")
338-
set(CCL_UPDATE_VERSION "2")
345+
set(CCL_MINOR_VERSION "16")
346+
set(CCL_UPDATE_VERSION "0")
339347
set(CCL_PRODUCT_STATUS "Gold")
340348
string(TIMESTAMP CCL_PRODUCT_BUILD_DATE "%Y-%m-%dT %H:%M:%SZ")
341349
get_vcs_properties("git")

README.md

Lines changed: 20 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -23,63 +23,50 @@ oneCCL is governed by the [UXL Foundation](http://www.uxlfoundation.org) and is
2323
- [Explicit setup](#explicit-setup)
2424
- [Using oneCCL package from CMake](#using-oneccl-package-from-cmake)
2525
- [oneCCLConfig files generation](#onecclconfig-files-generation)
26+
- [Governance](#governance)
2627
- [Additional Resources](#additional-resources)
2728
- [Blog Posts](#blog-posts)
2829
- [Workshop Materials](#workshop-materials)
2930
- [Notice of Deprecation](#notice-of-deprecation)
31+
- [Contribute](#contribute)
32+
- [License](#license)
33+
- [Security Policy](#security-policy)
3034

3135
## Prerequisites
3236

3337
See [System Requirements](https://www.intel.com/content/www/us/en/developer/articles/system-requirements/oneapi-collective-communication-library-system-requirements.html) to learn about hardware and software requirements before getting started with oneCCL.
3438

3539
## Installation
3640

37-
General installation scenario:
38-
39-
```
40-
cd oneCCL
41-
mkdir build
42-
cd build
43-
cmake ..
44-
make -j install
45-
```
46-
47-
If you need a clean build, create a new build directory and invoke `cmake` within it.
48-
49-
You can also do the following during installation:
50-
- [Specify installation directory](INSTALL.md#specify-installation-directory)
51-
- [Specify the compiler](INSTALL.md#specify-the-compiler)
52-
- [Specify `SYCL` cross-platform abstraction level](INSTALL.md#specify-sycl-cross-platform-abstraction-level)
53-
- [Specify the build type](INSTALL.md#specify-the-build-type)
54-
- [Enable `make` verbose output](INSTALL.md#enable-make-verbose-output)
41+
See [install instructions](INSTALL.md) to familiarize yourself with the general installation scenario and the customizations you can make during the build process.
5542

5643
## Usage
5744

58-
### Launching Example Application
45+
### Launch an Example Application
5946

6047
Use the command:
6148
```bash
6249
$ source <install_dir>/env/setvars.sh
6350
$ mpirun -n 2 <install_dir>/examples/benchmark/benchmark
6451
```
6552

66-
#### Using external mpi
53+
#### Use External mpi
6754

68-
The ccl-bundled-mpi flag in vars.sh can take values "yes" or "no" to control if bundled Intel MPI should be used or not. Current default is "yes", which means that oneCCL temporarily overrides the mpi implementation in use.
55+
In the vars.sh file, the `ccl-bundled-mpi` flag can have values "yes" or "no" to control whether bundled Intel MPI should be used or not. Current default value is "yes", which means that oneCCL temporarily overrides the mpi implementation in use.
6956

70-
In order to suppress the behavior and use user-supplied or system-default mpi use the following command *instead* of sourcing `setvars.sh`:
57+
In order to suppress the behavior and use user-supplied or system-default mpi, use the following command *instead* of sourcing `setvars.sh`:
7158

7259
```bash
7360
$ source <install_dir>/env/vars.sh --ccl-bundled-mpi=no
7461
```
7562

76-
The mpi implementation will not be overridden. Please note that, in this case, user needs to assure the system finds all required mpi-related binaries.
63+
The mpi implementation will not be overridden. In this case, you need to ensure that the system finds all required mpi-related binaries.
7764

78-
### Setting workers affinity
65+
### Set Workers Affinity
7966

8067
There are two ways to set worker threads (workers) affinity: [automatically](#setting-affinity-automatically) and [explicitly](#setting-affinity-explicitly).
8168

82-
#### Automatic setup
69+
#### Automatic Setup
8370

8471
1. Set the `CCL_WORKER_COUNT` environment variable with the desired number of workers per process.
8572
2. Set the `CCL_WORKER_AFFINITY` environment variable with the value `auto`.
@@ -91,13 +78,13 @@ export CCL_WORKER_AFFINITY=auto
9178
```
9279
With the variables above, oneCCL will create four workers per process and the pinning will depend from process launcher.
9380

94-
If an application has been launched using `mpirun` that is provided by oneCCL distribution package then workers will be automatically pinned to the last four cores available for the launched process. The exact IDs of CPU cores can be controlled by `mpirun` parameters.
81+
If an application is launched using `mpirun` that is provided by oneCCL distribution package, then workers will be automatically pinned to the last four cores available for the launched process. The exact IDs of CPU cores can be controlled by the `mpirun` parameters.
9582

9683
Otherwise, workers will be automatically pinned to the last four cores available on the node.
9784

9885
---
9986

100-
#### Explicit setup
87+
#### Explicit Setup
10188

10289
1. Set the `CCL_WORKER_COUNT` environment variable with the desired number of workers per process.
10390
2. Set the `CCL_WORKER_AFFINITY` environment variable with the IDs of cores to pin local workers.
@@ -109,11 +96,11 @@ export CCL_WORKER_AFFINITY=3,4,5,6
10996
```
11097
With the variables above, oneCCL will create four workers per process and pin them to the cores with the IDs of 3, 4, 5, and 6 respectively.
11198

112-
### Using oneCCL package from CMake
99+
### Use oneCCL package from CMake
113100

114101
`oneCCLConfig.cmake` and `oneCCLConfigVersion.cmake` are included into oneCCL distribution.
115102

116-
With these files, you can integrate oneCCL into a user project with the [find_package](https://cmake.org/cmake/help/latest/command/find_package.html) command. Successful invocation of `find_package(oneCCL <options>)` creates imported target `oneCCL` that can be passed to the [target_link_libraries](https://cmake.org/cmake/help/latest/command/target_link_libraries.html) command.
103+
With these files, you can integrate oneCCL into a project with the [find_package](https://cmake.org/cmake/help/latest/command/find_package.html) command. Successful invocation of `find_package(oneCCL <options>)` creates imported target `oneCCL` that can be passed to the [target_link_libraries](https://cmake.org/cmake/help/latest/command/target_link_libraries.html) command.
117104

118105
For example:
119106

@@ -127,7 +114,7 @@ find_package(oneCCL REQUIRED)
127114
# Connect oneCCL to foo
128115
target_link_libraries(foo oneCCL)
129116
```
130-
#### oneCCLConfig files generation
117+
#### oneCCLConfig Files Generation
131118

132119
To generate oneCCLConfig files for oneCCL package, use the provided [`cmake/scripts/config_generation.cmake`](/cmake/scripts/config_generation.cmake) file:
133120

@@ -137,14 +124,13 @@ cmake [-DOUTPUT_DIR=<output_dir>] -P cmake/script/config_generation.cmake
137124

138125
### OS File Descriptors
139126

140-
oneCCL uses [Level Zero IPC handles](https://spec.oneapi.io/level-zero/latest/core/PROG.html#memory-1) so that a process can access a memory allocation done by a different process.
141-
However, these IPC handles consume OS File Descriptors (FDs). As a result, to avoid running out of OS FDs, we recommend to increase the default limit of FDs in the system for applications running with oneCCL and GPU buffers.
127+
oneCCL uses [Level Zero IPC handles](https://spec.oneapi.io/level-zero/latest/core/PROG.html#memory-1) so that a process can access a memory allocation done by a different process. However, these IPC handles consume OS File Descriptors (FDs). To avoid running out of OS FDs, we recommend to increase the default limit of FDs in the system for applications running with oneCCL and GPU buffers.
142128

143-
The number of FDs required is application-dependent, but the recommended limit is ``1048575``. This value can be modified with the ulimit command.
129+
The number of FDs required is application-dependent, but the recommended limit is ``1048575``. This value can be modified with the `ulimit` command.
144130

145131
## Governance
146132

147-
The oneCCL project is governed by the UXL Foundation and you can get involved in this project in multiple ways. It is possible to join the [Special Interest Groups (SIG)](https://github.com/uxlfoundation/foundation) meetings where the group discuss and demonstrates work using the foundation projects. Members can also join the Open Source and Specification Working Group meetings.
133+
The oneCCL project is governed by the UXL Foundation and you can get involved in this project in multiple ways. It is possible to join the [Special Interest Groups (SIG)](https://github.com/uxlfoundation/foundation) meetings where the group discusses and demonstrates work using the foundation projects. Members can also join the Open Source and Specification Working Group meetings.
148134

149135
You can also join the mailing lists for the [UXL Foundation](https://lists.uxlfoundation.org/g/main/subgroups) to be informed of when meetings are happening and receive the latest information and discussions.
150136

cmake/helpers.cmake

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,18 @@ function(set_sycl_env)
142142
set(CCL_SYCL_VEC_SUPPORT_FP16 ON)
143143
endif()
144144

145+
if (CCL_ENABLE_SYCL)
146+
if (CCL_ENABLE_ARCA)
147+
add_definitions(-DCCL_SYCL_ENABLE_ARCA)
148+
message(STATUS "Enable ARC A-series LL256 support")
149+
elseif (CCL_ENABLE_ARCB)
150+
add_definitions(-DCCL_SYCL_ENABLE_ARCB)
151+
message(STATUS "Enable ARC B-series LL256 support")
152+
else()
153+
add_definitions(-DCCL_SYCL_ENABLE_PVC)
154+
message(STATUS "Enable PVC LL256 support")
155+
endif()
156+
endif()
145157
endfunction(set_sycl_env)
146158

147159
function(set_avx_env)

deps/itt/lib64/libittnotify.a

2.24 KB
Binary file not shown.

0 commit comments

Comments
 (0)