pretty large checkin:
pretty large checkin:

* no more threadpool. the main insight here is that with given the number
of cpus/cores and given the number of permanant threads that i need
(po8, for saving, for gui, etc) running a threadpool no longer helps
and actually hurts performance (context switching?).
 -> so it's gone for now. Now spike detection happens in the worker thread.

* cleaned up ordering of loops and similar in the main worker thread.
The po8e thread now just gets data off of the po8e and into a buffer
which is then serviced by the worker thread. This is where nearly all
processing is done on the raw broadband signal: filtering, artifact removal,
and spike detection. The data saving threads and audio thread still get data
from the main worker.

here is the signal flow:

 [po8e thread] -> [worker thread] -> detected spikes for gui, etc
		     |       ^
                     v       |
                [lms training thread]

* po8e thread now runs at SCHED_FIFO priority. This is a realtime priority.
The idea is that the po8e buffer should never run dry.
Maybe I should make some other threads operate like this too? Audio?

* The nLMS adaptive noise canceler actually WORKS, at least with
artificially generated data. Most importantly, it actually can RUN on all 96
channels without causing problems.


joeyo/spk,joeyo/spk,joeyo/spk,joeyo/spk,joeyo/spk