Here's an example why the OS is smarter then you are:
Back in the dark ages, most programming languages had the "register" attribute, which would tell the compiler to keep a specific variable in a register whenever possible. This was supposedly an optimization, because some often-read data would increase performance if it never had to be read from main memory. [Remember, this was before large CPU caches existed].
In every case I can think off, use of this attribute tanked performance, because frankly, the optimizing compiler was smarter then the guys writing the software in the first place when it came to optimizing code.
Same logic applies here. The scheduler is going to use the core that makes the most sense when assigning a core to a thread. And the OS will run a thread when its priority/wait time dictates it should be run.