bootstrap_utils.h 2.13 KB
Newer Older
lishen's avatar
lishen committed
1
2
#pragma once

3
4
#include <map>
#include <string>
5
6
#include <cstddef>
#include <vector>
lishen's avatar
lishen committed
7
#include "base.h"
8
9
10
#include "topo_utils.h"
#include "comm.h"
#include "rocm_smi_wrap.h"
lishen's avatar
lishen committed
11
12
13
14
15
16

namespace sccl {
namespace hardware {
namespace topology {
namespace bootstrap {

17
18
typedef union net::net_socket::scclSocketAddress scclSocketAddress_t;
typedef struct net::net_socket::scclSocket scclSocket_t;
19
typedef net::scclNet_t scclNet_t;
lishen's avatar
lishen committed
20

21
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
22
// 用于初始化时广播0号rank的地址信息
23
typedef struct BootstrapHandle {
24
    uint64_t magic = 0;       // 随机码,用于socket通信
lishen's avatar
lishen committed
25
    scclSocketAddress_t addr; // 地址,用于网络通信
26
} BootstrapHandle_t;
lishen's avatar
lishen committed
27

28
#define SCCL_UNIQUE_ID_BYTES (40) // sizeof(BootstrapHandle_t)
29
30
31
32
33
typedef struct {
    char internal[SCCL_UNIQUE_ID_BYTES];
} scclUniqueId;

// 仅用于初始化的函数bootstrapCreateRoot,用于传递detach线程的参数
34
typedef struct bootstrapRootArgs {
35
36
    uint64_t magic;
    scclSocket_t* listenSock = nullptr; // 根节点的监听
37
} bootstrapRootArgs_t;
38
39

// 用于初始建立连接阶段,0号rank之外的进程向其传递的信息
40
typedef struct BootstrapNodeBasic {
41
    int rank;
42
43
44
    int nRanks;        // 进程的总数量
    uint64_t hostHash; // 用于区分host的CPU编号
    scclSocket_t sock; // 各个进程的监听套接字地址,用于网络通信
45
} BootstrapNodeBasic_t;
lishen's avatar
lishen committed
46

47
48
49
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 获取主机唯一标识的哈希值,该哈希值在裸机和容器实例中都是唯一的
uint64_t getHostHash(void);
lishen's avatar
lishen committed
50

51
52
53
54
55
56
57
58
59
60
61
62
// 获取当前进程的唯一哈希标识符
uint64_t getPidHash(void);

// 从/dev/urandom设备获取随机数据填充缓冲区
scclResult_t getRandomData(void* buffer, size_t bytes);

// 获取指定CUDA设备的PCI总线ID并转换为64位整数
scclResult_t getBusId(int hipDev, int64_t* busId);

// 获取当前HIP设备的计算能力版本号
int scclCudaCompCap(void);

lishen's avatar
lishen committed
63
64
65
66
} // namespace bootstrap
} // namespace topology
} // namespace hardware
} // namespace sccl