|
Message-Id: <5E2283F5-5ABE-48F7-B427-27D370267638@gmail.com> Date: Tue, 12 May 2015 15:47:23 +0800 From: Lei Zhang <zhanglei.april@...il.com> To: john-dev@...ts.openwall.com Subject: Re: Adding OpenMP support to SunMD5 > On May 12, 2015, at 12:42 AM, Solar Designer <solar@...nwall.com> wrote: > >> This (higher c/s rate for OMP_NUM_THREADS >> number of cores) matches my >> experience for sunmd5 on my hardware. > > This suggests that "the problem" is false sharing or something like it. > When you increase OMP_NUM_THREADS above the number of logical CPUs, you > have the threads that are actually run on the CPUs concurrently (with > the rest waiting to be scheduled by the kernel's scheduler) work on > memory regions that are farther away from each other. I inspected the code to find potential spots of false sharing, and made a few modifications which hopefully should avoid false sharing. (...) typedef struct { MD5_CTX context; /* working buffer for MD5 algorithm */ unsigned char digest[DIGEST_LEN]; /* where the MD5 digest is stored */ -} Contx, *pConx; +} JTR_ALIGN(MEM_ALIGN_CACHE) Contx, *pConx; static Contx *data; (...) - input_buf = mem_calloc_align(ngroups, sizeof(*input_buf), MEM_ALIGN_SIMD); - input_buf_big = mem_calloc_align(ngroups, sizeof(*input_buf_big), MEM_ALIGN_SIMD); - out_buf = mem_calloc_align(ngroups, sizeof(*out_buf), MEM_ALIGN_SIMD); + input_buf = mem_calloc_align(ngroups, sizeof(*input_buf), MEM_ALIGN_CACHE); + input_buf_big = mem_calloc_align(ngroups, sizeof(*input_buf_big), MEM_ALIGN_CACHE); + out_buf = mem_calloc_align(ngroups, sizeof(*out_buf), MEM_ALIGN_CACHE); (...) - data = mem_calloc(self->params.max_keys_per_crypt, sizeof(*data)); + data = mem_calloc_align(self->params.max_keys_per_crypt, sizeof(*data), MEM_ALIGN_CACHE); However, the performance doesn't get better: [lei@...er src]$ GOMP_CPU_AFFINITY=0-31 ../run/john --test --format=sunmd5 Will run 32 OpenMP threads Benchmarking: SunMD5 [MD5 128/128 AVX 4x3]... (32xOMP) DONE Speed for cost 1 (iteration count) of 5000 Raw: 7256 c/s real, 226 c/s virtual Either I'm not doing it the right way, or false sharing is not the real culprit. I'm not sure. Lei
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.