448,957 Members | 1,218 Online
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 448,957 IT Pros & Developers. It's quick & easy.

# Loop unrolling question. Does this make sense?

 P: n/a Hello, I have sort of a newbie question. I'm trying to optimize a loop by breaking it into two passes. Example: for(i = 0; i < max; i++) { do this and this } (The value of max is not known) I want to change it to this: for(i = 0; i < max /2; i++) { do this and this } for(i = max /2; i < max; i++) { do this and this } Does this make sense and will I get anything out of it? Jul 19 '05 #1
5 Replies

 P: n/a "John Edwards" wrote... I have sort of a newbie question. I'm trying to optimize a loop by breaking it into two passes. Example: for(i = 0; i < max; i++) { do this and this } (The value of max is not known) I want to change it to this: for(i = 0; i < max /2; i++) { do this and this } for(i = max /2; i < max; i++) { do this and this } Does this make sense and will I get anything out of it? No, you will not. You might be able to get something out of if (max & 1) { do this and this } for (i = 0; i < max/2; ++i) { do this and this do this and this } Of course, if 'do this and this' uses 'i' somehow, it may not be worth unrolling, since any arithmetic will chew up any time you save by unrolling. Victor Jul 19 '05 #2

 P: n/a On Sun, 06 Jul 2003 20:06:24 GMT, John Edwards wrote: Hello, I have sort of a newbie question. I'm trying to optimize a loop by breaking it into two passes. Example: for(i = 0; i < max; i++) { do this and this } (The value of max is not known) I want to change it to this: for(i = 0; i < max /2; i++) { do this and this } for(i = max /2; i < max; i++) { do this and this } Does this make sense and will I get anything out of it? Not really and it will run slower. Loop unrolling looks like: for(i=0;i

 P: n/a "John Edwards" wrote... So what you're saying is that unless they are using 'i', it may not be worth it? No, I said exactly the opposite. 'Do this & that' is actually doing writes for vector graphics. "Victor Bazarov" wrote in message news:vg************@corp.supernews.com... "John Edwards" wrote... I have sort of a newbie question. I'm trying to optimize a loop by breaking it into two passes. Example: for(i = 0; i < max; i++) { do this and this } (The value of max is not known) I want to change it to this: for(i = 0; i < max /2; i++) { do this and this } for(i = max /2; i < max; i++) { do this and this } Does this make sense and will I get anything out of it? No, you will not. You might be able to get something out of if (max & 1) { do this and this } for (i = 0; i < max/2; ++i) { do this and this do this and this } Of course, if 'do this and this' uses 'i' somehow, it may not be worth unrolling, since any arithmetic will chew up any time you save by unrolling. Victor Jul 19 '05 #4

 P: n/a John Edwards wrote: Hello, I have sort of a newbie question. I'm trying to optimize a loop by breaking it into two passes. Example: for(i = 0; i < max; i++) { do this and this } (The value of max is not known) I want to change it to this: for(i = 0; i < max /2; i++) { do this and this } for(i = max /2; i < max; i++) { do this and this } Does this make sense and will I get anything out of it? Unfortunately, you seem not to have a real understanding of what loop unrolling is. May I refer you to the following link? http://users.chariot.net.au/~matty/u...Unrolling.html BTW -- your question is really not topical here (as, at its heart, it is not a question about the C++ language). Your compiler may have an optimization option to unroll loops (see your documentation); in any event, micro-optimizations at the source code level should only be performed if you have empirically determined (by, e.g. profiling) that a particular piece of code is causing a bottleneck. HTH, --ag -- Artie Gold -- Austin, Texas ----== Posted via Newsfeed.Com - Unlimited-Uncensored-Secure Usenet News==---- http://www.newsfeed.com The #1 Newsgroup Service in the World! >100,000 Newsgroups ---= 19 East/West-Coast Specialized Servers - Total Privacy via Encryption =--- Jul 19 '05 #5

 P: n/a John Edwards wrote: Hello, I have sort of a newbie question. I'm trying to optimize a loop by breaking it into two passes. Example: for(i = 0; i < max; i++) { do this and this } (The value of max is not known) I want to change it to this: for(i = 0; i < max /2; i++) { do this and this } for(i = max /2; i < max; i++) { do this and this } Does this make sense and will I get anything out of it? The standard technique of loop unrolling is to repeat the statements inside the loop and adjusting the counter; not to repeate the loops. The goal is to divide the cost (overhead) of updating and comparing the indices over the cost of the statements. For example, repeating the inner block twice will reduce the overhead cost by 1/2. Be aware that the number of iterations must be evenly divisible by the number of statement repetitions. Guide to Optimization --------------------- 1. Don't. Get the program working correctly first. 2. Don't. Use a profiler and analyze the program execution. The 80/20 rule states that 80% of the program's execution occurs in 20% of the code. 3. Review function designs. A lot of execution gain can be obtained at the design level. Remove unused functions, operations, data and code. Simplify repetitive operations. Don't process data unless required to do so (lazy processing). 4. Inline function calls for small sized functions. If the content of the function is smaller or slightly larger than the overhead of the function call, inline it. 5. Factor out constant expressions and statements from loops. 6. Review floating point operational costs. Some processors choke on fp operations, some have no extra cost. If there is a penalty (or additional cost) keep everything as integers until the last moment. 7. Unroll loops, if you have the code space. 8. Replace function contents with assembly language. Write the assembly language function to take advantage of any special (helpful) processor features, such as pipelining or caches. -- Thomas Matthews C++ newsgroup welcome message: http://www.slack.net/~shiva/welcome.txt C++ Faq: http://www.parashift.com/c++-faq-lite C Faq: http://www.eskimo.com/~scs/c-faq/top.html alt.comp.lang.learn.c-c++ faq: http://www.raos.demon.uk/acllc-c++/faq.html Other sites: http://www.josuttis.com -- C++ STL Library book Jul 19 '05 #6

### This discussion thread is closed

Replies have been disabled for this discussion.