Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.os.linux.advocacy > #425709
| 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> |
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
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