MCPcopy Create free account
hub / github.com/emscripten-core/emscripten / register_tasks

Function register_tasks

test/pthread/test_pthread_mandelbrot.cpp:347–381  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

345double prevT = 0;
346
347void register_tasks()
348{
349 numTasks = EM_ASM_INT(return globalThis.document?.getElementById('num_threads') ? parseInt(document.getElementById('num_threads').value) : 1);
350
351#ifdef SINGLETHREADED
352 // Single-threaded
353 for(int i = 0; i < numTasks; ++i)
354 {
355 double t0 = emscripten_get_now();
356#ifdef __SSE__
357 if (use_sse)
358 numIters[0] += ComputeMandelbrot_SSE(mandelReal, mandelImag, outputImage, sizeof(float)*W, sizeof(uint32_t)*W, W*i/numTasks, 0, 1, W/numTasks, H, left, top, incrX, incrY, numItersDoneOnCanvas, numItersPerFrame);
359 else
360#endif
361 numIters[0] += ComputeMandelbrot(mandelReal, mandelImag, outputImage, sizeof(float)*W, sizeof(uint32_t)*W, W*i/numTasks, 0, 1, W/numTasks, H, left, top, incrX, incrY, numItersDoneOnCanvas, numItersPerFrame);
362 double t1 = emscripten_get_now();
363 timeSpentInMandelbrot[0] += t1-t0;
364 }
365#else
366 emscripten_atomic_fence();
367
368 numTasks = EM_ASM_INT(return globalThis.document?.getElementById('num_threads') ? parseInt(document.getElementById('num_threads').value) : 1);
369 if (numTasks < 1) numTasks = 1;
370 if (numTasks > emscripten_num_logical_cores()) numTasks = emscripten_num_logical_cores();
371
372 // Register tasks.
373 tasksDone = 0;
374 emscripten_atomic_fence();
375 for(int i = 0; i < numTasks; ++i)
376 {
377 tasksPending[i] = 1;
378 emscripten_futex_wake(&tasksPending[i], 999);
379 }
380#endif
381}
382
383void wait_tasks()
384{

Callers 2

main_tickFunction · 0.85
mainFunction · 0.85

Calls 6

ComputeMandelbrot_SSEFunction · 0.85
ComputeMandelbrotFunction · 0.85
emscripten_atomic_fenceFunction · 0.85
emscripten_get_nowFunction · 0.50
emscripten_futex_wakeFunction · 0.50

Tested by

no test coverage detected