Correct copy completion signal handling.

Remove agent lookup in time stamp translation for IPC signals.  The copy
agent handle is not shared so does not need to be checked for cross
process use.  Cross process copy-timestamp read is illegal and continues
to deliver garbage.

Store the copy agent properly when doing CPU-CPU copies.

Change-Id: Ib4008f66ff866922047749dd556c84a32021c1fd


[ROCm/ROCR-Runtime commit: ea8c99f452]
此提交包含在:
Sean Keely
2019-08-12 18:22:29 -05:00
父節點 e00fc1b0a2
當前提交 919e5dc802
共有 2 個檔案被更改,包括 2 行新增11 行删除
+1 -11
查看文件
@@ -382,20 +382,10 @@ hsa_status_t hsa_amd_profiling_get_async_copy_time(
core::Agent* agent = signal->async_copy_agent();
if (agent == NULL) {
if (agent == nullptr) {
return HSA_STATUS_ERROR;
}
// Validate the embedded agent pointer if the signal is IPC.
if (signal->isIPC()) {
for (auto it : core::Runtime::runtime_singleton_->gpu_agents()) {
if (it == agent) break;
}
// If the agent isn't a GPU then it is from a different process or it's a CPU.
// Assume it's a CPU and illegal uses will generate garbage data same as kernel completion.
agent = core::Runtime::runtime_singleton_->cpu_agents()[0];
}
if (agent->device_type() == core::Agent::DeviceType::kAmdGpuDevice) {
// Translate timestamp from GPU to system domain.
static_cast<amd::GpuAgentInt*>(agent)->TranslateTime(signal, *time);
+1
查看文件
@@ -471,6 +471,7 @@ hsa_status_t Runtime::CopyMemory(void* dst, core::Agent& dst_agent,
// For cpu to cpu, fire and forget a copy thread.
const bool profiling_enabled =
(dst_agent.profiling_enabled() || src_agent.profiling_enabled());
if (profiling_enabled) completion_signal.async_copy_agent(&dst_agent);
std::thread(
[](void* dst, const void* src, size_t size,
std::vector<core::Signal*> dep_signals,