mirror of
https://github.com/DeeJanuz/frametop.git
synced 2026-10-06 05:00:08 +02:00
Eye tracker: one thread for OpenCV and numpy
Nothing called cv2.setNumThreads, so OpenCV kept a pool of one worker per core for pupil windows of 140 to 240 px. Live, its idle workers spun and yielded about 14,000 times a second each, about a quarter of a core, next to SteamVR's compositor. numpy's OpenBLAS also started 8 threads that never had work. eyes_pupil.py now sets OpenCV to one thread, and ft-eyes sets OPENBLAS_NUM_THREADS and OMP_NUM_THREADS to 1 before numpy loads (a value already in the environment wins). Replaying fit1 into a scratch share (ft-eyes-replay, 14 s measured, capped at one core with the replay): threads 13 -> 1, involuntary context switches 3,812/s -> 430/s, system time 6.9% -> 1.6% of a core. Under that cap the frames it kept up with went from 21-36 to 57-69 a second per eye. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
06c4ff9556
commit
8a02e41b21
3 files changed
+13
-3
No files matched your search
@@ -58,7 +58,12 @@ import time
|
||||
from collections import deque
|
||||
from pathlib import Path
|
||||
|
||||
import numpy as np
|
||||
# One thread for numpy's BLAS and OpenMP, set before numpy loads: it would start one per core
|
||||
# (8 here) for small arrays that never need them. eyes_pupil keeps OpenCV to one as well.
|
||||
for _var in ("OPENBLAS_NUM_THREADS", "OMP_NUM_THREADS"):
|
||||
os.environ.setdefault(_var, "1")
|
||||
|
||||
import numpy as np # noqa: E402
|
||||
|
||||
sys.path.insert(0, str(Path(__file__).resolve().parent))
|
||||
import eyes_model # noqa: E402
|
||||
|
||||
Reference in new issue
Block a user