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

Method add_task

dnn/test/common/task_executor.cpp:151–186  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

149}
150
151void CpuDispatchChecker::TaskExecutor::add_task(
152 const MultiThreadingTask& task, size_t parallelism) {
153#if MEGDNN_ENABLE_MULTI_THREADS
154 if (!m_main_thread_affinity && m_cpu_ids.size() == m_nr_threads) {
155 m_main_thread_prev_affinity_mask =
156 set_cpu_affinity({m_cpu_ids[m_nr_threads - 1]});
157 m_main_thread_affinity = true;
158 }
159#endif
160 if (m_nr_threads == 1 || parallelism == 1) {
161 for (size_t i = 0; i < parallelism; i++) {
162 task(i, 0);
163 }
164 } else {
165#if MEGDNN_ENABLE_MULTI_THREADS
166 m_all_task_iter = parallelism;
167 m_current_task_iter.exchange(parallelism, std::memory_order_acq_rel);
168 m_task = task;
169
170 //! Set flag to start thread working
171 for (uint32_t i = 0; i < m_nr_threads - 1; i++) {
172 *m_workers_flag[i] = true;
173 }
174 int index = -1;
175 while ((index = m_current_task_iter.fetch_sub(1, std::memory_order_acq_rel)) &&
176 index > 0) {
177 m_task(static_cast<size_t>(m_all_task_iter - index), m_nr_threads - 1);
178 }
179 sync();
180#else
181 megdnn_throw(
182 "Try to use multithreading with "
183 "\'MEGDNN_ENABLE_MULTI_THREADS\' set to 0.");
184#endif
185 }
186}
187
188void CpuDispatchChecker::TaskExecutor::add_task(const Task& task) {
189 task();

Callers 1

dispatchMethod · 0.45

Calls 3

set_cpu_affinityFunction · 0.85
syncFunction · 0.85
sizeMethod · 0.45

Tested by

no test coverage detected