compute-runtime/level_zero/core/source/fabric/fabric.h

71 lines
2.4 KiB
C++

/*
* Copyright (C) 2022 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
*/
#pragma once
#include "level_zero/core/source/fabric/fabric_device_interface.h"
#include <level_zero/ze_api.h>
#include <map>
#include <memory>
#include <vector>
struct _ze_fabric_vertex_handle_t {};
struct _ze_fabric_edge_handle_t {};
namespace L0 {
struct Device;
struct DriverHandle;
struct FabricVertex : _ze_fabric_vertex_handle_t {
public:
static FabricVertex *createFromDevice(Device *device);
virtual ~FabricVertex();
ze_result_t getSubVertices(uint32_t *pCount, ze_fabric_vertex_handle_t *phSubvertices);
ze_result_t getProperties(ze_fabric_vertex_exp_properties_t *pVertexProperties) const;
ze_result_t getDevice(ze_device_handle_t *phDevice) const;
static FabricVertex *fromHandle(ze_fabric_vertex_handle_t handle) { return static_cast<FabricVertex *>(handle); }
inline ze_fabric_vertex_handle_t toHandle() { return this; }
ze_result_t edgeGet(ze_fabric_vertex_handle_t hVertexB,
uint32_t *pCount, ze_fabric_edge_handle_t *phEdges);
std::map<FabricDeviceInterface::Type, std::unique_ptr<FabricDeviceInterface>> pFabricDeviceInterfaces;
std::vector<FabricVertex *> subVertices = {};
struct Device *device = nullptr;
private:
ze_fabric_vertex_exp_properties_t properties = {};
};
struct FabricEdge : _ze_fabric_edge_handle_t {
public:
virtual ~FabricEdge() = default;
static void createEdgesFromVertices(const std::vector<FabricVertex *> &vertices, std::vector<FabricEdge *> &edges);
static FabricEdge *create(FabricVertex *vertexA, FabricVertex *vertexB, ze_fabric_edge_exp_properties_t &properties);
ze_result_t getProperties(ze_fabric_edge_exp_properties_t *pEdgeProperties) const {
*pEdgeProperties = properties;
return ZE_RESULT_SUCCESS;
}
ze_result_t getVertices(ze_fabric_vertex_handle_t *phVertexA,
ze_fabric_vertex_handle_t *phVertexB) {
*phVertexA = vertexA->toHandle();
*phVertexB = vertexB->toHandle();
return ZE_RESULT_SUCCESS;
}
static FabricEdge *fromHandle(ze_fabric_edge_handle_t handle) { return static_cast<FabricEdge *>(handle); }
inline ze_fabric_edge_handle_t toHandle() { return this; }
ze_fabric_edge_exp_properties_t properties = {};
FabricVertex *vertexA = nullptr;
FabricVertex *vertexB = nullptr;
};
} // namespace L0