SWDEV-290298 - add a flag to indicate the primary context active status

Change-Id: Id13d132923fcef697b689e75b6aa04060923a2ad
Cette révision appartient à :
haoyuan2
2021-12-01 10:05:16 -08:00
révisé par Maneesh Gupta
Parent 9ed0c29bb6
révision 981ef060fb
3 fichiers modifiés avec 29 ajouts et 3 suppressions
+1 -1
Voir le fichier
@@ -349,7 +349,7 @@ hipError_t hipDevicePrimaryCtxGetState(hipDevice_t dev, unsigned int* flags, int
}
if (active != nullptr) {
*active = (g_devices[dev] == hip::getCurrentDevice())? 1 : 0;
*active = g_devices[dev]->GetActiveStatus() ? 1 : 0;
}
HIP_RETURN(hipSuccess);
+27 -2
Voir le fichier
@@ -325,9 +325,17 @@ namespace hip {
/// Maintain list of user enabled peers
std::list<int> userEnabledPeers;
/// True if this device is active
bool isActive_;
std::vector<amd::HostQueue*> queues_;
public:
Device(amd::Context* ctx, int devId):
context_(ctx), deviceId_(devId), null_stream_(this, Stream::Priority::Normal, 0, true), flags_(hipDeviceScheduleSpin)
Device(amd::Context* ctx, int devId): context_(ctx),
deviceId_(devId),
null_stream_(this, Stream::Priority::Normal, 0, true),
flags_(hipDeviceScheduleSpin),
isActive_(false)
{ assert(ctx != nullptr); }
~Device() {}
@@ -358,6 +366,23 @@ namespace hip {
unsigned int getFlags() const { return flags_; }
void setFlags(unsigned int flags) { flags_ = flags; }
amd::HostQueue* NullStream(bool skip_alloc = false);
void SaveQueue(amd::HostQueue* queue) {
amd::ScopedLock lock(lock_);
queues_.push_back(queue);
}
bool GetActiveStatus() {
amd::ScopedLock lock(lock_);
if (isActive_) return true;
for (int i = 0; i < queues_.size(); i++) {
if (queues_[i]->GetQueueStatus()) {
isActive_ = true;
return true;
}
}
return false;
}
};
/// Current thread's device
+1
Voir le fichier
@@ -107,6 +107,7 @@ bool Stream::Create() {
streamSet.insert(this);
queue_ = queue;
queue->vdev()->profilerAttach(isProfilerAttached);
device_->SaveQueue(queue);
} else if (queue != nullptr) {
queue->release();
}