Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.os.linux.advocacy > #425709

Re: FizzBuzz: an Interview Question ( for programmers ).

From owl <owl@rooftop.invalid>
Newsgroups comp.os.linux.advocacy
Subject Re: FizzBuzz: an Interview Question ( for programmers ).
Date 2017-08-04 13:52 +0000
Organization O.W.L.
Message-ID <xzb33a0ab.u33@rooftop.invalid> (permalink)
References (5 earlier) <olu908$qj7$1@news.albasani.net> <szbdwo.wa33@rooftop.invalid> <olub0m$qj7$3@news.albasani.net> <xbabfa3.arr@rooftop.invalid> <om0v5l$ko9$1@news.albasani.net>

Show all headers | View raw


Melzzzzz <Melzzzzz@zzzzz.com> wrote:
> On 2017-08-03, owl <owl@rooftop.invalid> wrote:
>> Melzzzzz <Melzzzzz@zzzzz.com> wrote:
>>> On 2017-08-03, owl <owl@rooftop.invalid> wrote:
>>>> Melzzzzz <Melzzzzz@zzzzz.com> wrote:
>>>>> On 2017-08-03, owl <owl@rooftop.invalid> wrote:
>>>>>> Melzzzzz <Melzzzzz@zzzzz.com> wrote:
>>>>>>> 
>>>>>>> Here is mine (fasm on Linux)
>>>>>>> ~/.../examples/tasks >>> cat fizzbuzz.asm
>>>>>>> format elf64 executable 3
>>>>>>> include 'import64.inc'
>>>>>>> 
>>>>>>
>>>>>> anon@lowtide:~/fasm/fasm$ ./fasm.x64 fizzbuzz.asm
>>>>>> flat assembler  version 1.71.64  (16384 kilobytes memory, x64)
>>>>>> fizzbuzz.asm [2]:
>>>>>> include 'import64.inc'
>>>>>> error: file not found.
>>>>>> anon@lowtide:~/fasm/fasm$
>>>>>>
>>>>>> Where to put that?  I tried /usr/include.
>>>>>> No joy.
>>>>>>
>>>>> Put it in current dir ;p
>>>>> 
>>>>
>>>> That works (needed elf.inc there too), but I get an "Illegal instruction"
>>>> error.  Can't debug fasm code with gdb apparently.
>>>>
>>> 
>>> You don't have AVX2 unfortunately, I am afraid.
>>> 
>>
>> Apparently not. :(
>> anon@lowtide:~/code/fizzbuzz$ grep -o avx /proc/cpuinfo
>> avx
>> avx
>> avx
>> avx
>> avx
>> avx
>> avx
>> avx
>> anon@lowtide:~/code/fizzbuzz$ 
>>
> Here is AVX version try this, does two calculations at time (it would be no problem to make it pure sse):
> format elf64 executable 3
> include 'import64.inc' 
> 
> interpreter '/lib64/ld-linux-x86-64.so.2' 
> needed 'libc.so.6'
> import  exit,printf
> 
> segment executable
> entry $
>         xor ebx,ebx
> .L0:    
>         vpmovzxdq xmm0,[arr+ebx] ; zero extend to quad word
>         vpmuludq xmm1,xmm0,xword[cnst3] ; division by multiply and shift
>         vpsrlq xmm2,xmm1,33
>         vpmuludq xmm3,xmm2,xword[three] ; multiply 
>         vpcmpeqd xmm4,xmm0,xmm3 ; see difference
>         vpaddd xmm4,xmm0,xmm4 ; add resulting mask which is -1 if equal
>         vpshufb xmm4,xmm4,xword[smask] ; mov dwords in right place 
> 
>         vpmuludq xmm1,xmm0,xword[cnst5]
>         vpsrlq xmm2,xmm1,34
>         vpmuludq xmm3,xmm2,xword[five]
>         vpcmpeqd xmm5,xmm0,xmm3
>         vpaddd xmm5,xmm5,xmm5 ; make that in -2
>         vpshufb xmm5,xmm5,xword[smask]
> 
>         vpaddd xmm4,xmm5,xmm4 ; if both matches then -3 would be added
> 
>         vmovq [arr+ebx],xmm4
>         add ebx,8
>         cmp ebx,100*4
>         jl .L0
>         xor ebx,ebx
> .L1:
>         mov r8,fizzbuzz
>         mov r9,fizz
>         mov r10,buzz
>         mov edx,[arr+rbx*4]
>         lea esi,[rbx+1]
>         mov rdi,fmt
>         sub esi,edx
>         cmp esi,3 ; if difference is 3 then both matches
>         cmove rdi,r8
>         cmp esi,2 ; buzz matches
>         cmove rdi,r10
>         cmp esi,1 ; fizz matches
>         cmove rdi,r9
>         lea rsi,[rbx+1]
>         xor eax,eax
>         call [printf]
>         inc ebx
>         cmp ebx,100
>         jl .L1
>         xor edi,edi
> .exit:
>         call [exit]
> 
> segment writeable
> align 16
> arr: times 100 dd % ; initialize 1..100
> align 32
> cnst3 dq 2 dup(2863311531) ; required shift 33
> three dq 2 dup(3)
> cnst5 dq 2 dup(3435973837) ; required shift 34
> five  dq 2 dup(5)
> smask db 0,1,2,3       
>       db 8,9,10,11
>       times 4 db -128
>       times 4 db -128
> 
> fmt db '%4d %d',0xa,0
> fizz db '%4d fizz',0xa,0
> buzz db '%4d buzz',0xa,0
> fizzbuzz db '%4d fizzbuzz',0xa,0
> 
> 

I modified your code a bit to run to 100,000 and print format
same across all tests:

anon@lowtide:~/fasm/fasm$ time ./owl >owlout

real    0m0.024s
user    0m0.016s
sys     0m0.004s
anon@lowtide:~/fasm/fasm$ time ./relf >relfout

real    0m0.025s
user    0m0.020s
sys     0m0.004s
anon@lowtide:~/fasm/fasm$ time ./melz >melzout

real    0m0.026s
user    0m0.020s
sys     0m0.004s
anon@lowtide:~/fasm/fasm$ wc -l owlout relfout melzout
 100000 owlout
 100000 relfout
 100000 melzout
 300000 total
anon@lowtide:~/fasm/fasm$ diff --from-file owlout relfout melzout
anon@lowtide:~/fasm/fasm$ tail owlout
99991
99992
Fiz
99994
Buz
Fiz
99997
99998
Fiz
Buz
anon@lowtide:~/fasm/fasm$ tail relfout
99991
99992
Fiz
99994
Buz
Fiz
99997
99998
Fiz
Buz
anon@lowtide:~/fasm/fasm$ tail melzout
99991
99992
Fiz
99994
Buz
Fiz
99997
99998
Fiz
Buz
anon@lowtide:~/fasm/fasm$ 

Some more runs:
anon@lowtide:~/fasm/fasm$ time ./owl >owlout

real    0m0.024s
user    0m0.020s
sys     0m0.000s
anon@lowtide:~/fasm/fasm$ time ./relf >relfout

real    0m0.026s
user    0m0.016s
sys     0m0.008s
anon@lowtide:~/fasm/fasm$ time ./melz >melzout

real    0m0.027s
user    0m0.028s
sys     0m0.000s
anon@lowtide:~/fasm/fasm$ time ./owl >owlout

real    0m0.024s
user    0m0.020s
sys     0m0.000s
anon@lowtide:~/fasm/fasm$ time ./relf >relfout

real    0m0.026s
user    0m0.024s
sys     0m0.000s
anon@lowtide:~/fasm/fasm$ time ./melz >melzout

real    0m0.026s
user    0m0.024s
sys     0m0.000s
anon@lowtide:~/fasm/fasm$
anon@lowtide:~/fasm/fasm$ time ./owl >owlout

real    0m0.024s
user    0m0.020s
sys     0m0.000s
anon@lowtide:~/fasm/fasm$ time ./relf >relfout

real    0m0.026s
user    0m0.024s
sys     0m0.000s
anon@lowtide:~/fasm/fasm$ time ./melz >melzout

real    0m0.027s
user    0m0.024s
sys     0m0.000s
anon@lowtide:~/fasm/fasm$

Back to comp.os.linux.advocacy | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

Re: FizzBuzz: an Interview Question ( for programmers ). fr314159@gmail.com - 2017-08-02 11:14 -0700
  Re: FizzBuzz: an Interview Question ( for programmers ). owl <owl@rooftop.invalid> - 2017-08-02 20:19 +0000
    Re: FizzBuzz: an Interview Question ( for programmers ). owl <owl@rooftop.invalid> - 2017-08-02 21:06 +0000
    Re: FizzBuzz: an Interview Question ( for programmers ). Melzzzzz <Melzzzzz@zzzzz.com> - 2017-08-02 21:37 +0000
      Re: FizzBuzz: an Interview Question ( for programmers ). owl <owl@rooftop.invalid> - 2017-08-03 01:46 +0000
        Re: FizzBuzz: an Interview Question ( for programmers ). Melzzzzz <Melzzzzz@zzzzz.com> - 2017-08-03 04:32 +0000
          Re: FizzBuzz: an Interview Question ( for programmers ). owl <owl@rooftop.invalid> - 2017-08-03 05:01 +0000
            Re: FizzBuzz: an Interview Question ( for programmers ). Melzzzzz <Melzzzzz@zzzzz.com> - 2017-08-03 05:06 +0000
              Re: FizzBuzz: an Interview Question ( for programmers ). owl <owl@rooftop.invalid> - 2017-08-03 05:15 +0000
                Re: FizzBuzz: an Interview Question ( for programmers ). Melzzzzz <Melzzzzz@zzzzz.com> - 2017-08-04 05:02 +0000
                Re: FizzBuzz: an Interview Question ( for programmers ). owl <owl@rooftop.invalid> - 2017-08-04 13:52 +0000
                Re: FizzBuzz: an Interview Question ( for programmers ). Melzzzzz <Melzzzzz@zzzzz.com> - 2017-08-04 14:00 +0000
                Re: FizzBuzz: an Interview Question ( for programmers ). Marek Novotny <marek.novotny@marspolar.com> - 2017-08-04 12:56 -0500
                Re: FizzBuzz: an Interview Question ( for programmers ). Steve Carroll <fretwizzer@gmail.com> - 2017-08-04 11:03 -0700
                Re: FizzBuzz: an Interview Question ( for programmers ). Melzzzzz <Melzzzzz@zzzzz.com> - 2017-08-04 18:05 +0000
                Re: FizzBuzz: an Interview Question ( for programmers ). Steve Carroll <fretwizzer@gmail.com> - 2017-08-04 11:08 -0700
                Re: FizzBuzz: an Interview Question ( for programmers ). Snit <usenet@gallopinginsanity.com> - 2017-08-04 11:23 -0700
                Re: Marek Novotny is a command line jockey. Marek Novotny <marek.novotny@marspolar.com> - 2017-08-04 14:24 -0500
                Re: Marek Novotny is a command line jockey. Snit <usenet@gallopinginsanity.com> - 2017-08-04 12:45 -0700
                Re: This is better, no ? Marek Novotny <marek.novotny@marspolar.com> - 2017-08-04 15:24 -0500
                Re: Marek Novotny is a command line jockey. Snit <usenet@gallopinginsanity.com> - 2017-08-04 12:38 -0700
    Re: My code is twice as fast as Owl's. owl <owl@rooftop.invalid> - 2017-08-03 03:12 +0000
  Re: FizzBuzz: an Interview Question ( for programmers ). "F. Russell" <fr@random.info> - 2017-08-02 23:04 +0000
    Re: FizzBuzz: an Interview Question ( for programmers ). "F. Russell" <fr@random.info> - 2017-08-02 23:25 +0000
      Re: FizzBuzz: an Interview Question ( for programmers ). owl <owl@rooftop.invalid> - 2017-08-03 01:50 +0000
    Re: Fabian's code is always slower. owl <owl@rooftop.invalid> - 2017-08-03 04:41 +0000
      Re: Fabian's code is always slower. owl <owl@rooftop.invalid> - 2017-08-03 05:17 +0000
      Re: What's easier to read/maintain ? owl <owl@rooftop.invalid> - 2017-08-03 05:57 +0000
    Re: Fabian's code is always slower. fr314159@gmail.com - 2017-08-03 08:21 -0700
      Re: Fabian's code is always slower. Steve Carroll <fretwizzer@gmail.com> - 2017-08-03 09:24 -0700
      Re: Fabian's code is always slower. owl <owl@rooftop.invalid> - 2017-08-03 18:41 +0000
    Re: FizzBuzz: an Interview Question ( for programmers ). Snit <usenet@gallopinginsanity.com> - 2017-08-03 13:49 -0700
      Re: 4 lines, 4 states. Snit <usenet@gallopinginsanity.com> - 2017-08-03 22:11 -0700
        Re: 4 lines, 4 states. Snit <usenet@gallopinginsanity.com> - 2017-08-03 22:47 -0700
        Re: 4 lines, 4 states. Snit <usenet@gallopinginsanity.com> - 2017-08-03 22:52 -0700
          Re: Mozilla ThunderBird. Steve Carroll <fretwizzer@gmail.com> - 2017-08-04 08:54 -0700
          Re: Mozilla ThunderBird. Snit <usenet@gallopinginsanity.com> - 2017-08-04 10:43 -0700
            Re: FizzBuzz is a trick question. Snit <usenet@gallopinginsanity.com> - 2017-08-04 11:47 -0700
              Re: Michael Glasser, Steve Carroll, Marek Novotny, Branimir Maksimovic, etc. Snit <usenet@gallopinginsanity.com> - 2017-08-04 12:51 -0700
              Re: Michael Glasser, Steve Carroll, Marek Novotny, Branimir Maksimovic, etc. fr314159@gmail.com - 2017-08-04 12:57 -0700
                Re: Michael Glasser, Steve Carroll, Marek Novotny, Branimir Maksimovic, etc. Steve Carroll <fretwizzer@gmail.com> - 2017-08-04 13:02 -0700
                Re: Michael Glasser, Steve Carroll, Marek Novotny, Branimir Maksimovic, etc. Melzzzzz <Melzzzzz@zzzzz.com> - 2017-08-04 20:02 +0000
                Re: Michael Glasser, Steve Carroll, Marek Novotny, Branimir Maksimovic, etc. Steve Carroll <fretwizzer@gmail.com> - 2017-08-04 13:11 -0700
                Re: Michael Glasser, Steve Carroll, Marek Novotny, Branimir Maksimovic, etc. Melzzzzz <Melzzzzz@zzzzz.com> - 2017-08-04 20:17 +0000
                Re: Michael Glasser, Steve Carroll, Marek Novotny, Branimir Maksimovic, etc. Steve Carroll <fretwizzer@gmail.com> - 2017-08-04 13:42 -0700
                Re: Michael Glasser, Steve Carroll, Marek Novotny, Branimir Maksimovic, etc. "F. Russell" <fr@random.info> - 2017-08-04 23:06 +0000
                Re: Michael Glasser, Steve Carroll, Marek Novotny, Branimir Maksimovic, etc. Melzzzzz <Melzzzzz@zzzzz.com> - 2017-08-04 23:32 +0000
                Re: I'm the best c coder here. Snit <usenet@gallopinginsanity.com> - 2017-08-04 14:03 -0700
                Re: I'm the best c coder here. "F. Russell" <fr@random.info> - 2017-08-04 23:15 +0000
                Re: I'm the best c coder here. benj <benj@nobody.net> - 2017-08-04 19:35 -0400
                Re: I'm the best c coder here. "F. Russell" <fr@random.info> - 2017-08-05 16:08 +0000
                Re: Fabian seldom writes code, much less test it. owl <owl@rooftop.invalid> - 2017-08-05 03:09 +0000
                Re: 2 lines, 2^2 states, easily modified to 3^2 states. owl <owl@rooftop.invalid> - 2017-08-05 05:42 +0000
                Re: Who'd use "x++", in a loop, to find FizzBuzzGoozKaaz ? owl <owl@rooftop.invalid> - 2017-08-05 07:30 +0000
                Re: 2 lines, 2^2 states, easily modified to 3^2 states. Marek Novotny <marek.novotny@marspolar.com> - 2017-08-05 10:19 -0500
                Re: 2 lines, 2^2 states, easily modified to 3^2 states. Steve Carroll <fretwizzer@gmail.com> - 2017-08-05 10:13 -0700
                Re: 2 lines, 2^2 states, easily modified to 3^2 states. owl <owl@rooftop.invalid> - 2017-08-05 17:33 +0000
                Re: Fabian seldom writes code, much less test it. Marek Novotny <marek.novotny@marspolar.com> - 2017-08-04 22:24 -0500
                Re: Fabian seldom writes code, much less test it. "F. Russell" <fr@random.info> - 2017-08-05 13:37 +0000
                Re: Fabian seldom writes code, much less test it. "F. Russell" <fr@random.info> - 2017-08-05 14:25 +0000
                Re: I'm the best c coder here. owl <owl@rooftop.invalid> - 2017-08-05 03:22 +0000
                Re: I'm the best c coder here. Marek Novotny <marek.novotny@marspolar.com> - 2017-08-04 22:35 -0500
                Re: I'm the best c coder here. owl <owl@rooftop.invalid> - 2017-08-05 04:08 +0000
                Re: I reduced Owl's 43 lines to 5. owl <owl@rooftop.invalid> - 2017-08-05 07:25 +0000
                Re: Owl's FizBuzGozKaz branches 5 times more often. owl <owl@rooftop.invalid> - 2017-08-05 15:40 +0000
                Re: I'm _still_ the best c coder here. owl <owl@rooftop.invalid> - 2017-08-05 06:12 +0000
                Re: I'm _still_ the best c coder here. moroney@world.std.spaamtrap.com (Michael Moroney) - 2017-08-05 22:16 +0000
                Re: I increment things at the _start_ of a loop. Steve Carroll <fretwizzer@gmail.com> - 2017-08-06 11:04 -0700
                Re: I increment things at the _start_ of a loop. moroney@world.std.spaamtrap.com (Michael Moroney) - 2017-08-07 03:24 +0000
                Re: I increment things at the _start_ of a loop. Snit <usenet@gallopinginsanity.com> - 2017-08-06 20:35 -0700
                Re: "while ( x++ < 100 )" isn't "obscure". moroney@world.std.spaamtrap.com (Michael Moroney) - 2017-08-07 04:59 +0000
                Re: I'm the best c coder here. chrisv <chrisv@nospam.invalid> - 2017-08-07 06:59 -0500
                Re: I'm the best c coder here. Steve Carroll <fretwizzer@gmail.com> - 2017-08-08 10:23 -0700
                Re: Michael Glasser, Steve Carroll, Marek Novotny, Branimir Maksimovic, etc. DFS <nospam@dfs.com> - 2017-08-04 17:56 -0400
                Re: Michael Glasser, Steve Carroll, Marek Novotny, Branimir Maksimovic, etc. "F. Russell" <fr@random.info> - 2017-08-04 23:04 +0000
                Re: Michael Glasser, Steve Carroll, Marek Novotny, Branimir Maksimovic, etc. Snit <usenet@gallopinginsanity.com> - 2017-08-04 16:09 -0700
                Re: Michael Glasser, Steve Carroll, Marek Novotny, Branimir Maksimovic, etc. fellatiohornblower@renlott.org - 2017-08-04 20:13 -0400
                Re: Michael Glasser, Steve Carroll, Marek Novotny, Branimir Maksimovic, etc. "F. Russell" <fr@random.info> - 2017-08-05 13:50 +0000
                Re: Michael Glasser, Steve Carroll, Marek Novotny, Branimir Maksimovic, etc. "F. Russell" <fr@random.info> - 2017-08-05 15:23 +0000
                Re: Michael Glasser, Steve Carroll, Marek Novotny, Branimir Maksimovic, etc. Snit <usenet@gallopinginsanity.com> - 2017-08-05 10:06 -0700
              Re: Michael Glasser, Steve Carroll, Marek Novotny, Branimir Maksimovic, etc. Doomsdrzej <.m@nsn.s> - 2017-08-05 11:52 -0400
                Re: Michael Glasser, Steve Carroll, Marek Novotny, Branimir Maksimovic, etc. Snit <usenet@gallopinginsanity.com> - 2017-08-05 09:55 -0700
    Re: Fabian's code is always slower. Takuya Saitoh <taka0038@gmail.com> - 2017-08-06 22:37 -0700

csiph-web