MCPcopy Create free account
hub / github.com/MegEngine/MegEngine / init

Method init

src/core/impl/comp_node/cambricon/comp_node.cpp:270–316  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

268Spinlock CambriconCompNodeImpl::sd_mtx;
269
270void CambriconCompNodeImpl::init(
271 const Locator& locator, const Locator& locator_logical) {
272 m_locator = locator;
273 m_locator_logical = locator_logical;
274 m_initialized = true;
275#if defined(__linux__) || defined(TARGET_OS_MAC)
276 FILE* fp;
277 fp = fopen("/dev/urandom", "r");
278 mgb_assert(fread(&m_uid, sizeof(m_uid), 1, fp) == 1);
279 fclose(fp);
280#else
281 m_uid = std::chrono::duration_cast<std::chrono::nanoseconds>(
282 std::chrono::system_clock::now().time_since_epoch())
283 .count();
284#endif
285
286 auto on_succ = [this](cnrtQueue_t queue) {
287 auto locator = m_locator;
288 log_comp_node_created(locator, m_locator_logical);
289
290 MGB_LOCK_GUARD(sd->mtx);
291 DeviceInfo* dev_info = nullptr;
292 for (int i = 0; i < sd->nr_dev_used; ++i) {
293 if (sd->dev_info[i].dev_num == locator.device) {
294 dev_info = &sd->dev_info[i];
295 break;
296 }
297 }
298
299 if (!dev_info) {
300 dev_info = &sd->dev_info[sd->nr_dev_used];
301 dev_info->init(m_env);
302 ++sd->nr_dev_used;
303 }
304 m_device_info = dev_info;
305 m_mem_alloc = dev_info->mem_alloc->add_stream(static_cast<void*>(queue));
306 m_dev = m_device_info->dev;
307 };
308
309 auto on_error = [this](std::exception&) {
310 MGB_LOCK_GUARD(sd->mtx);
311 m_initialized = false;
312 };
313
314 m_env.init_cnrt(
315 locator.device, make_comp_node_from_impl(this), {on_succ, on_error});
316}
317
318void CambriconCompNodeImpl::fini() {
319 if (!m_initialized)

Callers 1

load_cambriconMethod · 0.45

Calls 7

init_cnrtMethod · 0.80
makeFunction · 0.50
countMethod · 0.45
add_streamMethod · 0.45
activateMethod · 0.45
propertyMethod · 0.45
alignmentMethod · 0.45

Tested by

no test coverage detected