Skip to content

Commit f6282fb

Browse files
authored
Merge pull request #576 from rdeodhar/ur_qprop
Add queue properties to support immediate and batched submissions.
2 parents 4319321 + e156095 commit f6282fb

File tree

5 files changed

+59
-6
lines changed

5 files changed

+59
-6
lines changed

include/ur.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1557,6 +1557,10 @@ class ur_queue_flags_v(IntEnum):
15571557
DISCARD_EVENTS = UR_BIT(4) ## Events will be discarded
15581558
PRIORITY_LOW = UR_BIT(5) ## Low priority queue
15591559
PRIORITY_HIGH = UR_BIT(6) ## High priority queue
1560+
SUBMISSION_BATCHED = UR_BIT(7) ## Hint: enqueue and submit in a batch later. No change in queue
1561+
## semantics. Implementation chooses submission mode.
1562+
SUBMISSION_IMMEDIATE = UR_BIT(8) ## Hint: enqueue and submit immediately. No change in queue semantics.
1563+
## Implementation chooses submission mode.
15601564

15611565
class ur_queue_flags_t(c_int):
15621566
def __str__(self):

include/ur_api.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4039,13 +4039,17 @@ typedef enum ur_queue_flag_t {
40394039
UR_QUEUE_FLAG_DISCARD_EVENTS = UR_BIT(4), ///< Events will be discarded
40404040
UR_QUEUE_FLAG_PRIORITY_LOW = UR_BIT(5), ///< Low priority queue
40414041
UR_QUEUE_FLAG_PRIORITY_HIGH = UR_BIT(6), ///< High priority queue
4042+
UR_QUEUE_FLAG_SUBMISSION_BATCHED = UR_BIT(7), ///< Hint: enqueue and submit in a batch later. No change in queue
4043+
///< semantics. Implementation chooses submission mode.
4044+
UR_QUEUE_FLAG_SUBMISSION_IMMEDIATE = UR_BIT(8), ///< Hint: enqueue and submit immediately. No change in queue semantics.
4045+
///< Implementation chooses submission mode.
40424046
/// @cond
40434047
UR_QUEUE_FLAG_FORCE_UINT32 = 0x7fffffff
40444048
/// @endcond
40454049

40464050
} ur_queue_flag_t;
40474051
/// @brief Bit Mask for validating ur_queue_flags_t
4048-
#define UR_QUEUE_FLAGS_MASK 0xffffff80
4052+
#define UR_QUEUE_FLAGS_MASK 0xfffffe00
40494053

40504054
///////////////////////////////////////////////////////////////////////////////
40514055
/// @brief Query information about a command queue

scripts/core/queue.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,12 @@ etors:
6262
- name: PRIORITY_HIGH
6363
value: "$X_BIT(6)"
6464
desc: "High priority queue"
65+
- name: SUBMISSION_BATCHED
66+
value: "$X_BIT(7)"
67+
desc: "Hint: enqueue and submit in a batch later. No change in queue semantics. Implementation chooses submission mode."
68+
- name: SUBMISSION_IMMEDIATE
69+
value: "$X_BIT(8)"
70+
desc: "Hint: enqueue and submit immediately. No change in queue semantics. Implementation chooses submission mode."
6571
--- #--------------------------------------------------------------------------
6672
type: function
6773
desc: "Query information about a command queue"

source/common/ur_params.hpp

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7442,6 +7442,14 @@ inline std::ostream &operator<<(std::ostream &os, enum ur_queue_flag_t value) {
74427442
case UR_QUEUE_FLAG_PRIORITY_HIGH:
74437443
os << "UR_QUEUE_FLAG_PRIORITY_HIGH";
74447444
break;
7445+
7446+
case UR_QUEUE_FLAG_SUBMISSION_BATCHED:
7447+
os << "UR_QUEUE_FLAG_SUBMISSION_BATCHED";
7448+
break;
7449+
7450+
case UR_QUEUE_FLAG_SUBMISSION_IMMEDIATE:
7451+
os << "UR_QUEUE_FLAG_SUBMISSION_IMMEDIATE";
7452+
break;
74457453
default:
74467454
os << "unknown enumerator";
74477455
break;
@@ -7530,6 +7538,28 @@ inline void serializeFlag<ur_queue_flag_t>(std::ostream &os, uint32_t flag) {
75307538
}
75317539
os << UR_QUEUE_FLAG_PRIORITY_HIGH;
75327540
}
7541+
7542+
if ((val & UR_QUEUE_FLAG_SUBMISSION_BATCHED) ==
7543+
(uint32_t)UR_QUEUE_FLAG_SUBMISSION_BATCHED) {
7544+
val ^= (uint32_t)UR_QUEUE_FLAG_SUBMISSION_BATCHED;
7545+
if (!first) {
7546+
os << " | ";
7547+
} else {
7548+
first = false;
7549+
}
7550+
os << UR_QUEUE_FLAG_SUBMISSION_BATCHED;
7551+
}
7552+
7553+
if ((val & UR_QUEUE_FLAG_SUBMISSION_IMMEDIATE) ==
7554+
(uint32_t)UR_QUEUE_FLAG_SUBMISSION_IMMEDIATE) {
7555+
val ^= (uint32_t)UR_QUEUE_FLAG_SUBMISSION_IMMEDIATE;
7556+
if (!first) {
7557+
os << " | ";
7558+
} else {
7559+
first = false;
7560+
}
7561+
os << UR_QUEUE_FLAG_SUBMISSION_IMMEDIATE;
7562+
}
75337563
if (val != 0) {
75347564
std::bitset<32> bits(val);
75357565
if (!first) {

test/conformance/queue/urQueueCreate.cpp

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -77,14 +77,23 @@ TEST_P(urQueueCreateTest, InvalidValueProperties) {
7777
}
7878

7979
TEST_P(urQueueCreateTest, InvalidQueueProperties) {
80-
ur_queue_handle_t queue = nullptr;
81-
82-
// It should be an error to specify both low/high priorities
8380
ur_queue_properties_t props = {
8481
/*.stype =*/UR_STRUCTURE_TYPE_QUEUE_PROPERTIES,
8582
/*.pNext =*/nullptr,
8683
/*.flags =*/UR_QUEUE_FLAG_PRIORITY_HIGH | UR_QUEUE_FLAG_PRIORITY_LOW,
8784
};
88-
ASSERT_EQ_RESULT(UR_RESULT_ERROR_INVALID_QUEUE_PROPERTIES,
89-
urQueueCreate(context, device, &props, &queue));
85+
// It should be an error to specify both low/high priorities
86+
{
87+
ur_queue_handle_t queue = nullptr;
88+
ASSERT_EQ_RESULT(UR_RESULT_ERROR_INVALID_QUEUE_PROPERTIES,
89+
urQueueCreate(context, device, &props, &queue));
90+
}
91+
// It should be an error to specify both batched and immediate submission
92+
{
93+
ur_queue_handle_t queue = nullptr;
94+
props.flags = UR_QUEUE_FLAG_SUBMISSION_BATCHED |
95+
UR_QUEUE_FLAG_SUBMISSION_IMMEDIATE;
96+
ASSERT_EQ_RESULT(UR_RESULT_ERROR_INVALID_QUEUE_PROPERTIES,
97+
urQueueCreate(context, device, &props, &queue));
98+
}
9099
}

0 commit comments

Comments
 (0)