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


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

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

From Melzzzzz <Melzzzzz@zzzzz.com>
Newsgroups comp.os.linux.advocacy
Subject Re: FizzBuzz: an Interview Question ( for programmers ).
Date 2017-08-04 14:00 +0000
Organization albasani.net
Message-ID <om1ulk$eo8$3@news.albasani.net> (permalink)
References (6 earlier) <szbdwo.wa33@rooftop.invalid> <olub0m$qj7$3@news.albasani.net> <xbabfa3.arr@rooftop.invalid> <om0v5l$ko9$1@news.albasani.net> <xzb33a0ab.u33@rooftop.invalid>

Show all headers | View raw


On 2017-08-04, 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:
>>>>>> 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

Heh, seems that printing takes most of execution time :P

-- 
press any key to continue or any other to quit...

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