c - Dereferencing iterators performance -


i have 3 functions come down code below, runs 800x800 times:

each while loop below runs 800 times before iter1 == lim, duration measured ran 800x800x800 (512 millions) times.

iter1, iter2 , lim double pointers. point large enough vector of double's.

sum double local variable.

s1 , s2 local unsigned int's, both equal 800.

first runs in 2.257 seconds:

while ( iter1 < lim ) {     sum += *iter1 * *iter2;     ++iter1;     iter2 += s2; } 

second runs in 7.364 seconds:

while ( iter1 < lim ) {     sum += *iter1 * *iter2;     iter1 += s1;     iter2 += s2; } 

third runs in 1.355 seconds:

while ( iter1 < lim ) {     sum += *iter1 * *iter2;     ++iter1;     ++iter2; } 

if remove sum += *iter1 * *iter2; instruction each of them, run in around 1.07 seconds.

if remove second multiplication , change instruction sum += *iter1;, first , third run in 1.33 seconds, while second runs in 1.46 seconds.

if remove other iterator, this: sum += *iter2;, first , second run in around 2.2 seconds, while third runs in 1.35 seconds.

obviously, performance drop tied quantity added iter1 , iter2. no expert in how processor accesses memory , dereferences pointers, hope in community knows more me , willing shed light on problem.

if need information hardware ran these tests on, or else can prove helpful, feel free ask in comments.

edit: problem second function slow, when compared others, , wanted know if there can make run faster, appeared doing similar things other 2.

edit 2: measurements made in release build

this manifestation of data locality. takes less time @ @ next page of book @ 800th next page. try @ home.


Comments

Popular posts from this blog

toolbar - How to add link to user registration inside toobar in admin joomla 3 custom component -

linux - disk space limitation when creating war file -