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

Method init

src/core/impl/comp_node/rocm/comp_node.cpp:259–305  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

257Spinlock ROCmCompNodeImpl::sd_mtx;
258
259void ROCmCompNodeImpl::init(const Locator& locator, const Locator& locator_logical) {
260 m_locator = locator;
261 m_locator_logical = locator_logical;
262 m_initialized = true;
263
264#if defined(__linux__) || defined(TARGET_OS_MAC)
265 FILE* fp;
266 fp = fopen("/dev/urandom", "r");
267 mgb_assert(fread(&m_uid, sizeof(m_uid), 1, fp) == 1);
268 fclose(fp);
269#else
270 m_uid = std::chrono::duration_cast<std::chrono::nanoseconds>(
271 std::chrono::system_clock::now().time_since_epoch())
272 .count();
273#endif
274
275 auto on_succ = [this](hipStream_t stream) {
276 auto locator = m_locator;
277 log_comp_node_created(locator, m_locator_logical);
278
279 MGB_LOCK_GUARD(sd->mtx);
280 DeviceInfo* dev_info = nullptr;
281 for (int i = 0; i < sd->nr_dev_used; ++i) {
282 if (sd->dev_info[i].dev_num == locator.device) {
283 dev_info = &sd->dev_info[i];
284 break;
285 }
286 }
287
288 if (!dev_info) {
289 dev_info = &sd->dev_info[sd->nr_dev_used];
290 dev_info->init(m_env);
291 // note: add nr_dev_used only after init succeeds
292 ++sd->nr_dev_used;
293 }
294 m_device_info = dev_info;
295 m_mem_alloc = dev_info->mem_alloc->add_stream(stream);
296 };
297
298 auto on_error = [this](std::exception&) {
299 MGB_LOCK_GUARD(sd->mtx);
300 m_initialized = false;
301 };
302
303 m_env.init_rocm_async(
304 locator.device, make_comp_node_from_impl(this), {on_succ, on_error});
305}
306
307void ROCmCompNodeImpl::fini() {
308 if (!m_initialized)

Callers 1

load_rocmMethod · 0.45

Calls 7

init_rocm_asyncMethod · 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