Skip to content

Commit 8385cae

Browse files
committed
Add queue properties to support immediate and batched submissions.
1 parent 8ab1e3e commit 8385cae

File tree

3 files changed

+47
-72
lines changed

3 files changed

+47
-72
lines changed

include/ur_api.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4000,6 +4000,12 @@ typedef enum ur_queue_flag_t {
40004000
UR_QUEUE_FLAG_DISCARD_EVENTS = UR_BIT(4), ///< Events will be discarded
40014001
UR_QUEUE_FLAG_PRIORITY_LOW = UR_BIT(5), ///< Low priority queue
40024002
UR_QUEUE_FLAG_PRIORITY_HIGH = UR_BIT(6), ///< High priority queue
4003+
UR_QUEUE_FLAG_SUBMISSION_BATCHED = UR_BIT(7), ///< Do not necessarily submit the operation as
4004+
///< soon as enqueue completes. Collect operations
4005+
///< and then submit at a later time in a batch.
4006+
///< Batch size will be determined automatically.
4007+
UR_QUEUE_FLAG_SUBMISSION_IMMEDIATE = UR_BIT(8), ///< Submit immediately after the enqueue operation
4008+
///< completes.
40034009
/// @cond
40044010
UR_QUEUE_FLAG_FORCE_UINT32 = 0x7fffffff
40054011
/// @endcond

source/common/ur_params.hpp

Lines changed: 27 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -7093,6 +7093,14 @@ inline std::ostream &operator<<(std::ostream &os, enum ur_queue_flag_t value) {
70937093
case UR_QUEUE_FLAG_PRIORITY_HIGH:
70947094
os << "UR_QUEUE_FLAG_PRIORITY_HIGH";
70957095
break;
7096+
7097+
case UR_QUEUE_FLAG_SUBMISSION_BATCHED:
7098+
os << "UR_QUEUE_FLAG_SUBMISSION_BATCHED";
7099+
break;
7100+
7101+
case UR_QUEUE_FLAG_SUBMISSION_IMMEDIATE:
7102+
os << "UR_QUEUE_FLAG_SUBMISSION_IMMEDIATE";
7103+
break;
70967104
default:
70977105
os << "unknown enumerator";
70987106
break;
@@ -7106,81 +7114,28 @@ inline void serializeFlag<ur_queue_flag_t>(std::ostream &os, uint32_t flag) {
71067114
uint32_t val = flag;
71077115
bool first = true;
71087116

7109-
if ((val & UR_QUEUE_FLAG_OUT_OF_ORDER_EXEC_MODE_ENABLE) ==
7110-
(uint32_t)UR_QUEUE_FLAG_OUT_OF_ORDER_EXEC_MODE_ENABLE) {
7111-
val ^= (uint32_t)UR_QUEUE_FLAG_OUT_OF_ORDER_EXEC_MODE_ENABLE;
7112-
if (!first) {
7113-
os << " | ";
7114-
} else {
7115-
first = false;
7116-
}
7117-
os << UR_QUEUE_FLAG_OUT_OF_ORDER_EXEC_MODE_ENABLE;
7118-
}
7119-
7120-
if ((val & UR_QUEUE_FLAG_PROFILING_ENABLE) ==
7121-
(uint32_t)UR_QUEUE_FLAG_PROFILING_ENABLE) {
7122-
val ^= (uint32_t)UR_QUEUE_FLAG_PROFILING_ENABLE;
7123-
if (!first) {
7124-
os << " | ";
7125-
} else {
7126-
first = false;
7127-
}
7128-
os << UR_QUEUE_FLAG_PROFILING_ENABLE;
7129-
}
7130-
7131-
if ((val & UR_QUEUE_FLAG_ON_DEVICE) == (uint32_t)UR_QUEUE_FLAG_ON_DEVICE) {
7132-
val ^= (uint32_t)UR_QUEUE_FLAG_ON_DEVICE;
7117+
auto showFlag = [&](ur_queue_flag_t flag) {
7118+
if ((val & flag) == (uint32_t)flag) {
7119+
val ^= (uint32_t)flag;
71337120
if (!first) {
7134-
os << " | ";
7121+
os << " | ";
71357122
} else {
7136-
first = false;
7137-
}
7138-
os << UR_QUEUE_FLAG_ON_DEVICE;
7139-
}
7123+
first = false;
7124+
}
7125+
os << flag;
7126+
}
7127+
};
7128+
7129+
showFlag(UR_QUEUE_FLAG_OUT_OF_ORDER_EXEC_MODE_ENABLE);
7130+
showFlag(UR_QUEUE_FLAG_PROFILING_ENABLE);
7131+
showFlag(UR_QUEUE_FLAG_ON_DEVICE);
7132+
showFlag(UR_QUEUE_FLAG_ON_DEVICE_DEFAULT);
7133+
showFlag(UR_QUEUE_FLAG_DISCARD_EVENTS);
7134+
showFlag(UR_QUEUE_FLAG_PRIORITY_LOW);
7135+
showFlag(UR_QUEUE_FLAG_PRIORITY_HIGH);
7136+
showFlag(UR_QUEUE_FLAG_SUBMISSION_BATCHED);
7137+
showFlag(UR_QUEUE_FLAG_SUBMISSION_IMMEDIATE);
71407138

7141-
if ((val & UR_QUEUE_FLAG_ON_DEVICE_DEFAULT) ==
7142-
(uint32_t)UR_QUEUE_FLAG_ON_DEVICE_DEFAULT) {
7143-
val ^= (uint32_t)UR_QUEUE_FLAG_ON_DEVICE_DEFAULT;
7144-
if (!first) {
7145-
os << " | ";
7146-
} else {
7147-
first = false;
7148-
}
7149-
os << UR_QUEUE_FLAG_ON_DEVICE_DEFAULT;
7150-
}
7151-
7152-
if ((val & UR_QUEUE_FLAG_DISCARD_EVENTS) ==
7153-
(uint32_t)UR_QUEUE_FLAG_DISCARD_EVENTS) {
7154-
val ^= (uint32_t)UR_QUEUE_FLAG_DISCARD_EVENTS;
7155-
if (!first) {
7156-
os << " | ";
7157-
} else {
7158-
first = false;
7159-
}
7160-
os << UR_QUEUE_FLAG_DISCARD_EVENTS;
7161-
}
7162-
7163-
if ((val & UR_QUEUE_FLAG_PRIORITY_LOW) ==
7164-
(uint32_t)UR_QUEUE_FLAG_PRIORITY_LOW) {
7165-
val ^= (uint32_t)UR_QUEUE_FLAG_PRIORITY_LOW;
7166-
if (!first) {
7167-
os << " | ";
7168-
} else {
7169-
first = false;
7170-
}
7171-
os << UR_QUEUE_FLAG_PRIORITY_LOW;
7172-
}
7173-
7174-
if ((val & UR_QUEUE_FLAG_PRIORITY_HIGH) ==
7175-
(uint32_t)UR_QUEUE_FLAG_PRIORITY_HIGH) {
7176-
val ^= (uint32_t)UR_QUEUE_FLAG_PRIORITY_HIGH;
7177-
if (!first) {
7178-
os << " | ";
7179-
} else {
7180-
first = false;
7181-
}
7182-
os << UR_QUEUE_FLAG_PRIORITY_HIGH;
7183-
}
71847139
if (val != 0) {
71857140
std::bitset<32> bits(val);
71867141
if (!first) {

test/conformance/queue/urQueueCreate.cpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,3 +88,17 @@ TEST_P(urQueueCreateTest, InvalidQueueProperties) {
8888
ASSERT_EQ_RESULT(UR_RESULT_ERROR_INVALID_QUEUE_PROPERTIES,
8989
urQueueCreate(context, device, &props, &queue));
9090
}
91+
92+
TEST_P(urQueueCreateTest, InvalidQueueProperties) {
93+
ur_queue_handle_t queue = nullptr;
94+
95+
// It should be an error to specify both batched and immediate submission
96+
ur_queue_properties_t props = {
97+
/*.stype =*/UR_STRUCTURE_TYPE_QUEUE_PROPERTIES,
98+
/*.pNext =*/nullptr,
99+
/*.flags =*/UR_QUEUE_FLAG_SUBMISSION_BATCHED |
100+
UR_QUEUE_FLAG_SUBMISSION_IMMEDIATE,
101+
};
102+
ASSERT_EQ_RESULT(UR_RESULT_ERROR_INVALID_QUEUE_PROPERTIES,
103+
urQueueCreate(context, device, &props, &queue));
104+
}

0 commit comments

Comments
 (0)