blob: 0e1b2fba7d27be0fcabfd8f1f1e78e75be29c64c [file] [log] [blame]
// 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_UTILS_FILE_CACHE_H_
#define IREE_HAL_UTILS_FILE_CACHE_H_
#include "iree/base/api.h"
#include "iree/hal/api.h"
#include "iree/io/file_handle.h"
#ifdef __cplusplus
extern "C" {
#endif // __cplusplus
// An in-memory cache of file handles to devices and queues that have an open
// HAL file reference. A single file cache may be shared across multiple devices
// and/or multiple queues within individual devices.
//
// Thread-safe: multiple threads can access the cache concurrently.
typedef struct iree_hal_file_cache_t iree_hal_file_cache_t;
// Creates a new empty file cache.
IREE_API_EXPORT iree_status_t iree_hal_file_cache_create(
iree_allocator_t host_allocator, iree_hal_file_cache_t** out_file_cache);
// Retains the given |file_cache| for the caller.
IREE_API_EXPORT void iree_hal_file_cache_retain(
iree_hal_file_cache_t* file_cache);
// Releases the given |file_cache| from the caller.
IREE_API_EXPORT void iree_hal_file_cache_release(
iree_hal_file_cache_t* file_cache);
// Drops all cached file references.
// Note that resources may not be returned to the system immediately as others
// may still retain them. Avoid trimming in such cases as it can easily lead
// to multiple open files pointing at the same underlying resources.
IREE_API_EXPORT void iree_hal_file_cache_trim(
iree_hal_file_cache_t* file_cache);
// Looks up the file |handle| for use on |device| with any of the queues
// specified with |queue_affinity| and returns it retained in |out_file|.
// If the file has not been used on the device yet it will be imported and
// cached until the cache is trimmed.
IREE_API_EXPORT iree_status_t iree_hal_file_cache_lookup(
iree_hal_file_cache_t* file_cache, iree_hal_device_t* device,
iree_hal_queue_affinity_t queue_affinity, iree_hal_memory_access_t access,
iree_io_file_handle_t* handle, iree_hal_external_file_flags_t flags,
iree_hal_file_t** out_file);
#ifdef __cplusplus
} // extern "C"
#endif // __cplusplus
#endif // IREE_HAL_UTILS_FILE_CACHE_H_