Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > C Programming > Experiences using "register"

Reply
Thread Tools

Experiences using "register"

 
 
James P. Schoonover
Guest
Posts: n/a
 
      03-18-2008
Spiros Bousbouras wrote:
> Has anyone found that declaring variables register affected
> speed of execution ? If yes on what hardware and around
> which year ?


Yes. It also affected the size of the generated code. This was using the
3bcc cross compiler for the AT&T 3B20D processor. The year was about
1980. I put pointer variables into registers as that seemed to help the
most. The optimizer wasn't as powerful as one could hope for back then.
I believe newer versions of the 3bcc compiler/optimizer did a better job
so using the register keyword wasn't as critical later.

Phil Schoonover
 
Reply With Quote
 
 
 
 
christian.bau
Guest
Posts: n/a
 
      03-18-2008
On Mar 18, 3:14 pm, santosh <(E-Mail Removed)> wrote:

> I wonder how much suboptimal register allocation would matter with
> modern processors with huge L1 and L2 caches.


The size of the L1 cache doesn't make any difference to this problem,
and the L2 cache most certainly doesn't.

A typical x86 system can perform three or four micro operations per
cycle. Operations between registers are one micro operation;
operations using one memory variable use at least three micro
operations (calculate address, load, process) which means throughput
is reduced by a factor of three, you get much bigger latencies which
is a killer with long dependency chains, you run out of resources for
checking memory dependencies, so all in all using memory instead of
registers is awfully bad for your code's performance.
 
Reply With Quote
 
 
 
 
christian.bau
Guest
Posts: n/a
 
      03-18-2008
On Mar 18, 3:37 pm, (E-Mail Removed) (Richard Bos) wrote:

> Not these days, probably, but it used to be true for some MS-DOS
> implementations that you could register the wrong variable and the
> compiler would merrily do as you told it.


If you write code like


for (i = 0; i < n; ++i) use (x);
for (i = 0; i < m; ++j) use (y);

and the compiler can put either x or y into a register, but not both,
then I would expect it to use the variable that was declared as a
"register" variable. And if n = 10, m = 1000000000, and the compiler
doesn't know this, then using the wrong declaration will still make
your code slower. (Of course a compiler could just ignore "register"
completely except for giving an error if you take the address of a
variable, giving you a 50:50 chance of picking the right variable).
 
Reply With Quote
 
christian.bau
Guest
Posts: n/a
 
      03-18-2008
On Mar 17, 3:40 pm, Kenneth Brody <(E-Mail Removed)> wrote:

> There were other "tricks" I learned way back then which are no longer
> relevant as well. For example, rewriting a for-loop properly could
> make a big improvement on 680x0-based systems, as the compiler would
> then take advantage of the 680x0's "decrement and branch on non-zero"
> instruction.


That was a very nice thing about the CodeWarrior C compiler: It
produced faster code if you wrote for-loops in the most readable way,
like

for (i = start; i < end; ++i) ...

which was deserved punishment for all those who thought

while (i--) ...

or something similar unreadable would produce faster code.

Unfortunately later compiler versions did all kinds of loop with fast
code
 
Reply With Quote
 
CBFalconer
Guest
Posts: n/a
 
      03-18-2008
polas wrote:
> Jack Klein <(E-Mail Removed)> wrote:
>> Spiros Bousbouras <(E-Mail Removed)> wrote:
>>
>>> Has anyone found that declaring variables register affected
>>> speed of execution ? If yes on what hardware and around
>>> which year ?

>>
>> On quite a few embedded architectures, 8 to 32 bit.
>>
>> The last time was this morning.

>
> Is it possible at all that, variables declared to be register
> located might confuse the compiler's optimisation methods and
> actually reduce the efficiency of the overall code?


If it does and the code you wrote meets the requirements of the C
standard, the compiler is buggy. The odds are that your code is
the buggy componenet.

Please do not quote signatures. Those are anything that follows
the "-- " sig marker in the original message.

--
[mail]: Chuck F (cbfalconer at maineline dot net)
[page]: <http://cbfalconer.home.att.net>
Try the download section.



--
Posted via a free Usenet account from http://www.teranews.com

 
Reply With Quote
 
Antoninus Twink
Guest
Posts: n/a
 
      03-18-2008
On 18 Mar 2008 at 21:14, CBFalconer wrote:
> Please do not quote signatures. Those are anything that follows
> the "-- " sig marker in the original message.


What do you mean, "the" sig marker? Your own posts include two such sig
markers.

> --
> [mail]: Chuck F (cbfalconer at maineline dot net)
> [page]: <http://cbfalconer.home.att.net>
> Try the download section.


Fix your own glass house before throwing stones, dickwad.

 
Reply With Quote
 
jaysome
Guest
Posts: n/a
 
      03-19-2008
On Mon, 17 Mar 2008 21:20:27 -0500, Jack Klein wrote:

> On Mon, 17 Mar 2008 06:24:27 -0700 (PDT), Spiros Bousbouras
> <(E-Mail Removed)> wrote in comp.lang.c:
>
>> Has anyone found that declaring variables register affected speed of
>> execution ? If yes on what hardware and around which year ?

>
> On quite a few embedded architectures, 8 to 32 bit.
>
> The last time was this morning.


Your response is quite surprising to me. Especially the part about "The
last time was this morning".

My experience with "modern" C compilers (i.e., those that have been
updated in the last few years) is that using the register keyword is a
waste of time, and can even be counter-productive. It's generally
accepted that using the register keyword is a form of optimization that
should only be undertaken after 1) you have found that there is a
performance problem, and 2) you have found that use of the register
keyword has a significant impact in resolving this performance problem.

Granted, the OP asked if declaring variables register affected speed of
execution, which encompasses code that uses the register keyword just for
the sake of determining that use of the register keyword makes any
difference in the speed of execution. One can easily experiment with such
code, in the absence of any performance problems, and determine that such
code results in affecting the speed of execution (ostensibly for the
better). But was such use justified?

I would be interested in hearing about which compiler you used "this
morning". And whether said compiler is considered a "modern" compiler.
That information could well benefit myself and others in this group.

Best regards
--
jay

 
Reply With Quote
 
Philip Potter
Guest
Posts: n/a
 
      03-19-2008
CBFalconer wrote:
> polas wrote:
>> Jack Klein <(E-Mail Removed)> wrote:
>>> Spiros Bousbouras <(E-Mail Removed)> wrote:
>>>
>>>> Has anyone found that declaring variables register affected
>>>> speed of execution ? If yes on what hardware and around
>>>> which year ?
>>> On quite a few embedded architectures, 8 to 32 bit.
>>>
>>> The last time was this morning.

>> Is it possible at all that, variables declared to be register
>> located might confuse the compiler's optimisation methods and
>> actually reduce the efficiency of the overall code?

>
> If it does and the code you wrote meets the requirements of the C
> standard, the compiler is buggy. The odds are that your code is
> the buggy componenet.


In what way exactly is the compiler buggy? The C standard does not
guarantee that if you use "register" then your code will run faster.
 
Reply With Quote
 
Richard Tobin
Guest
Posts: n/a
 
      03-19-2008
In article <frr05i$s3k$(E-Mail Removed)>, Philip Potter <(E-Mail Removed)> wrote:

>> If it does and the code you wrote meets the requirements of the C
>> standard, the compiler is buggy. The odds are that your code is
>> the buggy componenet.


>In what way exactly is the compiler buggy? The C standard does not
>guarantee that if you use "register" then your code will run faster.


A C compiler may aim to conform to the C standard, but that does not
mean that only errors of conformance count as bugs.

But I agree that it's not necessarily a bug if using "register" slows
your program down. It may well be that sometimes register
declarations will help and sometimes they will make things worse: if
so, the user can use a profile to decide whether it's worth it.

-- Richard
--
:wq
 
Reply With Quote
 
Richard
Guest
Posts: n/a
 
      03-19-2008
CBFalconer <(E-Mail Removed)> writes:

> polas wrote:
>> Jack Klein <(E-Mail Removed)> wrote:
>>> Spiros Bousbouras <(E-Mail Removed)> wrote:
>>>
>>>> Has anyone found that declaring variables register affected
>>>> speed of execution ? If yes on what hardware and around
>>>> which year ?
>>>
>>> On quite a few embedded architectures, 8 to 32 bit.
>>>
>>> The last time was this morning.

>>
>> Is it possible at all that, variables declared to be register
>> located might confuse the compiler's optimisation methods and
>> actually reduce the efficiency of the overall code?

>
> If it does and the code you wrote meets the requirements of the C
> standard, the compiler is buggy. The odds are that your code is
> the buggy componenet.
>
> Please do not quote signatures. Those are anything that follows
> the "-- " sig marker in the original message.
>
> --
> [mail]: Chuck F (cbfalconer at maineline dot net)
> [page]: <http://cbfalconer.home.att.net>
> Try the download section.


Please fix your own double signature before lecturing others you pompous
fool.

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
What are your experiences with ASA 5500 series vs using seperate devices Ned Cisco 1 11-15-2006 08:16 PM
My Experiences with the XFX 7800GTX @ ThinkComputers.org Silverstrand Front Page News 0 09-03-2005 01:41 PM
Who's using VoIP and what your experiences? Marc Computer Support 3 06-03-2005 02:27 AM
Experiences using Canon F/1.4 50mm on 20D? John A. Stovall Digital Photography 3 02-26-2005 11:04 AM
similar experiences? Will Gortoa Firefox 9 11-24-2004 12:46 AM



Advertisments