@@ -26,6 +26,16 @@ import (
26
26
)
27
27
28
28
func main () {
29
+ start := time .Now ()
30
+ err := run ()
31
+ elapsed := time .Since (start ).Round (time .Millisecond )
32
+ if err != nil {
33
+ log .Fatalf ("FAIL in %s: %s" , elapsed , err .Error ())
34
+ }
35
+ log .Println ("PASS in " , elapsed )
36
+ }
37
+
38
+ func run () error {
29
39
_ , terminate , err := glgl .InitWithCurrentWindow33 (glgl.WindowConfig {
30
40
Title : "compute" ,
31
41
Version : [2 ]int {4 , 6 },
@@ -36,26 +46,24 @@ func main() {
36
46
log .Fatal ("FAIL to start GLFW" , err .Error ())
37
47
}
38
48
defer terminate ()
39
-
40
- start := time .Now ()
41
49
err = test_polygongpu ()
42
50
if err != nil {
43
- log . Fatal ( "FAIL testing PolygonGPU: " , err . Error () )
51
+ return fmt . Errorf ( " testing polygonGPU: %w " , err )
44
52
}
53
+
45
54
err = test_visualizer_generation ()
46
55
if err != nil {
47
- log . Fatal ( "FAIL generating visualization GLSL: " , err . Error () )
56
+ return fmt . Errorf ( " generating visualization GLSL: %w " , err )
48
57
}
49
58
err = test_sdf_gpu_cpu ()
50
59
if err != nil {
51
- log . Fatal ( "FAIL testing CPU/GPU sdf comparisons: " , err . Error () )
60
+ return fmt . Errorf ( " testing CPU/GPU sdf comparisons: %w " , err )
52
61
}
53
62
err = test_stl_generation ()
54
63
if err != nil {
55
- log . Fatal ( "FAIL generating STL: " , err . Error () )
64
+ return fmt . Errorf ( " generating STL: %w " , err )
56
65
}
57
-
58
- log .Println ("PASS in " , time .Since (start ).Round (time .Millisecond ))
66
+ return nil
59
67
}
60
68
61
69
var programmer = glbuild .NewDefaultProgrammer ()
@@ -144,21 +152,22 @@ func test_sdf_gpu_cpu() error {
144
152
scratchDist := make ([]float32 , maxBuf )
145
153
scratchPos := make ([]ms3.Vec , maxBuf )
146
154
scratchPos2 := make ([]ms2.Vec , maxBuf )
147
- for _ , primitive := range PremadePrimitives {
148
- log .Printf ("begin evaluating %s" , getBaseTypename (primitive ))
155
+
156
+ for _ , primitive := range PremadePrimitives2D {
157
+ log .Printf ("evaluate 2D %s\n " , getBaseTypename (primitive ))
149
158
bounds := primitive .Bounds ()
150
- pos := appendMeshgrid ( scratchPos [:0 ], bounds , nx , ny , nz )
159
+ pos := appendMeshgrid2D ( scratchPos2 [:0 ], bounds , nx , ny )
151
160
distCPU := scratchDistCPU [:len (pos )]
152
161
distGPU := scratchDistGPU [:len (pos )]
153
- sdfcpu , err := gleval .AssertSDF3 (primitive )
162
+ sdfcpu , err := gleval .AssertSDF2 (primitive )
154
163
if err != nil {
155
164
return err
156
165
}
157
166
err = sdfcpu .Evaluate (pos , distCPU , vp )
158
167
if err != nil {
159
168
return err
160
169
}
161
- sdfgpu := makeGPUSDF3 (primitive )
170
+ sdfgpu := makeGPUSDF2 (primitive )
162
171
err = sdfgpu .Evaluate (pos , distGPU , nil )
163
172
if err != nil {
164
173
return err
@@ -168,28 +177,28 @@ func test_sdf_gpu_cpu() error {
168
177
description := sprintOpPrimitive (nil , primitive )
169
178
return fmt .Errorf ("%s: %s" , description , err )
170
179
}
171
- err = test_bounds (sdfcpu , scratchDist , vp )
172
- if err != nil {
173
- description := sprintOpPrimitive (nil , primitive )
174
- return fmt .Errorf ("%s: %s" , description , err )
175
- }
180
+ // err = test_bounds(sdfcpu, scratchDist, vp)
181
+ // if err != nil {
182
+ // description := sprintOpPrimitive(nil, primitive)
183
+ // return fmt.Errorf("%s: %s", description, err)
184
+ // }
176
185
}
177
186
178
- for _ , primitive := range PremadePrimitives2D {
179
- log .Printf ("evaluate 2D %s\n " , getBaseTypename (primitive ))
187
+ for _ , primitive := range PremadePrimitives {
188
+ log .Printf ("begin evaluating %s" , getBaseTypename (primitive ))
180
189
bounds := primitive .Bounds ()
181
- pos := appendMeshgrid2D ( scratchPos2 [:0 ], bounds , nx , ny , nz )
190
+ pos := appendMeshgrid ( scratchPos [:0 ], bounds , nx , ny , nz )
182
191
distCPU := scratchDistCPU [:len (pos )]
183
192
distGPU := scratchDistGPU [:len (pos )]
184
- sdfcpu , err := gleval .AssertSDF2 (primitive )
193
+ sdfcpu , err := gleval .AssertSDF3 (primitive )
185
194
if err != nil {
186
195
return err
187
196
}
188
197
err = sdfcpu .Evaluate (pos , distCPU , vp )
189
198
if err != nil {
190
199
return err
191
200
}
192
- sdfgpu := makeGPUSDF2 (primitive )
201
+ sdfgpu := makeGPUSDF3 (primitive )
193
202
err = sdfgpu .Evaluate (pos , distGPU , nil )
194
203
if err != nil {
195
204
return err
@@ -199,11 +208,11 @@ func test_sdf_gpu_cpu() error {
199
208
description := sprintOpPrimitive (nil , primitive )
200
209
return fmt .Errorf ("%s: %s" , description , err )
201
210
}
202
- // err = test_bounds(sdfcpu, scratchDist, vp)
203
- // if err != nil {
204
- // description := sprintOpPrimitive(nil, primitive)
205
- // return fmt.Errorf("%s: %s", description, err)
206
- // }
211
+ err = test_bounds (sdfcpu , scratchDist , vp )
212
+ if err != nil {
213
+ description := sprintOpPrimitive (nil , primitive )
214
+ return fmt .Errorf ("%s: %s" , description , err )
215
+ }
207
216
}
208
217
209
218
for _ , op := range BinaryOps {
@@ -431,32 +440,43 @@ func test_visualizer_generation() error {
431
440
}
432
441
433
442
func test_polygongpu () error {
443
+ const Nvertices = 16000
434
444
var polybuilder ms2.PolygonBuilder
435
- polybuilder .NagonSmoothed ( 5 , 2 , 4 , 0.1 )
445
+ polybuilder .Nagon ( Nvertices , 2 )
436
446
vecs , err := polybuilder .AppendVecs (nil )
437
447
if err != nil {
438
448
return err
439
449
}
450
+
440
451
poly , err := gsdf .NewPolygon (vecs )
441
452
if err != nil {
442
453
return err
443
454
}
444
455
polyGPU := gleval.PolygonGPU {Vertices : vecs }
445
- pos := appendMeshgrid2D (nil , poly .Bounds (), 32 , 32 , 32 )
446
- distCPU := make ([]float32 , len (pos ))
447
- distGPU := make ([]float32 , len (pos ))
448
- sdfcpu , err := gleval .NewCPUSDF2 (poly )
449
- if err != nil {
450
- return err
451
- }
452
- err = polyGPU .Evaluate (pos , distGPU , nil )
453
- if err != nil {
454
- return err
455
- }
456
- err = sdfcpu .Evaluate (pos , distCPU , nil )
457
- if err != nil {
458
- return err
456
+ for _ , sz := range []int {32 } {
457
+ now := time .Now ()
458
+ pos := appendMeshgrid2D (nil , poly .Bounds (), sz , sz )
459
+ distCPU := make ([]float32 , len (pos ))
460
+ distGPU := make ([]float32 , len (pos ))
461
+ sdfcpu , err := gleval .NewCPUSDF2 (poly )
462
+ if err != nil {
463
+ return err
464
+ }
465
+ err = polyGPU .Evaluate (pos , distGPU , nil )
466
+ if err != nil {
467
+ return err
468
+ }
469
+ fmt .Println (sz , time .Since (now ).Round (time .Millisecond ))
470
+ err = sdfcpu .Evaluate (pos , distCPU , nil )
471
+ if err != nil {
472
+ return err
473
+ }
474
+ err = cmpDist (pos , distCPU , distGPU )
475
+ if err != nil {
476
+ return err
477
+ }
459
478
}
479
+
460
480
log .Println ("PASS polygongpu" )
461
481
return nil
462
482
}
@@ -623,7 +643,7 @@ func appendMeshgrid(dst []ms3.Vec, bounds ms3.Box, nx, ny, nz int) []ms3.Vec {
623
643
return dst
624
644
}
625
645
626
- func appendMeshgrid2D (dst []ms2.Vec , bounds ms2.Box , nx , ny , nz int ) []ms2.Vec {
646
+ func appendMeshgrid2D (dst []ms2.Vec , bounds ms2.Box , nx , ny int ) []ms2.Vec {
627
647
nxyz := ms2.Vec {X : float32 (nx ), Y : float32 (ny )}
628
648
dxyz := ms2 .DivElem (bounds .Size (), nxyz )
629
649
var xy ms2.Vec
@@ -691,12 +711,12 @@ func cmpDist[T any](pos []T, dcpu, dgpu []float32) error {
691
711
mismatches := 0
692
712
const tol = 5e-3
693
713
var mismatchErr error
694
- for i , dg := range dcpu {
695
- dc := dgpu [i ]
714
+ for i , dc := range dcpu {
715
+ dg := dgpu [i ]
696
716
diff := math32 .Abs (dg - dc )
697
717
if diff > tol {
698
718
mismatches ++
699
- msg := fmt .Sprintf ("mismatch: pos=%+v cpu=%f, gpu=%f (diff=%f)" , pos [i ], dc , dg , diff )
719
+ msg := fmt .Sprintf ("mismatch: pos=%+v cpu=%f, gpu=%f (diff=%f) idx=%d " , pos [i ], dc , dg , diff , i )
700
720
if mismatchErr == nil {
701
721
mismatchErr = errors .New ("cpu vs. gpu distance mismatch" )
702
722
}
0 commit comments