blob: ef9f6de7a59ec55709d0342a2931ce5b35e710ed [file]
// Copyright 2023 The IREE Authors
//
// Licensed under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
#ifndef IREE_HAL_CHANNEL_PROVIDER_H_
#define IREE_HAL_CHANNEL_PROVIDER_H_
#include "iree/base/api.h"
#include "iree/hal/channel.h"
#include "iree/hal/resource.h"
#ifdef __cplusplus
extern "C" {
#endif // __cplusplus
typedef struct iree_hal_device_t iree_hal_device_t;
//===----------------------------------------------------------------------===//
// iree_hal_channel_provider_t
//===----------------------------------------------------------------------===//
// Channel creation and configuration provider.
// Hosting applications can use this to either configure or completely replace
// the default device channel creation logic.
typedef struct iree_hal_channel_provider_t iree_hal_channel_provider_t;
// Retains the given |channel_provider| for the caller.
IREE_API_EXPORT void iree_hal_channel_provider_retain(
iree_hal_channel_provider_t* channel_provider);
// Releases the given |channel_provider| from the caller.
IREE_API_EXPORT void iree_hal_channel_provider_release(
iree_hal_channel_provider_t* channel_provider);
// Returns the rank the process represents as a participant in the default
// collective group in `[0, count)` and the total participant count.
// May return IREE_HAL_CHANNEL_RANK_DEFAULT/IREE_HAL_CHANNEL_COUNT_DEFAULT if
// the provider cannot service the request.
IREE_API_EXPORT iree_status_t
iree_hal_channel_provider_query_default_rank_and_count(
iree_hal_channel_provider_t* channel_provider, int32_t* out_rank,
int32_t* out_count);
// Exchanges the default channel ID used during initial channel configuration.
// The caller will provide adequate storage in |id| and the implementation
// should do what it needs (ID exchange, etc). The default root participant will
// provide an initialized ID and all others will expect that ID to be populated
// upon return.
IREE_API_EXPORT iree_status_t iree_hal_channel_provider_exchange_default_id(
iree_hal_channel_provider_t* channel_provider, iree_byte_span_t id);
//===----------------------------------------------------------------------===//
// iree_hal_channel_provider_t implementation details
//===----------------------------------------------------------------------===//
typedef struct iree_hal_channel_provider_vtable_t {
void(IREE_API_PTR* destroy)(iree_hal_channel_provider_t* channel_provider);
iree_status_t(IREE_API_PTR* query_default_rank_and_count)(
iree_hal_channel_provider_t* channel_provider, int32_t* out_rank,
int32_t* out_count);
iree_status_t(IREE_API_PTR* exchange_default_id)(
iree_hal_channel_provider_t* channel_provider, iree_byte_span_t id);
} iree_hal_channel_provider_vtable_t;
IREE_HAL_ASSERT_VTABLE_LAYOUT(iree_hal_channel_provider_vtable_t);
IREE_API_EXPORT void iree_hal_channel_provider_destroy(
iree_hal_channel_provider_t* channel_provider);
#ifdef __cplusplus
} // extern "C"
#endif // __cplusplus
#endif // IREE_HAL_CHANNEL_PROVIDER_H_