std::exception_ptr exceptionPtr;
std::vector<GpuTaskAssignment> taskAssignmentOnRanksOfThisNode;
- std::vector<int> deviceIdsAssigned;
+ std::vector<int> deviceIdAssignment;
try
{
// Use the GPU IDs from the user if they supplied
host,
availableDevices.size())));
}
- deviceIdsAssigned = generatedGpuIds;
+ deviceIdAssignment = generatedGpuIds;
}
else
{
// Did the user choose compatible GPUs?
checkUserGpuIds(hardwareInfo.deviceInfoList, availableDevices, userGpuTaskAssignment);
- deviceIdsAssigned = gmx::copyOf(userGpuTaskAssignment);
+ deviceIdAssignment = gmx::copyOf(userGpuTaskAssignment);
}
taskAssignmentOnRanksOfThisNode =
- buildTaskAssignment(gpuTasksOnRanksOfThisNode, deviceIdsAssigned);
+ buildTaskAssignment(gpuTasksOnRanksOfThisNode, deviceIdAssignment);
}
catch (...)
{
gpuTaskAssignments.indexOfThisRank_ = physicalNodeComm.rank_;
gpuTaskAssignments.numGpuTasksOnThisNode_ = numGpuTasksOnThisNode;
gpuTaskAssignments.numRanksOnThisNode_ = numRanksOnThisNode;
- gpuTaskAssignments.deviceIdsAssigned_ = deviceIdsAssigned;
+ gpuTaskAssignments.deviceIdsAssigned_ = deviceIdAssignment;
+ std::sort(gpuTaskAssignments.deviceIdsAssigned_.begin(), gpuTaskAssignments.deviceIdsAssigned_.end());
+ gpuTaskAssignments.deviceIdsAssigned_.erase(unique(gpuTaskAssignments.deviceIdsAssigned_.begin(),
+ gpuTaskAssignments.deviceIdsAssigned_.end()),
+ gpuTaskAssignments.deviceIdsAssigned_.end());
return gpuTaskAssignments;
}
bool thisRankHasPmeGpuTask() const;
//! Return whether this rank has any task running on a GPU
bool thisRankHasAnyGpuTask() const;
- //! Get the list of devices assigned to this node
+ //! Get the list of unique devices that have been assigned tasks on this physical node
std::vector<int> deviceIdsAssigned() { return deviceIdsAssigned_; }
};