numba-dpex icon indicating copy to clipboard operation
numba-dpex copied to clipboard

Design testing approach to compare instructions generated by dpex and sycl

Open ZzEeKkAa opened this issue 1 year ago • 2 comments

We need to make sure that numba_dpex generate same llvm instructions as sycl.

Proposal:

LLVM uses FileCheck because they are comparing strings generated for the different platform. We may not need this flexibility, since we want to compare generated llvm code. It is always the same since we don't have options that affect llvm generated code. We may use this feature if cuda specific llvm ir will differe.

FileCheck is just a command line tool that needs to be called. We may want to write python wrapper for it.

Possible check flow:

  1. create sycl kernel with filecheck llvm instructions in the code
  2. run tests on those cpp files (we want to catch if sycl behavior changes)
  3. create same dpex kernels (just kernels without instructions)
  4. generate llvm ir code for each dpex kernel
  5. run FileCheck on dpex llvm code comparing it to the corresponding filecheck of sycl kernel

4 and 5 can be performed as cli commands and put in the cpp code.

Implementation status:

  • #1199
  • #1200
  • #1201

ZzEeKkAa avatar Oct 20 '23 16:10 ZzEeKkAa

  1. Compare this line to the llvm output of cpp code. We can use Filecheck here, since we need to compile cpp code using cli anyway.

The llvm IR generated from a cpp code and that from a python code might not be always ad-verbatim for a complex program with lots of variables, branching and loops, especially if you are planning to do a line-by-line comparison. You can check it here:

https://godbolt.org/

chudur-budur avatar Nov 02 '23 20:11 chudur-budur

Thank you @chudur-budur ! I've just updated proposal after talking to @diptorupd

ZzEeKkAa avatar Nov 02 '23 20:11 ZzEeKkAa