|
Message-ID: <017a01ce3d36$9af18190$d0d484b0$@net> Date: Fri, 19 Apr 2013 14:46:37 -0500 From: "jfoug" <jfoug@....net> To: <john-dev@...ts.openwall.com> Subject: RE: Got all dyna formats (except $1$ and $apr1$) working with OMP From: magnum Sent: Friday, April 19, 2013 13:33 > >Sometimes the optimizers do really astonishing things, sometimes they, well, don't. What happened here, was a standard memory access to a static data element was changed to an inline function call. If we were building with OMP, then within that inline function call there was an external call, and not simply a memory read. Here is the code as I originally did it (in the string copy sections) ..... if (md5_unicode_convert) { ..... } else { } This changed to: ..... if (md5_unicode_convert_get()) { ..... } else { } with the md5_unicode_convert_get function being: static inline int md5_unicode_convert_get() { #ifdef _OPENMP return md5_unicode_convert[omp_get_thread_num()]; #else return md5_unicode_convert[0]; #endif } So the original code went from: if(somevar) ... to if(somevar[omp_get_thread_num()]) .... if in OMP mode. That is a HUGE change if done a couple million times per second, and was not an obvious side effect at first. So the parent function parameters were changed, so that the threadid is passed in, and the if() was changed to: if(md5_unicode_convert_get(tid)) and the inline function (which actually now could be eliminated) is: static inline int md5_unicode_convert_get(int tid) { return md5_unicode_convert[tid]; } so now our code ends up being changed from this: if(somevar) ... to this: if(somevar[tid]) ... That is a huge improvement. However, the downside is we now have to pass around the tid as a param. It 'may' be that I can go from 3 params, to 1, and simply pass a pointer to an object owned by the thread. That object would contain the 3 params (starting candidate, ending candidate, and thread id). However now every access would have a pointer dereference to get to those data items. I am not sure if that would be a gain or loss. But it may be a 'good' gain, as I could possibly eliminate some mmx_coef 'math' done at many steps. Do that work 1 time, and then simply access the variables, vs having to access them, modify them, and then proceed. I will look into this. Weekend is coming up, and I think I will have to time experiment some. I will be getting the patch to the 'current' 3 param changes in very soon. I am running some final testing on it now. Jim.
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.