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_SUBSCRIBERS environment 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_SUBSCRIBERS environment 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
The last release introduced an issue with subprocess XPTI subscriber detection:
Process 1 (Parent Process):
XPTI_SUBSCRIBERSenvironment variable: Result = Not SetXPTI_SUBSCRIBERS=/path/to/libpti.soProcess 2 (Child Process via subprocess):
XPTI_SUBSCRIBERS=/path/to/libpti.so(inherited)XPTI_SUBSCRIBERSenvironment variable: Result = Already Set"Another subscriber already subscribed to Sycl runtime events..."Root Cause
The current implementation only checks if
XPTI_SUBSCRIBERSis non-empty, without difference between PTI itself and real foreign subscribers.Current Implementation
Proposed Fix
Related issue : intel/intel-xpu-backend-for-triton#4998