mirror of
https://github.com/intel/compute-runtime.git
synced 2026-01-05 09:09:04 +08:00
Use MultiDeviceKernel instead of Kernel in clCloneKernel
Related-To: NEO-5001 Signed-off-by: Mateusz Jablonski <mateusz.jablonski@intel.com>
This commit is contained in:
committed by
Compute-Runtime-Automation
parent
693f2ff384
commit
487f10f999
@@ -636,7 +636,7 @@ class Kernel : public ReferenceTrackedObject<Kernel> {
|
||||
bool singleSubdevicePreferedInCurrentEnqueue = false;
|
||||
|
||||
bool kernelHasIndirectAccess = true;
|
||||
MultiDeviceKernel *pMultiDeviceKernel;
|
||||
MultiDeviceKernel *pMultiDeviceKernel = nullptr;
|
||||
};
|
||||
|
||||
} // namespace NEO
|
||||
|
||||
@@ -15,12 +15,21 @@ MultiDeviceKernel::~MultiDeviceKernel() {
|
||||
}
|
||||
}
|
||||
}
|
||||
MultiDeviceKernel::MultiDeviceKernel(KernelVectorType kernelVector) : kernels(std::move(kernelVector)) {
|
||||
|
||||
Kernel *MultiDeviceKernel::determineDefaultKernel(KernelVectorType &kernelVector) {
|
||||
for (auto &pKernel : kernelVector) {
|
||||
if (pKernel) {
|
||||
return kernelVector[(*pKernel->getDevices().begin())->getRootDeviceIndex()];
|
||||
}
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
MultiDeviceKernel::MultiDeviceKernel(KernelVectorType kernelVector) : kernels(std::move(kernelVector)),
|
||||
defaultKernel(MultiDeviceKernel::determineDefaultKernel(kernels)),
|
||||
program(defaultKernel->getProgram()),
|
||||
kernelInfos(defaultKernel->getKernelInfos()) {
|
||||
for (auto &pKernel : kernels) {
|
||||
if (pKernel) {
|
||||
if (!defaultKernel) {
|
||||
defaultKernel = kernels[(*pKernel->getDevices().begin())->getRootDeviceIndex()];
|
||||
}
|
||||
pKernel->incRefInternal();
|
||||
pKernel->setMultiDeviceKernel(this);
|
||||
}
|
||||
@@ -35,7 +44,6 @@ size_t MultiDeviceKernel::getKernelArgsNumber() const { return defaultKernel->ge
|
||||
Context &MultiDeviceKernel::getContext() const { return defaultKernel->getContext(); }
|
||||
bool MultiDeviceKernel::getHasIndirectAccess() const { return defaultKernel->getHasIndirectAccess(); }
|
||||
|
||||
cl_int MultiDeviceKernel::cloneKernel(Kernel *pSourceKernel) { return getResultFromEachKernel(&Kernel::cloneKernel, pSourceKernel); }
|
||||
cl_int MultiDeviceKernel::checkCorrectImageAccessQualifier(cl_uint argIndex, size_t argSize, const void *argValue) const { return getResultFromEachKernel(&Kernel::checkCorrectImageAccessQualifier, argIndex, argSize, argValue); }
|
||||
void MultiDeviceKernel::unsetArg(uint32_t argIndex) { callOnEachKernel(&Kernel::unsetArg, argIndex); }
|
||||
cl_int MultiDeviceKernel::setArg(uint32_t argIndex, size_t argSize, const void *argVal) { return getResultFromEachKernel(&Kernel::setArgument, argIndex, argSize, argVal); }
|
||||
@@ -49,4 +57,14 @@ int MultiDeviceKernel::setKernelThreadArbitrationPolicy(uint32_t propertyValue)
|
||||
cl_int MultiDeviceKernel::setKernelExecutionType(cl_execution_info_kernel_type_intel executionType) { return getResultFromEachKernel(&Kernel::setKernelExecutionType, executionType); }
|
||||
int32_t MultiDeviceKernel::setAdditionalKernelExecInfoWithParam(uint32_t paramName, size_t paramValueSize, const void *paramValue) { return getResultFromEachKernel(&Kernel::setAdditionalKernelExecInfoWithParam, paramName, paramValueSize, paramValue); }
|
||||
|
||||
cl_int MultiDeviceKernel::cloneKernel(MultiDeviceKernel *pSourceMultiDeviceKernel) {
|
||||
for (auto rootDeviceIndex = 0u; rootDeviceIndex < kernels.size(); rootDeviceIndex++) {
|
||||
auto pSrcKernel = pSourceMultiDeviceKernel->getKernel(rootDeviceIndex);
|
||||
auto pDstKernel = getKernel(rootDeviceIndex);
|
||||
if (pSrcKernel) {
|
||||
pDstKernel->cloneKernel(pSrcKernel);
|
||||
}
|
||||
}
|
||||
return CL_SUCCESS;
|
||||
}
|
||||
} // namespace NEO
|
||||
|
||||
@@ -43,7 +43,7 @@ class MultiDeviceKernel : public BaseObject<_cl_kernel> {
|
||||
return pMultiDeviceKernel;
|
||||
}
|
||||
|
||||
cl_int cloneKernel(Kernel *pSourceKernel);
|
||||
cl_int cloneKernel(MultiDeviceKernel *pSourceMultiDeviceKernel);
|
||||
const std::vector<Kernel::SimpleKernelArgInfo> &getKernelArguments() const;
|
||||
cl_int checkCorrectImageAccessQualifier(cl_uint argIndex, size_t argSize, const void *argValue) const;
|
||||
void unsetArg(uint32_t argIndex);
|
||||
@@ -63,6 +63,8 @@ class MultiDeviceKernel : public BaseObject<_cl_kernel> {
|
||||
int setKernelThreadArbitrationPolicy(uint32_t propertyValue);
|
||||
cl_int setKernelExecutionType(cl_execution_info_kernel_type_intel executionType);
|
||||
int32_t setAdditionalKernelExecInfoWithParam(uint32_t paramName, size_t paramValueSize, const void *paramValue);
|
||||
Program *getProgram() const { return program; }
|
||||
const KernelInfoContainer &getKernelInfos() const { return kernelInfos; }
|
||||
|
||||
protected:
|
||||
template <typename FuncType, typename... Args>
|
||||
@@ -87,8 +89,11 @@ class MultiDeviceKernel : public BaseObject<_cl_kernel> {
|
||||
}
|
||||
}
|
||||
}
|
||||
static Kernel *determineDefaultKernel(KernelVectorType &kernelVector);
|
||||
KernelVectorType kernels;
|
||||
Kernel *defaultKernel = nullptr;
|
||||
Program *program = nullptr;
|
||||
const KernelInfoContainer &kernelInfos;
|
||||
};
|
||||
|
||||
} // namespace NEO
|
||||
|
||||
Reference in New Issue
Block a user