Mersenne Digest Saturday, October 9 1999 Volume 01 : Number 639 ---------------------------------------------------------------------- Date: Thu, 7 Oct 1999 18:07:28 EDT From: [EMAIL PROTECTED] Subject: Mersenne: Re: register usage Guillermo Ballester Valor wrote: > i) MacLucasUNIX uses intensively the 'register' key in local > definitions, so a processor with many internal registers can allocate > most of them. It is a good thing because they can be accessed very fast. > The bad thing that is that in processors with very few registers (like > intel's) it can slowdown the speed. Brian Beesley replied: << And (according to a local computer scientist, who I think knows what he's talking about) with modern processors making extensive use of register renaming, it's not usually sensible to use the "register" keyword _at all_. The theory is that the instruction scheduler can do at least as good a job as the programmer >> Indeed. I note that when I tried to compile MacLucasUNIX on my Alpha, the C compiler gave me an error message about being unable to allocate sufficient registers in routine FFT_IFFT8 - I had to delete the "register" keyword in that routine to get it to compile. The most complex, register- greedy routine in my Mlucas code, wrapper_square, defines 103 floating- point temporaries, any of which deserves the "register" keyword (were such available in f90, which it isn't) as much as the others. However, typically at most 30 of these temporaries need be in registers at any one time, and a good compiler should be able to decide which registers to use for what and when at least as well (or better) than I can. Since such decisions are going to be hardware-dependent anyway, it's better to leave it up to the compiler. The other nice thing about letting the compiler do this for you is that one can use meaningful variable names, and need not worry too much about minimizing the number of temporaries, which leads to excessive re-use of the same temporary names, and makes understanding/debugging the code harder. On the other hand, I was under the impression that the C "register" keyword was intended as a suggestion to the compiler, not an absolute, i.e. that compilers should be free to heed or ignore the programmer's advice on this point. Looks like whether that's true depends on the compiler. - -Ernst _________________________________________________________________ Unsubscribe & list info -- http://www.scruz.net/~luke/signup.htm Mersenne Prime FAQ -- http://www.tasam.com/~lrwiman/FAQ-mers ------------------------------ Date: Fri, 08 Oct 1999 23:32:34 +1000 From: Simon Burge <[EMAIL PROTECTED]> Subject: Re: Mersenne: Re: register usage [EMAIL PROTECTED] wrote: > On the other hand, I was under the impression that the C "register" > keyword was intended as a suggestion to the compiler, not an absolute, > i.e. that compilers should be free to heed or ignore the programmer's > advice on this point. Looks like whether that's true depends on the compiler. >From what I understand of gcc (the GNU C compiler), the only thing that using "register" affects is what variables are retained by setjmp()/longjmp() - and you don't tend to see those routines being used in numerical code. As to which variables are actually stored in registers, I think gcc ignores the "register" keyword when making those decisions. Indeed, a good optimiser may make some variables disappear altogether, which can make object-level debugging difficult with heavy optimisation enabled... Simon. _________________________________________________________________ Unsubscribe & list info -- http://www.scruz.net/~luke/signup.htm Mersenne Prime FAQ -- http://www.tasam.com/~lrwiman/FAQ-mers ------------------------------ Date: Fri, 8 Oct 1999 11:23:55 -0400 (EDT) From: [EMAIL PROTECTED] Subject: Re: Mersenne: Re: register usage > From what I understand of gcc (the GNU C compiler), > the only thing that using "register" affects is what > variables are retained by setjmp()/longjmp() There are some ANSI C-compliant restrictions on what you can and cannot do with a 'register' variable. For instance, you can't apply it to something that won't fit in the machine word length (like an array), and you cant take the address-of it with &. > in registers, I think gcc ignores the "register" > keyword when making those decisions. >From the horses' mouth (7.1.1.3 in the 1997 ISO public review effort for C++) 3 A register specifier has the same semantics as an auto specifier together with a hint to the implementation that the object so declared will be heavily used. [Note: the hint can be ignored and in most implementations it will be ignored if the address of the object is taken. --end note] It's great that we have to deal with double talk like that these days :) After all, these days something as supposedly horrendous as [esp+4*edx+32] doesn't actually cost a lot. In fact, placing demands on register inclusion can really mess up the pipeline. Chris Nash Lexington KY UNITED STATES _________________________________________________________________ Unsubscribe & list info -- http://www.scruz.net/~luke/signup.htm Mersenne Prime FAQ -- http://www.tasam.com/~lrwiman/FAQ-mers ------------------------------ Date: Fri, 08 Oct 1999 18:36:22 +0200 From: Guillermo Ballester Valor <[EMAIL PROTECTED]> Subject: Re: Mersenne: Re: register usage [EMAIL PROTECTED] wrote: > << And (according to a local computer scientist, who I think knows what > he's talking about) with modern processors making extensive use of > register renaming, it's not usually sensible to use the "register" > keyword _at all_. The theory is that the instruction scheduler can do > at least as good a job as the programmer >> > Before the beginning of FFTW thread, this was the thinking I had about 'register' keyword. I had never used it in my programs. When I was learning C the use of register keyword made the programs slower and so I left to the compiler the good use of them (I remember the compiler was Borland Turbo-C under DOS). > On the other hand, I was under the impression that the C "register" > keyword was intended as a suggestion to the compiler, not an absolute, > i.e. that compilers should be free to heed or ignore the programmer's > advice on this point. Looks like whether that's true depends on the compiler. Yes, I've compiled MacLucasUNIX in my pentium 166-MMX (linux/gcc) and it doesn't give any error or warning about 'register'. My question is still why works so different FFTW on modern RISC processors?. Likely, the use of register is not the answer. The code of FFTW tries to minimize the memory accesses, the mul and add operations and stack temporary variables. Perhaps the weight assigned to every of this task is the correct to intel machines but not for alphas or mips, I don't know. By the way, the memory accesses in FFTW seems very good for intel but I've not seen any similar in Mlucas or MaclucasUNIX. FFTW uses the memory access in the form X[i*iostride] where iostride is not necessary a power of two. I don't know a word about assembler on alpha's or other machine than x86 but perhaps is better to store the offset on a register and then use X[offset] when is needed. Again, a good compiler would have to do it. Regards | Guillermo Ballester Valor | | [EMAIL PROTECTED] | | c/ cordoba, 19 | | 18151-Ogijares (Spain) | | (Linux registered user 1171811) | _________________________________________________________________ Unsubscribe & list info -- http://www.scruz.net/~luke/signup.htm Mersenne Prime FAQ -- http://www.tasam.com/~lrwiman/FAQ-mers ------------------------------ Date: 8 Oct 1999 20:44:41 -0000 From: "D. J. Bernstein" <[EMAIL PROTECTED]> Subject: Mersenne: FFT speed djbfft 0.76 is faster than FFTW on most computers, notably the Pentium and the UltraSPARC: http://pobox.com/~djb/djbfft.html The range of FFT sizes in djbfft 0.76 is too small to support Mersenne testing directly, but it wouldn't be difficult to build tolerably fast big transforms out of the existing pieces. - ---Dan _________________________________________________________________ Unsubscribe & list info -- http://www.scruz.net/~luke/signup.htm Mersenne Prime FAQ -- http://www.tasam.com/~lrwiman/FAQ-mers ------------------------------ Date: Fri, 8 Oct 1999 17:45:43 EDT From: [EMAIL PROTECTED] Subject: Mersenne: Gaudeamus Igitur (Latin for "let's party!") Dear All: Luke Welsh indicates that he'll be in the San Francisco Bay area around the end of October and asked me to announce the SECOND NOT-QUITE-ANNUAL SF BAY MERSENNERS GET-TOGETHER-KIND-OF-DEAL (a.k.a. as GIMPS OktoberGeekFest II.1, rev 1) Of course, any GIMPSer is welcome to attend, whether they live in the bay area or not. Perhaps other areas of the globe with a high concentration of GIMPSers could organize their own local local GOGfests - that would be fun - "you've seen the power of distributed computing, now try distributed imbibing!" (whichever beverage you prefer, of course - not everyone's a beer aficionado like Luke and me). We've settled on a date of Friday, 29 October for the festivities. In an attempt to keep the tradition of the first such meeting, our first choice of venue is the Tied House in Mountain View, whose back patio can accommodate around 50 persons. Of course, we have no idea how many might attend, so if you're reasonably certain you'll be coming, please let me know via private e-mail. Other possible venues include the Faultline pub (I quake at the thought :) and Gordon Biersch (perhaps too small), both in Sunnyvale. Other suggestions for venues are welcome, too. Looking forward to a fun time, - -Ernst "der Bra"umeister" Mayer _________________________________________________________________ Unsubscribe & list info -- http://www.scruz.net/~luke/signup.htm Mersenne Prime FAQ -- http://www.tasam.com/~lrwiman/FAQ-mers ------------------------------ Date: Fri, 8 Oct 1999 23:38:18 +0200 From: "Steinar H. Gunderson" <[EMAIL PROTECTED]> Subject: Mersenne: Re: register usage On Fri, Oct 08, 1999 at 11:32:34PM +1000, Simon Burge wrote: >>From what I understand of gcc (the GNU C compiler), the only thing >that using "register" affects is what variables are retained by >setjmp()/longjmp() >From the gcc manpage: gcc, g++ - GNU project C and C++ Compiler (gcc-2.95) [...] Without `-O', only variables declared register are allocated in registers. /* Steinar * - -- Homepage: http://members.xoom.com/sneeze/ _________________________________________________________________ Unsubscribe & list info -- http://www.scruz.net/~luke/signup.htm Mersenne Prime FAQ -- http://www.tasam.com/~lrwiman/FAQ-mers ------------------------------ Date: Fri, 8 Oct 1999 23:55:05 +0100 From: "Brian J. Beesley" <[EMAIL PROTECTED]> Subject: Re: Mersenne: Re: register usage On 7 Oct 99, at 18:07, [EMAIL PROTECTED] wrote: > On the other hand, I was under the impression that the C "register" > keyword was intended as a suggestion to the compiler, not an absolute, > i.e. that compilers should be free to heed or ignore the programmer's > advice on this point. Looks like whether that's true depends on the compiler. This is indeed true. MS VC++ for Intel (at least up to v5.1) dedicates the ESI & EDI registers for register variables, they are assigned to the first two (integer) variables to be allocated in each block. It _does_ make sense to use the 'register' keyword for the two innermost loop counters (or pointers) because otherwise the object code generated by the compiler doesn't use these registers at all (without pushing their values to the stack & popping them off again, and only then for those peculiar Intel instructions like MOVSB which implicitly use ESI & EDI as pointers). If you declare more than two register variables in a block, the (MS VC++) compiler ignores the register modifier for the third & subsequent declarations. This actually makes sense for a CPU architecture like 486 or "plain" Pentium, but, for P6 architecture chips, experiments indicate that the effects of the use of the "register" keyword in MS VC++ code are variable, but (on average) about neutral. Regards Brian Beesley _________________________________________________________________ Unsubscribe & list info -- http://www.scruz.net/~luke/signup.htm Mersenne Prime FAQ -- http://www.tasam.com/~lrwiman/FAQ-mers ------------------------------ Date: Sat, 9 Oct 1999 17:18:35 +0200 From: "Steinar H. Gunderson" <[EMAIL PROTECTED]> Subject: Mersenne: Re: Re: register usage On Fri, Oct 08, 1999 at 11:55:05PM +0100, Brian J. Beesley wrote: >MS VC++ for Intel (at least up to v5.1) dedicates the ESI & EDI >registers for register variables, they are assigned to the first two >(integer) variables to be allocated in each block. Isn't this a bit weird behaviour? As you said, it helps to use all registers (at least on 486 and Pentium), and having 30% extra registers or so never _hurts_ :-) /* Steinar */ - -- Homepage: http://members.xoom.com/sneeze/ _________________________________________________________________ Unsubscribe & list info -- http://www.scruz.net/~luke/signup.htm Mersenne Prime FAQ -- http://www.tasam.com/~lrwiman/FAQ-mers ------------------------------ Date: Sun, 10 Oct 1999 03:13:28 +0100 From: "Ian L McLoughlin" <[EMAIL PROTECTED]> Subject: Mersenne: Version 19 Problems/Win 98 Hi. Not my remit really ...but having downloaded the new version and unzipped it...with all the parameters and subsidiary crap ..i.e RPC and HTTP files, It suddenly links up to the server and downloads new exponens....I am sure testing LL 9xxxxxx is enough on a cyrix....its my baby! Surely the EXE. file (Red) is the one.......I now after grappling with shortcuts and supplanting various files blah blah cant download any work that I have managed to salvage from an exponent I have been testing for over 4 months.... Please can not somebody make it a bit more user friendly... No wonder people go to other more friendly collective projects... Very dissappointed at the supplementation and interface.... O.K. I downloaded it...Version 19 is no faster than 18, and wasted me a lot of time.. If you are looking to pull people in to this project dont assume to much knowledge as to the users, Keep It simple stupid please... There is a problem with Maths/Computer buffs...they assume to much...!! Some off us might want to contribute but wading through .txt files isnt it???!! Sorry I will have to be off to see what is in certian folders,DOS files.....I think Seti might be easier.. FOR GOD SAKE GIVE ME A USER FRIENDLY INTERFACE, PROPER HELP MENU.... AHHHHHH.... Ian McLoughlin, Chematek U.K. Tel/Fax : +44(0)1904 679906 Mobile : +44(0)7801 823421 Website: www.chematekuk.co.uk _________________________________________________________________ Unsubscribe & list info -- http://www.scruz.net/~luke/signup.htm Mersenne Prime FAQ -- http://www.tasam.com/~lrwiman/FAQ-mers ------------------------------ End of Mersenne Digest V1 #639 ******************************