Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Introduction of implementation characteristics/tags #195

Merged
merged 16 commits into from
Jun 3, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
292 changes: 235 additions & 57 deletions CONTRIBUTING.md

Large diffs are not rendered by default.

5 changes: 4 additions & 1 deletion PrimeAda/solution_1/README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
# Ada solution by BoopBeepBoopBeep

![Category](https://img.shields.io/badge/Category-unfaithful-yellowgreen)
![Algorithm](https://img.shields.io/badge/Algorithm-base-green)
![Faithfulness](https://img.shields.io/badge/Faithful-no-yellowgreen)
![Parallelism](https://img.shields.io/badge/Parallel-no-green)
![Bit count](https://img.shields.io/badge/Bits-unknown-yellowgreen)

Using the Community IDE and Compiler found :
https://www.adacore.com/download
2 changes: 1 addition & 1 deletion PrimeAda/solution_1/src/main.adb
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ procedure Main is

-- Following 2 lines added by rbergen to conform to drag race output format
Put_Line ("");
Put_Line ("BoopBeepBoopBeep;" & Passes'Image & ";" & Dur'Image & ";1");
Put_Line ("BoopBeepBoopBeep;" & Passes'Image & ";" & Dur'Image & ";1;algorithm=base,faithful=no");

end Print_Result;
Passes : Integer := 0;
Expand Down
20 changes: 12 additions & 8 deletions PrimeAssembly/solution_1/README.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
# x86-64 assembly solution by rbergen

![Category](https://img.shields.io/badge/Category-faithful-green)
![Category](https://img.shields.io/badge/Category-unfaithful-yellowgreen)
![Algorithm](https://img.shields.io/badge/Algorithm-base-green)
![Faithfulness](https://img.shields.io/badge/Faithful-yes-green)
![Faithfulness](https://img.shields.io/badge/Faithful-no-yellowgreen)
![Parallelism](https://img.shields.io/badge/Parallel-no-green)
![Bit count](https://img.shields.io/badge/Bits-1-green)
![Bit count](https://img.shields.io/badge/Bits-8-yellowgreen)

This solution contains six implementations in x86-64 assembly, of which:
* x64ff_bitbtr is faithful, uses bits to store prime number flags and clears them using the btr instruction
Expand All @@ -27,10 +31,10 @@ A Dockerfile has been provided.

## Output
```
rbergen_x64uff_byte;7334;5.000;1
rbergen_x64ff_byte;8302;5.000;1
rbergen_x64uff_bitbtr;4179;5.000;1
rbergen_x64ff_bitbtr;4177;5.000;1
rbergen_x64uff_bitshift;6269;5.000;1
rbergen_x64ff_bitshift;4600;5.000;1
rbergen_x64uff_byte;7334;5.000;1;algorithm=base,faithful=no,bits=8
rbergen_x64ff_byte;8302;5.000;1;algorithm=base,faithful=yes,bits=8
rbergen_x64uff_bitbtr;4179;5.000;1;algorithm=base,faithful=no,bits=1
rbergen_x64ff_bitbtr;4177;5.000;1;algorithm=base,faithful=yes,bits=1
rbergen_x64uff_bitshift;6269;5.000;1;algorithm=base,faithful=no,bits=1
rbergen_x64ff_bitshift;4600;5.000;1;algorithm=base,faithful=yes,bits=1
```
2 changes: 1 addition & 1 deletion PrimeAssembly/solution_1/primes_ff_bitbtr.asm
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ refResults:
dd 0

; format string for output
outputFmt: db 'rbergen_x64ff_bitbtr', SEMICOLON, '%d', SEMICOLON, '%d.%03d', SEMICOLON, '1', 10, 0
outputFmt: db 'rbergen_x64ff_bitbtr', SEMICOLON, '%d', SEMICOLON, '%d.%03d', SEMICOLON, '1', SEMICOLON, 'algorithm=base,faithful=yes,bits=1', 10, 0
; incorrect result warning message
incorrect: db 'WARNING: result is incorrect!', 10
; length of previous
Expand Down
2 changes: 1 addition & 1 deletion PrimeAssembly/solution_1/primes_ff_bitshift.asm
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ refResults:
dd 0

; format string for output
outputFmt: db 'rbergen_x64ff_bitshift', SEMICOLON, '%d', SEMICOLON, '%d.%03d', SEMICOLON, '1', 10, 0
outputFmt: db 'rbergen_x64ff_bitshift', SEMICOLON, '%d', SEMICOLON, '%d.%03d', SEMICOLON, '1', SEMICOLON, 'algorithm=base,faithful=yes,bits=1', 10, 0
; incorrect result warning message
incorrect: db 'WARNING: result is incorrect!', 10
; length of previous
Expand Down
2 changes: 1 addition & 1 deletion PrimeAssembly/solution_1/primes_ff_byte.asm
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ refResults:
dd 0

; format string for output
outputFmt: db 'rbergen_x64ff_byte', SEMICOLON, '%d', SEMICOLON, '%d.%03d', SEMICOLON, '1', 10, 0
outputFmt: db 'rbergen_x64ff_byte', SEMICOLON, '%d', SEMICOLON, '%d.%03d', SEMICOLON, '1', SEMICOLON, 'algorithm=base,faithful=yes,bits=8', 10, 0
; incorrect result warning message
incorrect: db 'WARNING: result is incorrect!', 10
; length of previous
Expand Down
2 changes: 1 addition & 1 deletion PrimeAssembly/solution_1/primes_uff_bitbtr.asm
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ refResults:
dd 0

; format string for output
outputFmt: db 'rbergen_x64uff_bitbtr', SEMICOLON, '%d', SEMICOLON, '%d.%03d', SEMICOLON, '1', 10, 0
outputFmt: db 'rbergen_x64uff_bitbtr', SEMICOLON, '%d', SEMICOLON, '%d.%03d', SEMICOLON, '1', SEMICOLON, 'algorithm=base,faithful=no,bits=1', 10, 0
; incorrect result warning message
incorrect: db 'WARNING: result is incorrect!', 10
; length of previous
Expand Down
2 changes: 1 addition & 1 deletion PrimeAssembly/solution_1/primes_uff_bitshift.asm
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ refResults:
dd 0

; format string for output
outputFmt: db 'rbergen_x64uff_bitshift', SEMICOLON, '%d', SEMICOLON, '%d.%03d', SEMICOLON, '1', 10, 0
outputFmt: db 'rbergen_x64uff_bitshift', SEMICOLON, '%d', SEMICOLON, '%d.%03d', SEMICOLON, '1', SEMICOLON, 'algorithm=base,faithful=no,bits=1', 10, 0
; incorrect result warning message
incorrect: db 'WARNING: result is incorrect!', 10
; length of previous
Expand Down
2 changes: 1 addition & 1 deletion PrimeAssembly/solution_1/primes_uff_byte.asm
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ refResults:
dd 0

; format string for output
outputFmt: db 'rbergen_x64uff_byte', SEMICOLON, '%d', SEMICOLON, '%d.%03d', SEMICOLON, '1', 10, 0
outputFmt: db 'rbergen_x64uff_byte', SEMICOLON, '%d', SEMICOLON, '%d.%03d', SEMICOLON, '1', SEMICOLON, 'algorithm=base,faithful=no,bits=8', 10, 0
; incorrect result warning message
incorrect: db 'WARNING: result is incorrect!', 10
; length of previous
Expand Down
13 changes: 8 additions & 5 deletions PrimeAssembly/solution_2/README.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
# arm64 assembly solution by rbergen

![Category](https://img.shields.io/badge/Category-faithful-green)

![Algorithm](https://img.shields.io/badge/Algorithm-base-green)
![Faithfulness](https://img.shields.io/badge/Faithful-yes-green)
![Parallelism](https://img.shields.io/badge/Parallel-no-green)
![Bit count](https://img.shields.io/badge/Bits-1-green)
![Bit count](https://img.shields.io/badge/Bits-8-yellowgreen)

This solution contains three implementations in arm64 assembly. Two use bits to store prime number flags (one with precalculated bit masks), the other uses bytes. The basic algorithm used is that of the original C#/C++ implementations.

Expand All @@ -19,7 +22,7 @@ A Dockerfile has been provided.

## Output
```
rbergen_arm64_byte;908;5.002;1
rbergen_arm64_bitmap;793;5.005;1
rbergen_arm64_bitshift;890;5.003;1
rbergen_arm64_byte;908;5.002;1;algorithm=base,faithful=yes,bits=8
rbergen_arm64_bitmap;793;5.005;1;algorithm=base,faithful=yes,bits=1
rbergen_arm64_bitshift;890;5.003;1;algorithm=base,faithful=yes,bits=1
```
2 changes: 1 addition & 1 deletion PrimeAssembly/solution_2/primes_arm64_bitmap.s
Original file line number Diff line number Diff line change
Expand Up @@ -209,7 +209,7 @@ printResults:
.balign 4

outputFmt: // format string for output
.asciz "rbergen_arm64_bitmap;%d;%d.%03d;1\n"
.asciz "rbergen_arm64_bitmap;%d;%d.%03d;1;algorithm=base,faithful=yes,bits=1\n"

.balign 4

Expand Down
2 changes: 1 addition & 1 deletion PrimeAssembly/solution_2/primes_arm64_bitshift.s
Original file line number Diff line number Diff line change
Expand Up @@ -209,7 +209,7 @@ printResults:
.balign 4

outputFmt: // format string for output
.asciz "rbergen_arm64_bitshift;%d;%d.%03d;1\n"
.asciz "rbergen_arm64_bitshift;%d;%d.%03d;1;algorithm=base,faithful=yes,bits=1\n"

.balign 4

Expand Down
2 changes: 1 addition & 1 deletion PrimeAssembly/solution_2/primes_arm64_byte.s
Original file line number Diff line number Diff line change
Expand Up @@ -209,7 +209,7 @@ printResults:
.balign 4

outputFmt: // format string for output
.asciz "rbergen_arm64_byte;%d;%d.%03d;1\n"
.asciz "rbergen_arm64_byte;%d;%d.%03d;1;algorithm=base,faithful=yes,bits=8\n"

.balign 4

Expand Down
5 changes: 4 additions & 1 deletion PrimeAssemblyScript/solution_1/README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
# AssemblyScript implementation by donmahallem

![Category](https://img.shields.io/badge/Category-faithful-green)
![Algorithm](https://img.shields.io/badge/Algorithm-base-green)
![Faithfulness](https://img.shields.io/badge/Faithful-yes-green)
![Parallelism](https://img.shields.io/badge/Parallel-no-green)
![Bit count](https://img.shields.io/badge/Bits-unknown-yellowgreen)

## Run instructions

Expand Down
2 changes: 1 addition & 1 deletion PrimeAssemblyScript/solution_1/src/sieve.ts
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ export class PrimeSieve {

// Following 2 lines added by rbergen to conform to drag race output format
console.log("");
console.log("donmahallem;" + passes.toString() + ";" + duration.toString() + ";1");
console.log("donmahallem;" + passes.toString() + ";" + duration.toString() + ";1;algorithm=base,faithful=yes");

}

Expand Down
1 change: 1 addition & 0 deletions PrimeBASIC/solution_1/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
*.run
15 changes: 9 additions & 6 deletions PrimeBASIC/solution_1/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,12 +1,15 @@
FROM primeimages/freebasic:1.07.3 AS build


WORKDIR /opt/app
COPY runprimes.sh .
RUN chmod a+x runprimes.sh
COPY *.bas /opt/app/
RUN find . -name 'prime_*.bas' -exec fbc {} \;
COPY *.bas ./
COPY run.sh .
RUN chmod a+x run.sh
RUN find . -name 'prime_*.bas' -exec fbc {} -x {}.run \;

FROM ubuntu:18.04
COPY --from=build /opt/app/* /opt/app/
COPY --from=build /opt/app/*.run /opt/app/
COPY --from=build /opt/app/run.sh /opt/app/
WORKDIR /opt/app

ENTRYPOINT [ "/opt/app/runprimes.sh" ]
ENTRYPOINT [ "./run.sh" ]
15 changes: 10 additions & 5 deletions PrimeBASIC/solution_1/README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
# FreeBASIC solutions by rbergen

![Category](https://img.shields.io/badge/Category-faithful-green)
![Algorithm](https://img.shields.io/badge/Algorithm-base-green)
![Algorithm](https://img.shields.io/badge/Algorithm-wheel-yellowgreen)
![Faithfulness](https://img.shields.io/badge/Faithful-yes-green)
![Parallelism](https://img.shields.io/badge/Parallel-no-green)
![Bit count](https://img.shields.io/badge/Bits-1-green)
![Bit count](https://img.shields.io/badge/Bits-unknown-yellowgreen)

This is a collection of implementations in FreeBASIC, of which:
1. one is effectively a FreeBASIC copy of the "8 of 30" implementation that [mckoss](https://github.com/mckoss) has written in C
Expand All @@ -22,8 +27,8 @@ A Dockerfile has been provided.

## Output
```
rbergen_8of30;4197;5.001;1
rbergen_bit32;720;5.000;1
rbergen_bit64;661;5.000;1
rbergen_boolean;1720;5.001;1
rbergen_8of30;4197;5.001;1;algorithm=wheel,faithful=yes,bits=1
rbergen_bit32;720;5.000;1;algorithm=base,faithful=yes,bits=1
rbergen_bit64;661;5.000;1;algorithm=base,faithful=yes,bits=1
rbergen_boolean;1720;5.001;1;algorithm=base,faithful=yes
```
2 changes: 1 addition & 1 deletion PrimeBASIC/solution_1/prime_8of30.bas
Original file line number Diff line number Diff line change
Expand Up @@ -181,4 +181,4 @@ If GetReferenceResult(SieveSize) <> Sieve->CountPrimes() Then Print "WARNING: re

Delete Sieve

Print Using "rbergen__8of30;&;#.###;1"; PassCount; Duration
Print Using "rbergen__8of30;&;#.###;1;algorithm=wheel,faithful=yes,bits=1"; PassCount; Duration
2 changes: 1 addition & 1 deletion PrimeBASIC/solution_1/prime_bit32.bas
Original file line number Diff line number Diff line change
Expand Up @@ -167,4 +167,4 @@ If GetReferenceResult(SieveSize) <> Sieve->CountPrimes() Then Print "WARNING: re

Delete Sieve

Print Using "rbergen__bit32;&;#.###;1"; PassCount; Duration
Print Using "rbergen__bit32;&;#.###;1;algorithm=base,faithful=yes,bits=1"; PassCount; Duration
2 changes: 1 addition & 1 deletion PrimeBASIC/solution_1/prime_bit64.bas
Original file line number Diff line number Diff line change
Expand Up @@ -167,4 +167,4 @@ If GetReferenceResult(SieveSize) <> Sieve->CountPrimes() Then Print "WARNING: re

Delete Sieve

Print Using "rbergen__bit64;&;#.###;1"; PassCount; Duration
Print Using "rbergen__bit64;&;#.###;1;algorithm=base,faithful=yes,bits=1"; PassCount; Duration
2 changes: 1 addition & 1 deletion PrimeBASIC/solution_1/prime_boolean.bas
Original file line number Diff line number Diff line change
Expand Up @@ -132,4 +132,4 @@ If GetReferenceResult(SieveSize) <> Sieve->CountPrimes() Then Print "WARNING: re

Delete Sieve

Print Using "rbergen__boolean;&;#.###;1"; PassCount; Duration
Print Using "rbergen__boolean;&;#.###;1;algorithm=base,faithful=yes"; PassCount; Duration
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

cd $(dirname "${BASH_SOURCE[0]}")

for file in prime_*[^.bas]; do
for file in prime_*.run; do
if [ -x ${file} ]; then
./${file}
fi
Expand Down
2 changes: 1 addition & 1 deletion PrimeBASIC/solution_2/PrimeVB.vb
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,6 @@ Module PrimeVB
Console.WriteLine("WARNING: result is incorrect!")
End If

Console.WriteLine("rbergen_vb;{0};{1};1", passCount, duration)
Console.WriteLine("rbergen_vb;{0};{1};1;algorithm=base,faithful=yes,bits=1", passCount, duration)
End Sub
End Module
7 changes: 5 additions & 2 deletions PrimeBASIC/solution_2/README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
# Visual Basic solution by rbergen

![Category](https://img.shields.io/badge/Category-faithful-green)
![Algorithm](https://img.shields.io/badge/Algorithm-base-green)
![Faithfulness](https://img.shields.io/badge/Faithful-yes-green)
![Parallelism](https://img.shields.io/badge/Parallel-no-green)
![Bit count](https://img.shields.io/badge/Bits-1-green)

This is an implementation in Visual Basic.

Expand All @@ -17,5 +20,5 @@ A Dockerfile has been provided.

## Output
```
rbergen_vb;2457;5.0012308;1
rbergen_vb;2457;5.0012308;1;algorithm=base,faithful=yes,bits=1
```
7 changes: 5 additions & 2 deletions PrimeC/solution_1/README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
# C solution by mckoss

![Category](https://img.shields.io/badge/Category-faithful-green)
![Algorithm](https://img.shields.io/badge/Algorithm-wheel-yellowgreen)
![Faithfulness](https://img.shields.io/badge/Faithful-yes-green)
![Parallelism](https://img.shields.io/badge/Parallel-no-green)
![Bit count](https://img.shields.io/badge/Bits-1-green)

Single threaded implementation in C of prime number sieve.

Expand Down Expand Up @@ -55,5 +58,5 @@ Word size: 64 bits.
2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997, ...
Found 78498 primes up to 1000000.

mckoss-c830;25186;5.0;1
mckoss-c830;25186;5.0;1;algorithm=wheel,faithful=yes,bits=1
```
2 changes: 1 addition & 1 deletion PrimeC/solution_1/sieve.c
Original file line number Diff line number Diff line change
Expand Up @@ -260,7 +260,7 @@ void timedTest(int secs, SIEVE *primeFinder(int), char *title) {

float elapsed = (float) currentTicks - startTicks;

printf("%s;%d;%0.1f;1\n", title, passes, elapsed / CLOCKS_PER_SEC);
printf("%s;%d;%0.1f;1;algorithm=wheel,faithful=yes,bits=1\n", title, passes, elapsed / CLOCKS_PER_SEC);
fflush(stdout);
}

Expand Down
Loading