Hi JP, thanks. Did you notice that the make tuneup caused an error. Did you mean to do make speed?
It's not at all clear to me which is the better assembly source. We only care about the speed of the basecase up to the crossover with karatsuba, which seems to be very low, maybe 14 (assuming that make error didn't affect things). >From 1-13 limbs 10 of the 13 values are lower with Jason's code. So I think we should stick with it on the atom. But I'll wait for you to confirm that the make error didn't actually stop speed being rebuilt. Bill. On 18 February 2014 10:24, Jean-Pierre Flori <jpfl...@gmail.com> wrote: > Here are proper timings for both sqr_squarebase and kara_sqr_n on atom in > 64bit mode. > It seems the generic assembly is slightly faster. > For some reason the tuning utility build failed, I'll have a look tonight. > > > # with mpn/x86_64/atom/mpn_sqr_basecase > > overhead 0.000000005 secs, precision 1000000 units of 6.00e-10 secs, CPU > freq 1667.00 MHz > mpn_sqr_basecase > 1 0.000000016 > 2 0.000000043 > 3 0.000000104 > 4 0.000000176 > 5 0.000000249 > 6 0.000000334 > 7 0.000000432 > 8 0.000000544 > 9 0.000000670 > 10 0.000000808 > > 11 0.000000959 > 12 0.000001124 > 13 0.000001303 > 14 0.000001502 > 15 0.000001706 > 16 0.000001924 > 17 0.000002155 > 18 0.000002415 > > 19 0.000002655 > 20 0.000002926 > 21 0.000003210 > 22 0.000003506 > 23 0.000003815 > 24 0.000004157 > > 25 0.000004486 > 26 0.000004834 > 27 0.000005197 > 28 0.000005582 > 29 0.000005963 > 30 0.000006364 > 31 0.000006780 > 32 0.000007218 > 33 0.000007680 > 34 0.000008165 > 35 0.000008641 > 36 0.000009172 > 37 0.000009654 > 38 0.000010184 > 39 0.000010713 > 40 0.000011271 > 41 0.000011829 > 42 0.000012377 > 43 0.000012970 > 44 0.000013585 > 45 0.000014193 > 46 0.000014788 > 47 0.000015423 > 48 0.000016112 > 49 0.000016762 > 50 0.000017411 > 51 0.000018119 > 52 0.000018861 > 53 0.000019578 > 54 0.000020279 > 55 0.000021021 > 56 0.000021816 > 57 0.000022594 > 58 0.000023349 > 59 0.000024162 > 60 0.000024999 > 61 0.000025832 > 62 0.000026648 > 63 0.000027486 > 64 0.000028397 > 65 0.000029334 > 66 0.000030221 > 67 0.000031158 > 68 0.000032094 > 69 0.000033024 > 70 0.000033927 > 71 0.000034871 > 72 0.000035875 > 73 0.000036867 > 74 0.000037832 > 75 0.000038838 > 76 0.000039895 > 77 0.000040944 > 78 0.000041958 > 79 0.000043020 > 80 0.000044112 > 81 0.000045487 > 82 0.000046551 > 83 0.000047637 > 84 0.000048805 > 85 0.000049928 > 86 0.000051082 > 87 0.000052226 > 88 0.000053445 > 89 0.000054623 > 90 0.000055803 > 91 0.000056999 > 92 0.000058272 > 93 0.000059503 > 94 0.000060762 > 95 0.000062011 > 96 0.000063335 > 97 0.000069153 > 98 0.000065906 > 99 0.000067208 > 100 0.000068585 > > overhead 0.000000005 secs, precision 1000000 units of 6.00e-10 secs, CPU > freq 1667.00 MHz > mpn_kara_sqr_n > 1 n/a > 2 n/a > 3 n/a > 4 n/a > 5 n/a > 6 n/a > 7 n/a > 8 0.000000638 > 9 0.000000797 > 10 0.000000875 > 11 0.000001057 > 12 0.000001139 > 13 0.000001349 > 14 0.000001444 > 15 0.000001691 > 16 0.000001795 > 17 0.000002069 > 18 0.000002185 > 19 0.000002482 > 20 0.000002608 > 21 0.000002933 > 22 0.000003071 > 23 0.000003424 > 24 0.000003576 > 25 0.000003956 > 26 0.000004129 > 27 0.000004556 > 28 0.000004739 > 29 0.000005170 > 30 0.000005368 > 31 0.000005809 > 32 0.000006024 > 33 0.000006499 > 34 0.000006735 > 35 0.000007253 > 36 0.000007504 > 37 0.000007531 > 38 0.000007734 > 39 0.000008046 > 40 0.000008152 > 41 0.000008886 > 42 0.000009114 > 43 0.000009428 > 44 0.000009562 > 45 0.000010374 > 46 0.000010622 > 47 0.000010947 > 48 0.000011071 > 49 0.000011944 > 50 0.000012230 > 51 0.000012603 > 52 0.000012782 > 53 0.000013684 > 54 0.000014049 > 55 0.000014461 > 56 0.000014620 > 57 0.000015542 > 58 0.000015954 > 59 0.000016354 > 60 0.000016542 > 61 0.000017496 > 62 0.000017854 > 63 0.000018321 > 64 0.000018526 > 65 0.000019526 > 66 0.000019964 > 67 0.000020452 > 68 0.000020684 > 69 0.000021760 > 70 0.000022234 > 71 0.000022777 > 72 0.000023000 > 73 0.000023233 > 74 0.000023192 > 75 0.000023532 > 76 0.000023743 > 77 0.000024519 > 78 0.000024677 > 79 0.000024947 > 80 0.000025113 > 81 0.000026618 > 82 0.000027324 > 83 0.000027783 > 84 0.000028011 > 85 0.000028706 > 86 0.000028869 > 87 0.000029194 > 88 0.000029295 > 89 0.000031048 > 90 0.000031847 > 91 0.000032358 > 92 0.000032591 > 93 0.000033331 > 94 0.000033540 > 95 0.000033855 > 96 0.000034065 > 97 0.000035837 > 98 0.000036601 > 99 0.000037108 > 100 0.000037399 > make tuneup > make[1]: entrant dans le répertoire « /home/choupi/mpir/tune » > gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I.. -I.. -I../tests -m64 -O2 > -march=atom -mtune=atom -c mul.c > gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I.. -I.. -I../tests -m64 -O2 > -march=atom -mtune=atom -c tdiv_qr.c > gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I.. -I.. -I../tests -m64 -O2 > -march=atom -mtune=atom -c toom4_mul_n.c > gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I.. -I.. -I../tests -m64 -O2 > -march=atom -mtune=atom -c toom4_mul.c > gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I.. -I.. -I../tests -m64 -O2 > -march=atom -mtune=atom -c toom3_mul.c > gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I.. -I.. -I../tests -m64 -O2 > -march=atom -mtune=atom -c toom3_mul_n.c > gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I.. -I.. -I../tests -m64 -O2 > -march=atom -mtune=atom -c toom8h_mul.c > gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I.. -I.. -I../tests -m64 -O2 > -march=atom -mtune=atom -c toom8_sqr_n.c > gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I.. -I.. -I../tests -m64 -O2 > -march=atom -mtune=atom -c mulmod_2expm1.c > gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I.. -I.. -I../tests -m64 -O2 > -march=atom -mtune=atom -c rootrem.c > gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I.. -I.. -I../tests -m64 -O2 > -march=atom -mtune=atom -c divrem_euclidean_r_1.c > gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I.. -I.. -I../tests -m64 -O2 > -march=atom -mtune=atom -c divrem_hensel_qr_1.c > gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I.. -I.. -I../tests -m64 -O2 > -march=atom -mtune=atom -c rsh_divrem_hensel_qr_1.c > gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I.. -I.. -I../tests -m64 -O2 > -march=atom -mtune=atom -c dc_divappr_q.c > gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I.. -I.. -I../tests -m64 -O2 > -march=atom -mtune=atom -c dc_div_qr.c > gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I.. -I.. -I../tests -m64 -O2 > -march=atom -mtune=atom -c dc_div_qr_n.c > gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I.. -I.. -I../tests -m64 -O2 > -march=atom -mtune=atom -c inv_divappr_q.c > gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I.. -I.. -I../tests -m64 -O2 > -march=atom -mtune=atom -c inv_div_qr.c > gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I.. -I.. -I../tests -m64 -O2 > -march=atom -mtune=atom -c tdiv_q.c > gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I.. -I.. -I../tests -m64 -O2 > -march=atom -mtune=atom -c dc_bdiv_qr.c > gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I.. -I.. -I../tests -m64 -O2 > -march=atom -mtune=atom -c dc_bdiv_qr_n.c > gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I.. -I.. -I../tests -m64 -O2 > -march=atom -mtune=atom -c dc_bdiv_q.c > for i in split_bits.c revbin.c normmod_2expp1.c mulmod_2expp1.c > mul_trunc_sqrt2.c mul_mfa_trunc_sqrt2.c mul_fft_main.c mul_2expmod_2expp1.c > ifft_trunc_sqrt2.c ifft_trunc.c ifft_radix2.c ifft_negacyclic.c fft_trunc.c > fft_radix2.c fft_negacylic.c fft_mfa_trunc_sqrt2.c > fft_mfa_trunc_sqrt2_inner.c fermat_to_mpz.c div_2expmod_2expp1.c > combine_bits.c butterfly_rshB.c butterfly_lshB.c adjust_sqrt2.c adjust.c; > do \ > echo "#define TUNE_PROGRAM_BUILD 1" >$i; \ > echo "#include \"fft/$i\"" >>$i; \ > done > gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I.. -I.. -I../tests -m64 -O2 > -march=atom -mtune=atom -c split_bits.c > gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I.. -I.. -I../tests -m64 -O2 > -march=atom -mtune=atom -c revbin.c > gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I.. -I.. -I../tests -m64 -O2 > -march=atom -mtune=atom -c normmod_2expp1.c > gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I.. -I.. -I../tests -m64 -O2 > -march=atom -mtune=atom -c mulmod_2expp1.c > gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I.. -I.. -I../tests -m64 -O2 > -march=atom -mtune=atom -c mul_trunc_sqrt2.c > gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I.. -I.. -I../tests -m64 -O2 > -march=atom -mtune=atom -c mul_mfa_trunc_sqrt2.c > gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I.. -I.. -I../tests -m64 -O2 > -march=atom -mtune=atom -c mul_fft_main.c > gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I.. -I.. -I../tests -m64 -O2 > -march=atom -mtune=atom -c mul_2expmod_2expp1.c > gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I.. -I.. -I../tests -m64 -O2 > -march=atom -mtune=atom -c ifft_trunc_sqrt2.c > gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I.. -I.. -I../tests -m64 -O2 > -march=atom -mtune=atom -c ifft_trunc.c > gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I.. -I.. -I../tests -m64 -O2 > -march=atom -mtune=atom -c ifft_radix2.c > gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I.. -I.. -I../tests -m64 -O2 > -march=atom -mtune=atom -c ifft_negacyclic.c > gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I.. -I.. -I../tests -m64 -O2 > -march=atom -mtune=atom -c fft_trunc.c > gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I.. -I.. -I../tests -m64 -O2 > -march=atom -mtune=atom -c fft_radix2.c > gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I.. -I.. -I../tests -m64 -O2 > -march=atom -mtune=atom -c fft_negacylic.c > gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I.. -I.. -I../tests -m64 -O2 > -march=atom -mtune=atom -c fft_mfa_trunc_sqrt2.c > gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I.. -I.. -I../tests -m64 -O2 > -march=atom -mtune=atom -c fft_mfa_trunc_sqrt2_inner.c > gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I.. -I.. -I../tests -m64 -O2 > -march=atom -mtune=atom -c fermat_to_mpz.c > gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I.. -I.. -I../tests -m64 -O2 > -march=atom -mtune=atom -c div_2expmod_2expp1.c > gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I.. -I.. -I../tests -m64 -O2 > -march=atom -mtune=atom -c combine_bits.c > gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I.. -I.. -I../tests -m64 -O2 > -march=atom -mtune=atom -c butterfly_rshB.c > gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I.. -I.. -I../tests -m64 -O2 > -march=atom -mtune=atom -c butterfly_lshB.c > gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I.. -I.. -I../tests -m64 -O2 > -march=atom -mtune=atom -c adjust_sqrt2.c > gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I.. -I.. -I../tests -m64 -O2 > -march=atom -mtune=atom -c adjust.c > echo "#define TUNE_PROGRAM_BUILD 1" >divrem_1.c > echo "#define __gmpn_divrem_1 mpn_divrem_1_tune" >>divrem_1.c > echo "#include \"mpn/generic/divrem_1.c\"" >>divrem_1.c > gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I.. -I.. -I../tests -m64 -O2 > -march=atom -mtune=atom -c divrem_1.c > echo "#define TUNE_PROGRAM_BUILD 1" >mod_1.c > echo "#define __gmpn_mod_1 mpn_mod_1_tune" >>mod_1.c > echo "#include \"mpn/generic/mod_1.c\"" >>mod_1.c > gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I.. -I.. -I../tests -m64 -O2 > -march=atom -mtune=atom -c mod_1.c > /bin/bash ../libtool --tag=CC --mode=link gcc -std=gnu99 -m64 -O2 > -march=atom -mtune=atom -static -o tuneup tuneup.o sqr_basecase.o > divrem_2.o gcd.o gcdext.o get_str.o mul_n.o mullow_n.o mulhigh_n.o mul.o > tdiv_qr.o toom4_mul_n.o toom4_mul.o toom3_mul.o toom3_mul_n.o toom8h_mul.o > toom8_sqr_n.o mulmod_2expm1.o rootrem.o divrem_euclidean_r_1.o > divrem_hensel_qr_1.o rsh_divrem_hensel_qr_1.o dc_divappr_q.o dc_div_qr.o > dc_div_qr_n.o inv_divappr_q.o inv_div_qr.o tdiv_q.o dc_bdiv_qr.o > dc_bdiv_qr_n.o dc_bdiv_q.o split_bits.o revbin.o normmod_2expp1.o > mulmod_2expp1.o mul_trunc_sqrt2.o mul_mfa_trunc_sqrt2.o mul_fft_main.o > mul_2expmod_2expp1.o ifft_trunc_sqrt2.o ifft_trunc.o ifft_radix2.o > ifft_negacyclic.o fft_trunc.o fft_radix2.o fft_negacylic.o > fft_mfa_trunc_sqrt2.o fft_mfa_trunc_sqrt2_inner.o fermat_to_mpz.o > div_2expmod_2expp1.o combine_bits.o butterfly_rshB.o butterfly_lshB.o > adjust_sqrt2.o adjust.o divrem_1.o mod_1.o libspeed.la > libtool: link: gcc -std=gnu99 -m64 -O2 -march=atom -mtune=atom -o tuneup > tuneup.o sqr_basecase.o divrem_2.o gcd.o gcdext.o get_str.o mul_n.o > mullow_n.o mulhigh_n.o mul.o tdiv_qr.o toom4_mul_n.o toom4_mul.o > toom3_mul.o toom3_mul_n.o toom8h_mul.o toom8_sqr_n.o mulmod_2expm1.o > rootrem.o divrem_euclidean_r_1.o divrem_hensel_qr_1.o > rsh_divrem_hensel_qr_1.o dc_divappr_q.o dc_div_qr.o dc_div_qr_n.o > inv_divappr_q.o inv_div_qr.o tdiv_q.o dc_bdiv_qr.o dc_bdiv_qr_n.o > dc_bdiv_q.o split_bits.o revbin.o normmod_2expp1.o mulmod_2expp1.o > mul_trunc_sqrt2.o mul_mfa_trunc_sqrt2.o mul_fft_main.o mul_2expmod_2expp1.o > ifft_trunc_sqrt2.o ifft_trunc.o ifft_radix2.o ifft_negacyclic.o fft_trunc.o > fft_radix2.o fft_negacylic.o fft_mfa_trunc_sqrt2.o > fft_mfa_trunc_sqrt2_inner.o fermat_to_mpz.o div_2expmod_2expp1.o > combine_bits.o butterfly_rshB.o butterfly_lshB.o adjust_sqrt2.o adjust.o > divrem_1.o mod_1.o ./.libs/libspeed.a /home/choupi/mpir/.libs/libmpir.a -lm > tuneup.o: file not recognized: File truncated > collect2: ld returned 1 exit status > make[1]: *** [tuneup] Erreur 1 > make[1]: quittant le répertoire « /home/choupi/mpir/tune » > make: *** [tune] Erreur 2 > overhead 0.000000007 secs, precision 1000000 units of 6.00e-10 secs, CPU > freq 1667.00 MHz > mpn_sqr_basecase > 1 0.000000033 > 2 0.000000064 > 3 0.000000112 > 4 0.000000177 > 5 0.000000284 > 6 0.000000393 > 7 0.000000512 > 8 0.000000645 > 9 0.000000782 > 10 0.000000936 > 11 0.000000893 > 12 0.000001045 > 13 0.000001211 > 14 0.000001384 > 15 0.000001574 > 16 0.000001774 > 17 0.000002184 > 18 0.000002492 > 19 0.000002830 > 20 0.000003123 > 21 0.000003278 > 22 0.000003647 > 23 0.000003506 > 24 0.000003808 > 25 0.000004109 > 26 0.000004432 > 27 0.000004772 > 28 0.000005406 > 29 0.000005979 > 30 0.000006342 > 31 0.000006793 > 32 0.000007469 > 33 0.000007715 > 34 0.000007496 > 35 0.000007880 > 36 0.000008317 > 37 0.000008775 > 38 0.000009243 > 39 0.000009716 > 40 0.000011395 > 41 0.000012117 > 42 0.000011332 > 43 0.000011761 > 44 0.000012274 > 45 0.000012836 > 46 0.000014248 > 47 0.000015515 > 48 0.000015599 > 49 0.000015158 > 50 0.000015758 > 51 0.000016389 > 52 0.000017025 > 53 0.000017758 > 54 0.000021210 > 55 0.000021674 > 56 0.000020952 > 57 0.000021985 > 58 0.000021063 > 59 0.000021775 > 60 0.000023977 > 61 0.000023240 > 62 0.000023989 > 63 0.000024749 > 64 0.000025527 > 65 0.000026310 > 66 0.000027106 > 67 0.000027913 > 68 0.000028738 > 69 0.000029568 > 70 0.000030413 > 71 0.000031267 > 72 0.000032139 > 73 0.000033018 > 74 0.000033909 > 75 0.000034812 > 76 0.000035730 > 77 0.000036656 > 78 0.000037595 > 79 0.000038544 > 80 0.000039512 > 81 0.000040674 > 82 0.000041803 > 83 0.000042467 > 84 0.000044026 > 85 0.000044502 > 86 0.000045816 > 87 0.000046580 > 88 0.000047936 > 89 0.000048709 > 90 0.000059347 > 91 0.000050885 > 92 0.000052231 > 93 0.000053105 > 94 0.000054451 > 95 0.000055382 > 96 0.000056924 > 97 0.000057692 > 98 0.000059067 > 99 0.000060058 > 100 0.000061432 > > overhead 0.000000005 secs, precision 1000000 units of 6.00e-10 secs, CPU > freq 1667.00 MHz > mpn_kara_sqr_n > 1 n/a > 2 n/a > 3 n/a > 4 n/a > 5 n/a > 6 n/a > 7 n/a > 8 0.000000536 > 9 0.000000737 > 10 0.000000809 > 11 0.000000996 > 12 0.000001059 > 13 0.000001277 > 14 0.000001431 > 15 0.000001591 > 16 0.000001676 > 17 0.000001942 > 18 0.000002045 > 19 0.000002329 > 20 0.000002443 > 21 0.000002752 > 22 0.000002872 > 23 0.000003209 > 24 0.000003337 > 25 0.000004098 > 26 0.000004494 > 27 0.000004249 > 28 0.000004392 > 29 0.000004814 > 30 0.000004963 > 31 0.000005427 > 32 0.000005586 > 33 0.000006083 > 34 0.000006244 > 35 0.000006711 > 36 0.000006910 > 37 0.000007005 > 38 0.000007277 > 39 0.000007544 > 40 0.000007649 > 41 0.000008325 > 42 0.000008582 > 43 0.000008840 > 44 0.000008974 > 45 0.000009697 > 46 0.000009985 > 47 0.000010272 > 48 0.000010425 > 49 0.000012963 > 50 0.000013944 > 51 0.000011808 > 52 0.000011950 > 53 0.000012792 > 54 0.000013129 > 55 0.000013432 > 56 0.000013596 > 57 0.000014457 > 58 0.000015562 > 59 0.000015171 > 60 0.000015323 > 61 0.000016425 > 62 0.000016709 > 63 0.000017073 > 64 0.000017223 > 65 0.000018343 > 66 0.000018633 > 67 0.000019042 > 68 0.000019220 > 69 0.000020199 > 70 0.000020616 > 71 0.000021027 > 72 0.000021216 > 73 0.000021522 > 74 0.000021616 > 75 0.000022090 > 76 0.000022361 > 77 0.000022977 > 78 0.000023149 > 79 0.000023473 > 80 0.000023537 > 81 0.000024844 > 82 0.000025452 > 83 0.000026019 > 84 0.000026327 > 85 0.000027028 > 86 0.000027084 > 87 0.000027405 > 88 0.000027466 > 89 0.000029053 > 90 0.000029718 > 91 0.000030339 > 92 0.000030628 > 93 0.000031263 > 94 0.000036677 > 95 0.000037286 > 96 0.000037099 > 97 0.000038554 > 98 0.000040116 > 99 0.000034797 > 100 0.000035127 > > > -- You received this message because you are subscribed to the Google Groups "mpir-devel" group. To unsubscribe from this group and stop receiving emails from it, send an email to mpir-devel+unsubscr...@googlegroups.com. To post to this group, send email to mpir-devel@googlegroups.com. Visit this group at http://groups.google.com/group/mpir-devel. For more options, visit https://groups.google.com/groups/opt_out.