Just as with everything else, it depends on what the SP is doing. If you are using dynamic SQL in the sp, then it probably is not going to improve performance.
If the most efficient execution plan changes wildly from execution to execution (even without using dynamic SQL), then the benefits of pre-compiling the execution plan may not be there and the database may at times use a less efficent execution plan. Some things have to be taken on a case by case basis.
These kinds of problems and their fixes can get very complex and the best route I have found towards understanding them is to get a good book on performance tuning. This is an extremely complex subject which is not taught to most people and, in my opinion, should be the basis of your computer education once you get beyond the trainee level. Even at the trainee level, people should be taught which code is usually more efficent in general, so that they don't start out writing poorly performing code. For instance, they should be taught that cursors should be avoided.
Questions about posting. See faq183-874