I worked on a massively threaded signal processing application a few years ago.  We manually set all of our thread affinities due to the issues raised in this article.  We were also using the real-time kernel and round robin scheduler, though, so we had other considerations as well.