spiral-software / fftx

FFTX Project
Other
18 stars 11 forks source link

Spiral error on convolution with GPUs #15

Open petermcLBL opened 3 years ago

petermcLBL commented 3 years ago

Spiral fails on examples/rconv on GPUs with these files, (attached with ".txt" suffix so github will allow them):

rconv.h
rconv2.fftx.cpp
rconv3.fftx.cpp
testrconv.cu

On cori.nersc.gov: module load cgpu cuda cmake python PrgEnv-intel In build directory:

cmake -D_codegen=GPU ..
make install

Also attached generated Spiral script rconv3.fftx.generator.g (with ".txt" suffix so github will allow it). rconv.h.txt rconv2.fftx.cpp.txt rconv3.fftx.cpp.txt rconv3.fftx.generator.g.txt testrconv.cu.txt

What happens when we build:

Scanning dependencies of target NAME.rconv.rconv3.fftx.generator.g
[ 26%] Built target NAME.rconv.rconv3.fftx.generator.g
[ 28%] Generating code for rconv3.fftx.source.cu

``` ...

spiral> spiral> [[ while reading stdin:36 ]] Error, Record: element 'node' must have an assigned value in

web:error brk> Top()

; [[ defined in /global/homes/p/petermc/spiral-software/namespaces/packages/fftx/fftxapi.gi:50 ]] meth ( self, rt ) local s, s2, ss, Xptr, Yptr, tags; self.symbol := When(IsBound(rt.node.params[2].params), rt.node.params[2].params, [ ]); if IsBound(rt.node.params[2].XType) then Xptr := var("Xptr", rt.node.params[2].XType); else Xptr := X; fi; if IsBound(rt.node.params[2].YType) then Yptr := var("Yptr", rt.node.params[2].YType); else Yptr := Y; fi; self.Xptr := Xptr; self.Yptr := Yptr; s := SumsRuleTree(rt, self); tags := rec( ruletree := rec() ); if IsBound(s.ruletree) then tags.ruletree := s.ruletree; fi; s2 := fixUpSigmaSPL(s, self); ss := SubstVars(s2, rec( X := Xptr, Y := Yptr )); ss := SubstTopDown(ss, @(1, [ NoDiagPullinLeft, NoDiagPullinRight, Grp ]), (e) -> e.child(1)); if IsBound(self.postProcessSums) then ss := self.postProcessSums(ss, self); fi; ss.ruletree := tags.ruletree; return ss; end

petermcLBL commented 3 years ago

There is a question about whether it doesn't work because of unsupported sizes. So I tried setting nx, ny, nz all to 80 in rconv.h, and I get the same error.