MCPcopy Create free account
hub / github.com/DeepRec-AI/DeepRec / InitInternal

Method InitInternal

tensorflow/core/framework/op_kernel.cc:1187–1211  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1185namespace kernel_factory {
1186
1187void OpKernelRegistrar::InitInternal(const KernelDef* kernel_def,
1188 StringPiece kernel_class_name,
1189 std::unique_ptr<OpKernelFactory> factory) {
1190 // See comments in register_kernel::Name in header for info on _no_register.
1191 if (kernel_def->op() != "_no_register") {
1192 const string key =
1193 Key(kernel_def->op(), DeviceType(kernel_def->device_type()),
1194 kernel_def->label());
1195
1196 // To avoid calling LoadDynamicKernels DO NOT CALL GlobalKernelRegistryTyped
1197 // here.
1198 // InitInternal gets called by static initializers, so it ends up executing
1199 // before main. This causes LoadKernelLibraries function to get called
1200 // before some file libraries can initialize, which in turn crashes the
1201 // program flakily. Until we get rid of static initializers in kernel
1202 // registration mechanism, we have this workaround here.
1203 auto global_registry =
1204 reinterpret_cast<KernelRegistry*>(GlobalKernelRegistry());
1205 mutex_lock l(global_registry->mu);
1206 global_registry->registry.emplace(
1207 key,
1208 KernelRegistration(*kernel_def, kernel_class_name, std::move(factory)));
1209 }
1210 delete kernel_def;
1211}
1212
1213OpKernel* OpKernelRegistrar::PtrOpKernelFactory::Create(
1214 OpKernelConstruction* context) {

Callers

nothing calls this directly

Calls 7

DeviceTypeClass · 0.85
GlobalKernelRegistryFunction · 0.85
KernelRegistrationClass · 0.85
KeyFunction · 0.70
opMethod · 0.45
device_typeMethod · 0.45
emplaceMethod · 0.45

Tested by

no test coverage detected