Hello, I’m a beginner in mlir and Toy Dialect. After following the tutorial, I’m now trying to convert some operations to GPU dialect based on affine dialect. I’m using the pass SCF to GPU
, and some problems occur when I’m trying to convert the basic add
between two tensor to GPU dialect.
The affine dialect of add
is like:
affine.for %arg0 = 0 to 2 {
affine.for %arg1 = 0 to 3 {
%4 = affine.load %3[%arg0, %arg1] : memref<2x3xf64>
%5 = affine.load %3[%arg0, %arg1] : memref<2x3xf64>
%6 = addf %4, %5 : f64
affine.store %6, %2[%arg0, %arg1] : memref<2x3xf64>
}
}
and after adding the SCFToGPU
pass, it throws out an error:
error: 'affine.load' op index must be a dimension or symbol identifier
This should be a type check in affine dialect, however there’s no error while emitting affine dialect and error occurs in SCFToGPU
pass.
A temporary solution is to use LoadOP
instead of AffineLoadOP
while lowering Toy to affine, but considering that I may want to add some more complex operations using AffineMap
in the future, this couldn’t solve the problem perfectly.
What should I do to avoid such error and where’s the verify function of affine.load called in SCFToGPU
pass?
Thanks!