MCPcopy Create free account
hub / github.com/ROCm/clr / runInitFiniKernel

Method runInitFiniKernel

rocclr/device/devprogram.cpp:2151–2207  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2149amd::Monitor Program::initFiniLock_(true);
2150
2151bool Program::runInitFiniKernel(const std::vector<const Kernel*>& kernels) const {
2152 amd::HostQueue* queue = nullptr;
2153
2154 for (const auto& kernel : kernels) {
2155 amd::ScopedLock sl(initFiniLock_);
2156
2157 if (queue == nullptr) {
2158 queue = new amd::HostQueue(device_().context(), device_(), 0);
2159 if (queue == nullptr) {
2160 LogError("Unable to create queue");
2161 return false;
2162 }
2163 queue->create();
2164 }
2165
2166 LogPrintfInfo("%s is marked init/fini", kernel->name().c_str());
2167
2168 size_t globalWorkOffset[3] = {0};
2169 size_t globalWorkSize[3] = {1, 1, 1};
2170 size_t localWorkSize[3] = {1, 1, 1};
2171 amd::NDRangeContainer ndrange(3, globalWorkOffset, globalWorkSize, localWorkSize);
2172 amd::Command::EventWaitList waitList;
2173
2174 auto symbol = owner_.findSymbol(kernel->name().c_str());
2175 amd::Kernel* k = new amd::Kernel(owner_, *symbol, kernel->name().c_str());
2176 if (!k) {
2177 queue->release();
2178 LogError("Unable to create kernel");
2179 return false;
2180 }
2181
2182 amd::NDRangeKernelCommand* kernelCommand =
2183 new amd::NDRangeKernelCommand(*queue, waitList, *k, ndrange);
2184 if (!kernelCommand) {
2185 LogError("Unale to allocate memory to launch kernel");
2186 k->release();
2187 queue->release();
2188 return false;
2189 }
2190 if (CL_SUCCESS != kernelCommand->captureAndValidate()) {
2191 LogError("Kernel Capture and Validate failed");
2192 kernelCommand->release();
2193 k->release();
2194 queue->release();
2195 return false;
2196 }
2197 kernelCommand->enqueue();
2198 queue->finish();
2199 k->release();
2200 kernelCommand->release();
2201 }
2202
2203 if (queue != nullptr) {
2204 queue->release();
2205 }
2206 return true;
2207}
2208

Callers

nothing calls this directly

Calls 7

findSymbolMethod · 0.80
captureAndValidateMethod · 0.80
createMethod · 0.45
nameMethod · 0.45
releaseMethod · 0.45
enqueueMethod · 0.45
finishMethod · 0.45

Tested by

no test coverage detected