Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Adding iree_hal_device_queue_barrier helper and fixing pool enum. #10141

Merged
merged 2 commits into from
Aug 19, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 3 additions & 4 deletions experimental/rocm/rocm_device.c
Original file line number Diff line number Diff line change
Expand Up @@ -258,7 +258,7 @@ static iree_status_t iree_hal_rocm_device_queue_alloca(
iree_hal_device_t* base_device, iree_hal_queue_affinity_t queue_affinity,
const iree_hal_semaphore_list_t wait_semaphore_list,
const iree_hal_semaphore_list_t signal_semaphore_list,
iree_hal_allocator_pool_id_t pool_id, iree_hal_buffer_params_t params,
iree_hal_allocator_pool_t pool, iree_hal_buffer_params_t params,
iree_device_size_t allocation_size,
iree_hal_buffer_t** IREE_RESTRICT out_buffer) {
// TODO: queue-ordered allocations.
Expand All @@ -277,9 +277,8 @@ static iree_status_t iree_hal_rocm_device_queue_dealloca(
const iree_hal_semaphore_list_t signal_semaphore_list,
iree_hal_buffer_t* buffer) {
// TODO: queue-ordered allocations.
IREE_RETURN_IF_ERROR(iree_hal_semaphore_list_wait(wait_semaphore_list,
iree_infinite_timeout()));
IREE_RETURN_IF_ERROR(iree_hal_semaphore_list_signal(signal_semaphore_list));
IREE_RETURN_IF_ERROR(iree_hal_device_queue_barrier(
base_device, queue_affinity, wait_semaphore_list, signal_semaphore_list));
return iree_ok_status();
}

Expand Down
8 changes: 7 additions & 1 deletion runtime/src/iree/hal/allocator.h
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,13 @@ typedef uint64_t iree_hal_queue_affinity_t;
#define IREE_HAL_QUEUE_AFFINITY_ANY ((iree_hal_queue_affinity_t)(-1))

// TBD: placeholder for reserving unique pools.
typedef uint32_t iree_hal_allocator_pool_id_t;
// The intent is that semantically meaningful pools can be defined like
// "transient" "variable" "constant" "external" (matching what we use in the
// compiler) such that allocators don't need to infer based on usage flags.
enum iree_hal_allocator_pool_bits_t {
IREE_HAL_ALLOCATOR_POOL_DEFAULT = 0u,
};
typedef uint32_t iree_hal_allocator_pool_t;

// Parameters defining how a buffer should be allocated.
//
Expand Down
19 changes: 16 additions & 3 deletions runtime/src/iree/hal/device.c
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,7 @@ IREE_API_EXPORT iree_status_t iree_hal_device_queue_alloca(
iree_hal_device_t* device, iree_hal_queue_affinity_t queue_affinity,
const iree_hal_semaphore_list_t wait_semaphore_list,
const iree_hal_semaphore_list_t signal_semaphore_list,
iree_hal_allocator_pool_id_t pool_id, iree_hal_buffer_params_t params,
iree_hal_allocator_pool_t pool, iree_hal_buffer_params_t params,
iree_device_size_t allocation_size,
iree_hal_buffer_t** IREE_RESTRICT out_buffer) {
IREE_ASSERT_ARGUMENT(device);
Expand All @@ -170,8 +170,8 @@ IREE_API_EXPORT iree_status_t iree_hal_device_queue_alloca(
*out_buffer = NULL;
IREE_TRACE_ZONE_BEGIN(z0);
iree_status_t status = _VTABLE_DISPATCH(device, queue_alloca)(
device, queue_affinity, wait_semaphore_list, signal_semaphore_list,
pool_id, params, allocation_size, out_buffer);
device, queue_affinity, wait_semaphore_list, signal_semaphore_list, pool,
params, allocation_size, out_buffer);
IREE_TRACE_ZONE_END(z0);
return status;
}
Expand Down Expand Up @@ -242,6 +242,19 @@ IREE_API_EXPORT iree_status_t iree_hal_device_queue_execute(
return status;
}

IREE_API_EXPORT iree_status_t iree_hal_device_queue_barrier(
iree_hal_device_t* device, iree_hal_queue_affinity_t queue_affinity,
const iree_hal_semaphore_list_t wait_semaphore_list,
const iree_hal_semaphore_list_t signal_semaphore_list) {
IREE_ASSERT_ARGUMENT(device);
IREE_TRACE_ZONE_BEGIN(z0);
iree_status_t status =
iree_hal_device_queue_execute(device, queue_affinity, wait_semaphore_list,
signal_semaphore_list, 0, NULL);
IREE_TRACE_ZONE_END(z0);
return status;
}

IREE_API_EXPORT iree_status_t iree_hal_device_queue_flush(
iree_hal_device_t* device, iree_hal_queue_affinity_t queue_affinity) {
IREE_ASSERT_ARGUMENT(device);
Expand Down
12 changes: 10 additions & 2 deletions runtime/src/iree/hal/device.h
Original file line number Diff line number Diff line change
Expand Up @@ -308,7 +308,7 @@ IREE_API_EXPORT iree_status_t iree_hal_device_queue_alloca(
iree_hal_device_t* device, iree_hal_queue_affinity_t queue_affinity,
const iree_hal_semaphore_list_t wait_semaphore_list,
const iree_hal_semaphore_list_t signal_semaphore_list,
iree_hal_allocator_pool_id_t pool_id, iree_hal_buffer_params_t params,
iree_hal_allocator_pool_t pool, iree_hal_buffer_params_t params,
iree_device_size_t allocation_size,
iree_hal_buffer_t** IREE_RESTRICT out_buffer);

Expand Down Expand Up @@ -347,6 +347,14 @@ IREE_API_EXPORT iree_status_t iree_hal_device_queue_execute(
iree_host_size_t command_buffer_count,
iree_hal_command_buffer_t* const* command_buffers);

// Enqueues a barrier waiting for |wait_semaphore_list| and signaling
// |signal_semaphore_list| when reached.
// Equivalent to iree_hal_device_queue_execute with no command buffers.
IREE_API_EXPORT iree_status_t iree_hal_device_queue_barrier(
iree_hal_device_t* device, iree_hal_queue_affinity_t queue_affinity,
const iree_hal_semaphore_list_t wait_semaphore_list,
const iree_hal_semaphore_list_t signal_semaphore_list);

// Flushes any locally-pending submissions in the queue.
// When submitting many queue operations this can be used to eagerly flush
// earlier submissions while later ones are still being constructed.
Expand Down Expand Up @@ -445,7 +453,7 @@ typedef struct iree_hal_device_vtable_t {
iree_hal_device_t* device, iree_hal_queue_affinity_t queue_affinity,
const iree_hal_semaphore_list_t wait_semaphore_list,
const iree_hal_semaphore_list_t signal_semaphore_list,
iree_hal_allocator_pool_id_t pool_id, iree_hal_buffer_params_t params,
iree_hal_allocator_pool_t pool, iree_hal_buffer_params_t params,
iree_device_size_t allocation_size,
iree_hal_buffer_t** IREE_RESTRICT out_buffer);

Expand Down
7 changes: 3 additions & 4 deletions runtime/src/iree/hal/drivers/cuda/cuda_device.c
Original file line number Diff line number Diff line change
Expand Up @@ -333,7 +333,7 @@ static iree_status_t iree_hal_cuda_device_queue_alloca(
iree_hal_device_t* base_device, iree_hal_queue_affinity_t queue_affinity,
const iree_hal_semaphore_list_t wait_semaphore_list,
const iree_hal_semaphore_list_t signal_semaphore_list,
iree_hal_allocator_pool_id_t pool_id, iree_hal_buffer_params_t params,
iree_hal_allocator_pool_t pool, iree_hal_buffer_params_t params,
iree_device_size_t allocation_size,
iree_hal_buffer_t** IREE_RESTRICT out_buffer) {
// TODO(benvanik): queue-ordered allocations.
Expand All @@ -352,9 +352,8 @@ static iree_status_t iree_hal_cuda_device_queue_dealloca(
const iree_hal_semaphore_list_t signal_semaphore_list,
iree_hal_buffer_t* buffer) {
// TODO(benvanik): queue-ordered allocations.
IREE_RETURN_IF_ERROR(iree_hal_semaphore_list_wait(wait_semaphore_list,
iree_infinite_timeout()));
IREE_RETURN_IF_ERROR(iree_hal_semaphore_list_signal(signal_semaphore_list));
IREE_RETURN_IF_ERROR(iree_hal_device_queue_barrier(
base_device, queue_affinity, wait_semaphore_list, signal_semaphore_list));
return iree_ok_status();
}

Expand Down
7 changes: 3 additions & 4 deletions runtime/src/iree/hal/drivers/local_sync/sync_device.c
Original file line number Diff line number Diff line change
Expand Up @@ -273,7 +273,7 @@ static iree_status_t iree_hal_sync_device_queue_alloca(
iree_hal_device_t* base_device, iree_hal_queue_affinity_t queue_affinity,
const iree_hal_semaphore_list_t wait_semaphore_list,
const iree_hal_semaphore_list_t signal_semaphore_list,
iree_hal_allocator_pool_id_t pool_id, iree_hal_buffer_params_t params,
iree_hal_allocator_pool_t pool, iree_hal_buffer_params_t params,
iree_device_size_t allocation_size,
iree_hal_buffer_t** IREE_RESTRICT out_buffer) {
// TODO(benvanik): queue-ordered allocations.
Expand All @@ -292,9 +292,8 @@ static iree_status_t iree_hal_sync_device_queue_dealloca(
const iree_hal_semaphore_list_t signal_semaphore_list,
iree_hal_buffer_t* buffer) {
// TODO(benvanik): queue-ordered allocations.
IREE_RETURN_IF_ERROR(iree_hal_semaphore_list_wait(wait_semaphore_list,
iree_infinite_timeout()));
IREE_RETURN_IF_ERROR(iree_hal_semaphore_list_signal(signal_semaphore_list));
IREE_RETURN_IF_ERROR(iree_hal_device_queue_barrier(
base_device, queue_affinity, wait_semaphore_list, signal_semaphore_list));
return iree_ok_status();
}

Expand Down
7 changes: 3 additions & 4 deletions runtime/src/iree/hal/drivers/local_task/task_device.c
Original file line number Diff line number Diff line change
Expand Up @@ -323,7 +323,7 @@ static iree_status_t iree_hal_task_device_queue_alloca(
iree_hal_device_t* base_device, iree_hal_queue_affinity_t queue_affinity,
const iree_hal_semaphore_list_t wait_semaphore_list,
const iree_hal_semaphore_list_t signal_semaphore_list,
iree_hal_allocator_pool_id_t pool_id, iree_hal_buffer_params_t params,
iree_hal_allocator_pool_t pool, iree_hal_buffer_params_t params,
iree_device_size_t allocation_size,
iree_hal_buffer_t** IREE_RESTRICT out_buffer) {
// TODO(benvanik): queue-ordered allocations.
Expand All @@ -342,9 +342,8 @@ static iree_status_t iree_hal_task_device_queue_dealloca(
const iree_hal_semaphore_list_t signal_semaphore_list,
iree_hal_buffer_t* buffer) {
// TODO(benvanik): queue-ordered allocations.
IREE_RETURN_IF_ERROR(iree_hal_semaphore_list_wait(wait_semaphore_list,
iree_infinite_timeout()));
IREE_RETURN_IF_ERROR(iree_hal_semaphore_list_signal(signal_semaphore_list));
IREE_RETURN_IF_ERROR(iree_hal_device_queue_barrier(
base_device, queue_affinity, wait_semaphore_list, signal_semaphore_list));
return iree_ok_status();
}

Expand Down
7 changes: 3 additions & 4 deletions runtime/src/iree/hal/drivers/vulkan/vulkan_device.cc
Original file line number Diff line number Diff line change
Expand Up @@ -1080,7 +1080,7 @@ static iree_status_t iree_hal_vulkan_device_queue_alloca(
iree_hal_device_t* base_device, iree_hal_queue_affinity_t queue_affinity,
const iree_hal_semaphore_list_t wait_semaphore_list,
const iree_hal_semaphore_list_t signal_semaphore_list,
iree_hal_allocator_pool_id_t pool_id, iree_hal_buffer_params_t params,
iree_hal_allocator_pool_t pool, iree_hal_buffer_params_t params,
iree_device_size_t allocation_size,
iree_hal_buffer_t** IREE_RESTRICT out_buffer) {
// TODO(benvanik): queue-ordered allocations.
Expand All @@ -1099,9 +1099,8 @@ static iree_status_t iree_hal_vulkan_device_queue_dealloca(
const iree_hal_semaphore_list_t signal_semaphore_list,
iree_hal_buffer_t* buffer) {
// TODO(benvanik): queue-ordered allocations.
IREE_RETURN_IF_ERROR(iree_hal_semaphore_list_wait(wait_semaphore_list,
iree_infinite_timeout()));
IREE_RETURN_IF_ERROR(iree_hal_semaphore_list_signal(signal_semaphore_list));
IREE_RETURN_IF_ERROR(iree_hal_device_queue_barrier(
base_device, queue_affinity, wait_semaphore_list, signal_semaphore_list));
return iree_ok_status();
}

Expand Down
4 changes: 2 additions & 2 deletions runtime/src/iree/modules/hal/module.c
Original file line number Diff line number Diff line change
Expand Up @@ -854,7 +854,7 @@ IREE_VM_ABI_EXPORT(iree_hal_module_device_queue_alloca, //
(iree_hal_queue_affinity_t)args->i1;
iree_hal_fence_t* wait_fence = iree_hal_fence_deref(args->r2);
iree_hal_fence_t* signal_fence = iree_hal_fence_deref(args->r3);
iree_hal_allocator_pool_id_t pool_id = (iree_hal_allocator_pool_id_t)args->i4;
iree_hal_allocator_pool_t pool = (iree_hal_allocator_pool_t)args->i4;
iree_hal_memory_type_t memory_types = (iree_hal_memory_type_t)args->i5;
iree_hal_buffer_usage_t buffer_usage = (iree_hal_buffer_usage_t)args->i6;
iree_device_size_t allocation_size = iree_hal_cast_device_size(args->i7);
Expand All @@ -866,7 +866,7 @@ IREE_VM_ABI_EXPORT(iree_hal_module_device_queue_alloca, //
iree_hal_buffer_t* buffer = NULL;
IREE_RETURN_IF_ERROR(iree_hal_device_queue_alloca(
device, queue_affinity, iree_hal_fence_semaphore_list(wait_fence),
iree_hal_fence_semaphore_list(signal_fence), pool_id, params,
iree_hal_fence_semaphore_list(signal_fence), pool, params,
allocation_size, &buffer));

rets->r0 = iree_hal_buffer_move_ref(buffer);
Expand Down