15cd2aff3c
Introducing 3 new APIs:
ncclResult_t ncclGather(const void* sendbuff, void* recvbuff, size_t sendcount,
ncclDataType_t datatype, int root, ncclComm_t comm, hipStream_t stream);
ncclResult_t ncclScatter(const void* sendbuff, void* recvbuff,
size_t recvcount, ncclDataType_t datatype, int root, ncclComm_t comm,
hipStream_t stream);
ncclResult_t ncclAllToAll(const void* sendbuff, void* recvbuff, size_t count,
ncclDataType_t datatype, ncclComm_t comm, hipStream_t stream);
Only out of place operation is supported.
Preprocessor symbol RCCL_GATHER_SCATTER=1 indicates API availibility.
By default the APIs launche RCCL kernel implementation, which can be disabled by
RCCL_ALLTOALL_KERNEL_DISABLE=1. Then the APIs use wrapper around ncclSend and ncclRecv.
[ROCm/rccl commit: e80e29573c]
59 行
1.3 KiB
C
59 行
1.3 KiB
C
/*************************************************************************
|
|
* Copyright (c) 2019-2020, NVIDIA CORPORATION. All rights reserved.
|
|
* Modifications Copyright (c) 2019-2020 Advanced Micro Devices, Inc. All rights reserved.
|
|
*
|
|
* See LICENSE.txt for license information
|
|
************************************************************************/
|
|
|
|
#ifndef NCCL_INFO_H_
|
|
#define NCCL_INFO_H_
|
|
|
|
#include "nccl.h"
|
|
#include "devcomm.h"
|
|
|
|
typedef enum {
|
|
ncclPatternRing,
|
|
ncclPatternRingTwice,
|
|
ncclPatternPipelineFrom,
|
|
ncclPatternPipelineTo,
|
|
ncclPatternTreeUp,
|
|
ncclPatternTreeDown,
|
|
ncclPatternTreeUpDown,
|
|
ncclPatternCollTreeUp,
|
|
ncclPatternCollTreeDown,
|
|
ncclPatternAll
|
|
} ncclPattern_t;
|
|
|
|
// Used to pass NCCL call information between functions
|
|
struct ncclInfo {
|
|
ncclFunc_t coll;
|
|
const char* opName;
|
|
// NCCL Coll Args
|
|
const void* sendbuff;
|
|
void* recvbuff;
|
|
size_t count;
|
|
ncclDataType_t datatype;
|
|
ncclRedOp_t op;
|
|
int root;
|
|
ncclComm_t comm;
|
|
hipStream_t stream;
|
|
// Algorithm details
|
|
int chunkSteps;
|
|
int sliceSteps;
|
|
// Computed later
|
|
int algorithm;
|
|
int protocol;
|
|
ncclPattern_t pattern;
|
|
int nChannels;
|
|
int nThreads;
|
|
size_t nBytes;
|
|
int nstepsPerLoop;
|
|
int nchunksPerLoop;
|
|
ssize_t sendbytes;
|
|
ssize_t recvbytes;
|
|
uint32_t delta;
|
|
int channelId;
|
|
};
|
|
|
|
#endif
|