-
Notifications
You must be signed in to change notification settings - Fork 65
Open
Description
The last release introduced an issue with subprocess XPTI subscriber detection:
Process 1 (Parent Process):
- Python test initializes and loads PTI library
- PTI queries
XPTI_SUBSCRIBERSenvironment variable: Result = Not Set - PTI registers as XPTI subscriber by setting:
XPTI_SUBSCRIBERS=/path/to/libpti.so
Process 2 (Child Process via subprocess):
- Child process inherits env from parent process including:
XPTI_SUBSCRIBERS=/path/to/libpti.so(inherited) - Child process loads PTI library
- PTI queries
XPTI_SUBSCRIBERSenvironment variable: Result = Already Set - PTI incorrectly interprets parent's PTI subscription as foreign subscriber
- PTI outputs warning:
"Another subscriber already subscribed to Sycl runtime events..."
Root Cause
The current implementation only checks if XPTI_SUBSCRIBERS is non-empty, without difference between PTI itself and real foreign subscribers.
Current Implementation
inline std::pair<bool, bool> IsSubscriberToXPTI() {
auto current_xpti_subscriber = utils::GetEnv("XPTI_SUBSCRIBERS");
// and may be it is unitrace
return {!current_xpti_subscriber.empty(),
current_xpti_subscriber.find("unitrace") != std::string::npos};
}Proposed Fix
inline std::pair<bool, bool> IsSubscriberToXPTI() {
auto current_xpti_subscriber = utils::GetEnv("XPTI_SUBSCRIBERS");
bool is_unitrace = current_xpti_subscriber.find("unitrace") != std::string::npos;
if (current_xpti_subscriber.empty()) {
return {false, is_unitrace};
}
// Check if the subscriber is PTI itself (not foreign for linux + win)
if (current_xpti_subscriber.find("libpti") != std::string::npos ||
current_xpti_subscriber.find("pti.dll") != std::string::npos) {
return {false, is_unitrace};
}
// It's a real foreign subscriber (not PTI)
return {true, is_unitrace};
}Related issue : intel/intel-xpu-backend-for-triton#4998
Metadata
Metadata
Assignees
Labels
No labels