Byte swap timing


 
Thread Tools Search this Thread
Top Forums Programming Byte swap timing
# 1  
Old 06-09-2016
Byte swap timing

I have noticed the difference in byte swap timing between two Ubuntu systems. The bswap_32 used to work just fine on the old system, but on the new one it lags behind home-grown swap.

My code:
Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <byteswap.h>
#include <sys/time.h>
 union   _U {
          unsigned int          in;
          struct _CH {
                  unsigned char c[4];
          } CH;
};
 int main(int argc, char *argv[])
{
  struct timeval t1, t2;
   union _U u;
  int   n;
  unsigned char tmp;
  
         u.in = (argc == 2) ? atoi(argv[1]) : 0xff;
         gettimeofday(&t1, NULL);
        for(n = 0; n < 100 * 1000000; n++)
        {
                u.in = n;

                 // Version 1
                u.in = bswap_32(u.in);

                 // Version 2 (homegrown)
                //tmp = u.CH.c[0];
                //u.CH.c[0] = u.CH.c[3];
                //u.CH.c[1] = u.CH.c[2];
                //u.CH.c[2] = u.CH.c[1];
                //u.CH.c[3] = tmp;
        }
        gettimeofday(&t2, NULL);
        printf("%lu mls\n", 
                (t2.tv_sec - t1.tv_sec) * 1000000 + (t2.tv_usec - t1.tv_usec));
        return(0);
}

I compile it on both systems simply as
Code:
cc -g

+++

Old system : ProLiant ML350 G4 / Intel(R) Xeon(TM) CPU 3.20GHz (about 8 years old)
Linux OLD 2.6.24-32-server #1 SMP Thu Jul 12 15:21:48 UTC 2012 i686 GNU/Linux
gcc version 4.2.4 (Ubuntu 4.2.4-1ubuntu4)

Version 1 avg 500,000 mls, version 2 avg 1,250,000 mls

+++

New system : ProLiant DL360p Gen8 / Intel(R) Xeon(R) CPU E5-2609 0 @ 2.40GHz 4 cores (about 3 years old)
Linux NEW 3.13.0-55-generic #94-Ubuntu SMP Thu Jun 18 00:27:10 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
gcc version 5.3.1 20160413 (Ubuntu 5.3.1-14ubuntu2)

Version 1 avg 480,000 mls, version 2 avg 390,000 mls

+++

Why on the new system a standard bswap_32 is quite a bit slower than manually shuffling the bytes?

Thanks in advance.
# 2  
Old 06-10-2016
Shouldn't it be
Code:
                 // Version 2 (homegrown)
                tmp = u.CH.c[0];
                u.CH.c[0] = u.CH.c[3];
                u.CH.c[3] = tmp;
                tmp = u.CH.c[1];
                u.CH.c[1] = u.CH.c[2];
                u.CH.c[2] = tmp;

?
# 3  
Old 06-10-2016
Compiler differences likely account for a large part of it, or perhaps library differences, there isn't really a significant difference on your new machine. Why it's happening depends on the assembly the compiler is generating, but I suspect bswap_32 hasn't gotten worse, as much as the compiler's gotten better.
# 4  
Old 06-10-2016
(to MadeInGermany) Yes, it should, my bad (copy/paste difficulties in IE). But my question is - why bswap takes longer time? any ideas?

(to Corona) newer compiler is better, I assume, but the timing of bswap suffered - how?

Last edited by migurus; 06-10-2016 at 01:19 PM.. Reason: mention people who answered
# 5  
Old 06-10-2016
Quote:
Originally Posted by migurus
(to Corona) newer compiler is better, I assume, but the timing of bswap suffered - how?
That bswap is slower then the macro does not mean bswap got worse, for all we know, the macro got optimized better, to a degree it exceeded the external bswap. Too many circumstances were changed to deduce anything from those numbers.

If you insist on a completely wild guess, I would wonder if bswap() in modern gcc is inline assembly, and the compiler is optimizing the macro into a bswap instruction. The compiler can do a better job optimizing instructions it makes than instructions you force it to use. But to get a definitive answer on what's going on you'll have to take a look at the assembly.
This User Gave Thanks to Corona688 For This Post:
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Solaris

Explain the output of swap -s and swap -l

Hi Solaris Folks :), I need to calculate the swap usage on solaris server, please let me understand the output of below swap -s and swap -l commands. $swap -s total: 1774912k bytes allocated + 240616k reserved = 2015528k used, 14542512k available $swap -l swapfile dev swaplo... (6 Replies)
Discussion started by: seenuvasan1985
6 Replies

2. Shell Programming and Scripting

Timing a script

i have a very big script i have that i'd like to add a timeout to. this script runs on a several remote host. i update this script with timeout clause and then copy it over to all the hosts on which it is currently on. basically, i want the timeout to make the script abort/exit if it's... (1 Reply)
Discussion started by: SkySmart
1 Replies

3. HP-UX

Swap device file and swap sapce

Hi I have an integrity machine rx7620 and rx8640 running hp-ux 11.31. I'm planning to fine tune the system: - I would like to know when does the memory swap space spill over to the device swap space? - And how much % of memory swap utilization should be specified (swap space device... (6 Replies)
Discussion started by: lamoul
6 Replies

4. Shell Programming and Scripting

Remove a byte(Last byte from the last line)

Hi All Can anyone please suggest me how to remove the last byte from a falt file .This is from the last line's last BYTE. Please suggest me something. Thank's and regards Vinay (1 Reply)
Discussion started by: vinayrao
1 Replies

5. Shell Programming and Scripting

Check if 2 files are identical byte-to-byte?

In my server migration requirement, I need to compare if one file on old server is exactly the same as the corresponding file on the new server. For diff and comm, the inputs need to be sorted. But I do not want to disturb the content of the file and need to find byte-to-byte match. Please... (4 Replies)
Discussion started by: krishmaths
4 Replies

6. Solaris

Swap config - Mirror swap or not?

Hello and thanks in advance. I have a Sun box with raid 1 on the O/S disks using solaris svm. I want to unmirror my swap partition, and add the slice on the second disk as an additional swap device. This would give me twice as much swap space. I have been warned not to do this by some... (3 Replies)
Discussion started by: BG_JrAdmin
3 Replies

7. Programming

timing your functions

hi everyone. If you have a function created in your code and you want to find out how long it takes for it to run you can use a struct called gettimeofday(). so lets say we have a function like this int myfunction (int r) { /*some math calculations*/ return answer; } How do i set up... (3 Replies)
Discussion started by: bebop1111116
3 Replies

8. Shell Programming and Scripting

Timing out a SSH

I need to make it so an autmated process which involves ssh, times out if ssh prompts for a password. Most of the time it shouldnt prompt for a password. But if it does i need it to time it out or get a status and stop the ssh and log that the ssh failed and move onto the next server. Is there any... (9 Replies)
Discussion started by: rcunn87
9 Replies

9. UNIX for Advanced & Expert Users

scp timing out

having problems using scp in that during peak hours it appears to time out. anyone have similar experiences? any thoughts regarding a solution... (1 Reply)
Discussion started by: jph
1 Replies

10. Shell Programming and Scripting

timing a loop in unix.

hi guys.. i have a shell script that loops through a certain directory to see if a file has been created and then prints the file if it exists... the only problem i have now is that sometimes the flat does not get created by the program thats supposed to create it, in this scenario, my loop... (1 Reply)
Discussion started by: wolkott
1 Replies
Login or Register to Ask a Question