Skip to content

Commit ad33b96

Browse files
authored
Update Crystal version to 1.14 and run code formatter (#978)
1 parent 887109f commit ad33b96

File tree

3 files changed

+27
-28
lines changed

3 files changed

+27
-28
lines changed

Diff for: PrimeCrystal/solution_1/Dockerfile

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
FROM crystallang/crystal:1.0.0-alpine AS build
1+
FROM crystallang/crystal:1.14-alpine AS build
22

33
WORKDIR /opt/app
44
COPY primes.cr .
55
RUN crystal build primes.cr --release --static --no-debug
66

7-
FROM alpine:3.13
7+
FROM alpine:3
88

99
COPY --from=build /opt/app/primes /usr/local/bin/
1010

11-
ENTRYPOINT [ "primes" ]
11+
ENTRYPOINT [ "primes" ]

Diff for: PrimeCrystal/solution_2/Dockerfile

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
FROM debian:11
22

3-
ENV CRYSTAL_VER="1.1"
3+
ENV CRYSTAL_VER="1.14"
44

55
WORKDIR /opt
66

Diff for: PrimeCrystal/solution_2/primes.cr

+23-24
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ end
3232
BITMASKP = Pointer.malloc(8) { |i| 1_u8 << i }
3333

3434
macro unroll_setbits(bitarrp, starti, limiti, stepi)
35-
ndx: Int32 = {{starti}} & 7
35+
ndx : Int32 = {{starti}} & 7
3636
r0 = {{starti}} >> 3
3737
r1 = {{starti}} + {{stepi}}
3838
r2 = r1 + {{stepi}}
@@ -47,8 +47,8 @@ macro unroll_setbits(bitarrp, starti, limiti, stepi)
4747
r3 = (r3 >> 3) - r0
4848
r2 = (r2 >> 3) - r0
4949
r1 = (r1 >> 3) - r0
50-
bytep: Pointer(UInt8) = {{bitarrp}} + r0
51-
looplmtp: Pointer(UInt8) = {{bitarrp}} + (({{limiti}} >> 3) - r7)
50+
bytep : Pointer(UInt8) = {{bitarrp}} + r0
51+
looplmtp : Pointer(UInt8) = {{bitarrp}} + (({{limiti}} >> 3) - r7)
5252
case ((({{stepi}} & 7) << 3) | ({{starti}} & 7)).to_u8
5353
{% for n in (0_u8..0x3F) %}
5454
when {{n}}
@@ -77,37 +77,37 @@ end
7777
# swi = (ndx + ndx) * (ndx + 3) + 3
7878
# r = ((swi | 63) + 1 - swi) % (ndx + ndx + 3)
7979
# starti = if r == 0 then 0 else ndx + ndx + 3 - r
80-
STARTIS = [ 2, 2, 1, 2, 6, 7, 13, 2, 6, 5, 12, 16, 6, 0, 29, 0,
81-
6, 16, 30, 25, 6, 32, 45, 32, 6, 48, 30, 16, 6, 0, 62 ]
80+
STARTIS = [2, 2, 1, 2, 6, 7, 13, 2, 6, 5, 12, 16, 6, 0, 29, 0,
81+
6, 16, 30, 25, 6, 32, 45, 32, 6, 48, 30, 16, 6, 0, 62]
8282

8383
macro dense_setbits(bitarrp, starti, limiti, stepi)
8484
dndx = {{starti}}
8585
dndxlmt = {{starti}} | 63
8686
while dndx <= dndxlmt # cull to an even 64-bit boundary...
8787
{{bitarrp}}[dndx >> 3] |= BITMASKP[dndx & 7]; dndx += {{stepi}}
8888
end
89-
wordp: Pointer(UInt64) = ({{bitarrp}} + ((dndx >> 3) & (-8))).as(Pointer(UInt64))
89+
wordp : Pointer(UInt64) = ({{bitarrp}} + ((dndx >> 3) & (-8))).as(Pointer(UInt64))
9090
keep = wordp
91-
wordlmtp: Pointer(UInt64) = ({{bitarrp}} + ((({{limiti}} >> 3) & (-8)) -
91+
wordlmtp : Pointer(UInt64) = ({{bitarrp}} + ((({{limiti}} >> 3) & (-8)) -
9292
(({{stepi}} << 3) - 8))).as(Pointer(UInt64))
9393
dndx &= 63
9494
case {{stepi}}.to_u8
9595
{% for stpvi in (0...STARTIS.size) %} # odd primes STARTIS.size
9696
when {{stpvi + stpvi + 3}}.to_u8
9797
while wordp <= wordlmtp
9898
# for all modulo pattern 64-bit words
99-
{% for wi in (0 ... (stpvi + stpvi + 3)) %}
99+
{% for wi in (0...(stpvi + stpvi + 3)) %}
100100
# for all modulo pattern 64-bit words
101-
{% for bi in (((wi * 64 - 1 - STARTIS[stpvi]) / (stpvi + stpvi + 3) + 1) .. ((wi * 64 + 63 - STARTIS[stpvi]) / (stpvi + stpvi + 3))) %}
102-
{% if (STARTIS[stpvi] + (bi - 1) * (stpvi + stpvi + 3)) < wi * 64 && (STARTIS[stpvi] + (bi + 1) * (stpvi + stpvi + 3)) >= (wi + 1) * 64 %} # only one bit
101+
{% for bi in (((wi * 64 - 1 - STARTIS[stpvi]) / (stpvi + stpvi + 3) + 1)..((wi * 64 + 63 - STARTIS[stpvi]) / (stpvi + stpvi + 3))) %}
102+
{% if (STARTIS[stpvi] + (bi - 1) * (stpvi + stpvi + 3)) < wi * 64 && (STARTIS[stpvi] + (bi + 1) * (stpvi + stpvi + 3)) >= (wi + 1) * 64 %} # only one bit
103103
wordp[{{wi}}] |= {{1_u64 << ((STARTIS[stpvi] + bi * (stpvi + stpvi + 3)) & 63)}}
104104
{% elsif (STARTIS[stpvi] + (bi - 1) * (stpvi + stpvi + 3)) < wi * 64 %} # first bit of many in word
105105
v = wordp[{{wi}}] | {{1_u64 << ((STARTIS[stpvi] + bi * (stpvi + stpvi + 3)) & 63)}}
106106
{% elsif (STARTIS[stpvi] + (bi + 1) * (stpvi + stpvi + 3)) >= (wi + 1) * 64 %} # last bit of many in word
107107
wordp[{{wi}}] = v | {{1_u64 << ((STARTIS[stpvi] + bi * (stpvi + stpvi + 3)) & 63)}}
108108
{% else %} # not the first nor the last bit in the word
109109
v |= {{1_u64 << ((STARTIS[stpvi] + bi * (stpvi + stpvi + 3)) & 63)}}
110-
{% end %}
110+
{% end %}
111111
{% end %}
112112
{% end %}
113113
wordp += {{stpvi + stpvi + 3}}
@@ -140,7 +140,6 @@ class PrimeSieve
140140
bap[swi >> 3] |= BITMASKP[swi & 7]; swi += bp
141141
end
142142
end
143-
144143
in Techniques::Stride8
145144
(0..).each do |i|
146145
swi = (i + i) * (i + 3) + 3 # calculate start marking index
@@ -158,7 +157,6 @@ class PrimeSieve
158157
swi += bp
159158
end
160159
end
161-
162160
in Techniques::Stride8Block16K
163161
strtsp = Pointer.malloc(8, nil.as Pointer(UInt8))
164162
(0..).each do |i|
@@ -176,17 +174,16 @@ class PrimeSieve
176174
mask = BITMASKP[si]; bytendxp = strtsp[si]
177175
while bytendxp <= blockstopp
178176
bytendxp[0] |= mask; bytendxp[bp] |= mask
179-
bytendxp[bp2] |= mask; bytendxp[bp3] |= mask ; bytendxp += bp4
177+
bytendxp[bp2] |= mask; bytendxp[bp3] |= mask; bytendxp += bp4
180178
end
181179
while bytendxp <= blocklmtp
182-
bytendxp[0] |= mask ; bytendxp += bp
180+
bytendxp[0] |= mask; bytendxp += bp
183181
end
184182
strtsp[si] = bytendxp
185183
end
186184
pagebytendx += CPUL1CACHE
187185
end
188186
end
189-
190187
in Techniques::Extreme
191188
(0..).each do |i|
192189
swi = (i + i) * (i + 3) + 3 # calculate start marking index
@@ -208,7 +205,7 @@ class PrimeSieve
208205
end
209206
end
210207
end
211-
end
208+
end
212209

213210
def count_primes
214211
if @range < 3
@@ -245,8 +242,8 @@ def bench(tec : Techniques)
245242
end
246243
if duration >= FORTO
247244
prime_count = sieve.count_primes
248-
count = sieve.@range < 2 ? 0 : 1
249-
(0 .. ((sieve.@range - 3) >> 1).to_i32).each do |i|
245+
count = sieve.@range < 2 ? 0 : 1
246+
(0..((sieve.@range - 3) >> 1).to_i32).each do |i|
250247
count += 1 if (sieve.@bufp[i >> 3] & BITMASKP[i & 7]) == 0
251248
end
252249
valid = count == EXPECTED && prime_count == EXPECTED
@@ -256,21 +253,23 @@ def bench(tec : Techniques)
256253
printf("Invalid result!!!: ")
257254
end
258255
STDERR.printf("Passes: %d Time: %f Avg: %f Limit: %d Count1: %d Count2: %d Valid: %s\n",
259-
passes, duration, (duration / passes),
260-
sieve.@range, count, prime_count, valid)
256+
passes, duration, (duration / passes),
257+
sieve.@range, count, prime_count, valid)
261258
break
262259
end
263260
end
264261
end
265262

266-
{% if flag? :expand_macro %} # only one bit
263+
{% if flag? :expand_macro %}
264+
# only one bit
267265
bap = Pointer.malloc(16384, 0_u8)
268266
bp = 3
269267
swi = (bp * bp - 3) >> 3
270268
lmti = 131071
271269
unroll_setbits(bap, swi, lmti, bp)
272270
dense_setbits(bap, swi, lmti, bp)
273271
{% else %}
274-
Techniques.each do |t| bench(t) end
272+
Techniques.each do |t|
273+
bench(t)
274+
end
275275
{% end %}
276-

0 commit comments

Comments
 (0)