Add support for RCCL tracing (#1047)
* [Draft]: Add support for RCCL tracing Address comments * [Draft]: Add support for RCCL tracing Address PR comments, changes from RCCL upstream * Add RCCL library table registration Working on adding support to rocprofiler-register * Support compilation w/o <rccl/amd_detail/api_trace.h> - dummy api_trace.h header - return ROCPROFILER_STATUS_ERROR_NOT_IMPLEMENTED when RCCL does not have api_trace.h header * RCCL API tracing tool support - add to rocprofv3 - add to json-tool --------- Co-authored-by: Jonathan R. Madsen <jonathanrmadsen@gmail.com>
This commit is contained in:
@@ -0,0 +1,308 @@
|
||||
// MIT License
|
||||
//
|
||||
// Copyright (c) 2023 Advanced Micro Devices, Inc. All rights reserved.
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <rocprofiler-sdk/defines.h>
|
||||
#include <rocprofiler-sdk/version.h>
|
||||
|
||||
#include <rccl/rccl.h>
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
ROCPROFILER_EXTERN_C_INIT
|
||||
|
||||
// Empty struct has a size of 0 in C but size of 1 in C++.
|
||||
// This struct is added to the union members which represent
|
||||
// functions with no arguments to ensure ABI compatibility
|
||||
typedef struct rocprofiler_rccl_api_no_args
|
||||
{
|
||||
char empty;
|
||||
} rocprofiler_rccl_api_no_args;
|
||||
|
||||
typedef union rocprofiler_rccl_api_retval_t
|
||||
{
|
||||
int32_t ncclResult_t_retval;
|
||||
const char* const_charp_retval;
|
||||
} rocprofiler_rccl_api_retval_t;
|
||||
|
||||
typedef union rocprofiler_rccl_api_args_t
|
||||
{
|
||||
struct
|
||||
{
|
||||
const void* sendbuff;
|
||||
void* recvbuff;
|
||||
size_t sendcount;
|
||||
ncclDataType_t datatype;
|
||||
ncclComm_t comm;
|
||||
hipStream_t stream;
|
||||
} ncclAllGather;
|
||||
struct
|
||||
{
|
||||
const void* sendbuff;
|
||||
void* recvbuff;
|
||||
size_t count;
|
||||
ncclDataType_t datatype;
|
||||
ncclRedOp_t op;
|
||||
struct ncclComm* comm;
|
||||
hipStream_t stream;
|
||||
} ncclAllReduce;
|
||||
struct
|
||||
{
|
||||
const void* sendbuff;
|
||||
void* recvbuff;
|
||||
size_t count;
|
||||
ncclDataType_t datatype;
|
||||
ncclComm_t comm;
|
||||
hipStream_t stream;
|
||||
} ncclAllToAll;
|
||||
struct
|
||||
{
|
||||
const void* sendbuff;
|
||||
const size_t* sendcounts;
|
||||
const size_t* sdispls;
|
||||
void* recvbuff;
|
||||
const size_t* recvcounts;
|
||||
const size_t* rdispls;
|
||||
ncclDataType_t datatype;
|
||||
ncclComm_t comm;
|
||||
hipStream_t stream;
|
||||
} ncclAllToAllv;
|
||||
struct
|
||||
{
|
||||
const void* sendbuff;
|
||||
void* recvbuff;
|
||||
size_t count;
|
||||
ncclDataType_t datatype;
|
||||
int root;
|
||||
ncclComm_t comm;
|
||||
hipStream_t stream;
|
||||
} ncclBroadcast;
|
||||
struct
|
||||
{
|
||||
const void* sendbuff;
|
||||
void* recvbuff;
|
||||
size_t sendcount;
|
||||
ncclDataType_t datatype;
|
||||
int root;
|
||||
ncclComm_t comm;
|
||||
hipStream_t stream;
|
||||
} ncclGather;
|
||||
struct
|
||||
{
|
||||
const void* sendbuff;
|
||||
void* recvbuff;
|
||||
size_t count;
|
||||
ncclDataType_t datatype;
|
||||
ncclRedOp_t op;
|
||||
int root;
|
||||
ncclComm_t comm;
|
||||
hipStream_t stream;
|
||||
} ncclReduce;
|
||||
struct
|
||||
{
|
||||
const void* sendbuff;
|
||||
void* recvbuff;
|
||||
size_t recvcount;
|
||||
ncclDataType_t datatype;
|
||||
ncclRedOp_t op;
|
||||
struct ncclComm* comm;
|
||||
hipStream_t stream;
|
||||
} ncclReduceScatter;
|
||||
struct
|
||||
{
|
||||
const void* sendbuff;
|
||||
void* recvbuff;
|
||||
size_t recvcount;
|
||||
ncclDataType_t datatype;
|
||||
int root;
|
||||
ncclComm_t comm;
|
||||
hipStream_t stream;
|
||||
} ncclScatter;
|
||||
struct
|
||||
{
|
||||
const void* sendbuff;
|
||||
size_t count;
|
||||
ncclDataType_t datatype;
|
||||
int peer;
|
||||
ncclComm_t comm;
|
||||
hipStream_t stream;
|
||||
} ncclSend;
|
||||
struct
|
||||
{
|
||||
void* recvbuff;
|
||||
size_t count;
|
||||
ncclDataType_t datatype;
|
||||
int peer;
|
||||
ncclComm_t comm;
|
||||
hipStream_t stream;
|
||||
} ncclRecv;
|
||||
struct
|
||||
{
|
||||
ncclRedOp_t* op;
|
||||
void* scalar;
|
||||
ncclDataType_t datatype;
|
||||
ncclScalarResidence_t residence;
|
||||
ncclComm_t comm;
|
||||
} ncclRedOpCreatePreMulSum;
|
||||
struct
|
||||
{
|
||||
ncclRedOp_t op;
|
||||
ncclComm_t comm;
|
||||
} ncclRedOpDestroy;
|
||||
struct
|
||||
{
|
||||
rocprofiler_rccl_api_no_args no_args;
|
||||
} ncclGroupStart;
|
||||
struct
|
||||
{
|
||||
rocprofiler_rccl_api_no_args no_args;
|
||||
} ncclGroupEnd;
|
||||
struct
|
||||
{
|
||||
int* version;
|
||||
} ncclGetVersion;
|
||||
struct
|
||||
{
|
||||
ncclUniqueId* out;
|
||||
} ncclGetUniqueId;
|
||||
struct
|
||||
{
|
||||
ncclComm_t* newcomm;
|
||||
int nranks;
|
||||
ncclUniqueId commId;
|
||||
int myrank;
|
||||
} ncclCommInitRank;
|
||||
struct
|
||||
{
|
||||
ncclComm_t* comms;
|
||||
int ndev;
|
||||
const int* devlist;
|
||||
} ncclCommInitAll;
|
||||
struct
|
||||
{
|
||||
ncclComm_t* comm;
|
||||
int nranks;
|
||||
ncclUniqueId commId;
|
||||
int myrank;
|
||||
ncclConfig_t* config;
|
||||
} ncclCommInitRankConfig;
|
||||
struct
|
||||
{
|
||||
ncclComm_t comm;
|
||||
} ncclCommFinalize;
|
||||
struct
|
||||
{
|
||||
ncclComm_t comm;
|
||||
} ncclCommDestroy;
|
||||
struct
|
||||
{
|
||||
ncclComm_t comm;
|
||||
} ncclCommAbort;
|
||||
struct
|
||||
{
|
||||
ncclComm_t comm;
|
||||
int color;
|
||||
int key;
|
||||
ncclComm_t* newcomm;
|
||||
ncclConfig_t* config;
|
||||
} ncclCommSplit;
|
||||
struct
|
||||
{
|
||||
ncclResult_t code;
|
||||
} ncclGetErrorString;
|
||||
struct
|
||||
{
|
||||
ncclComm_t comm;
|
||||
} ncclGetLastError;
|
||||
struct
|
||||
{
|
||||
ncclComm_t comm;
|
||||
ncclResult_t* asyncError;
|
||||
} ncclCommGetAsyncError;
|
||||
struct
|
||||
{
|
||||
ncclComm_t comm;
|
||||
int* count;
|
||||
} ncclCommCount;
|
||||
struct
|
||||
{
|
||||
ncclComm_t comm;
|
||||
int* devid;
|
||||
} ncclCommCuDevice;
|
||||
struct
|
||||
{
|
||||
ncclComm_t comm;
|
||||
int* rank;
|
||||
} ncclCommUserRank;
|
||||
struct
|
||||
{
|
||||
void** ptr;
|
||||
size_t size;
|
||||
} ncclMemAlloc;
|
||||
struct
|
||||
{
|
||||
void* ptr;
|
||||
} ncclMemFree;
|
||||
struct
|
||||
{
|
||||
const char* mscclAlgoFilePath;
|
||||
mscclAlgoHandle_t* mscclAlgoHandle;
|
||||
int rank;
|
||||
} mscclLoadAlgo;
|
||||
struct
|
||||
{
|
||||
const void* sendBuff;
|
||||
const size_t* sendCounts;
|
||||
const size_t* sDisPls;
|
||||
void* recvBuff;
|
||||
const size_t* recvCounts;
|
||||
const size_t* rDisPls;
|
||||
size_t count;
|
||||
ncclDataType_t dataType;
|
||||
int root;
|
||||
int peer;
|
||||
ncclRedOp_t op;
|
||||
mscclAlgoHandle_t mscclAlgoHandle;
|
||||
ncclComm_t comm;
|
||||
hipStream_t stream;
|
||||
} mscclRunAlgo;
|
||||
struct
|
||||
{
|
||||
mscclAlgoHandle_t mscclAlgoHandle;
|
||||
} mscclUnloadAlgo;
|
||||
struct
|
||||
{
|
||||
ncclComm_t comm;
|
||||
void* buff;
|
||||
size_t size;
|
||||
void** handle;
|
||||
} ncclCommRegister;
|
||||
struct
|
||||
{
|
||||
ncclComm_t comm;
|
||||
void* handle;
|
||||
} ncclCommDeregister;
|
||||
|
||||
} rocprofiler_rccl_api_args_t;
|
||||
|
||||
ROCPROFILER_EXTERN_C_FINI
|
||||
Reference in New Issue
Block a user