UE3 is not fully multithreaded (it uses some threads but not all. no game engine really is AFAIK), and unrealscript is single-threaded, so don’t rely on your cpu threads for guidance.
start by running ‘stat unit’ and see if your game is bottlenecked by the cpu (Draw means cpu rendering thread[s], Game means the cpu game thread[s]) or the gpu (simply GPU)
if the gpu is the main problem then run a ‘profilegpu’ and check the log, you’ll see the timings of your gpu processes on that frame
if it’s the cpu then check around all the other stats like stat scenerendering, stat octree, stat physics and so on (there’s many of them, you can easily find and toggle them if you run the game with the remotecontrol) and then obviously stat game. if the cpu is the bottleneck you’ll need to understand if it’s your game code (stat game) or some other engine cpu thing like physics, occlusion, particle processing, etc.
if you find that your game code is a major blocker you can dive deeper using the gameplay profiler (look in the docs for that, basically ‘profilegame 3’ will capture 3 seconds of gameplay into a profile, then open it with the gameplay profiler tool), and check specifically the code functions that might cause problems (and even get to optimize some things you didn’t know could be slowing down your game a bit)
given that your game is slowed down by player structures my guess is your bottleneck will be on the rendering thread, but no better way to know until you find out for sure