In discussion with @JehandadKhan, we decided not to include strides of non-packed tensors to the database keys. Only an optional flag (saying that at least one tensor is non-packed) should be included there. The above means that databases will share the same find-db records, same Invoker instances and same perf-db information for the non-packed convolutions that differ only in strides.
The above design should work correctly provided that:
If an Invoker instance is able to compute some non-packed convolution, then the same instance must be able to compute any similar non-packed convolution that differs only in strides.
[Consequence 1] An Invoker that is used for computation of non-packed convolutions must read stride information from DataInvokeParams (passed to Invoker) and pass it to the kernels as run-time parameters.
[Consequence 2] Stride information should not be used for building any compile-time parameters.
If a kernel that is used to compute a non-packed convolution requires tuning, then the same tuning parameters must provide similar performance for non-packed convolutions that differs only in strides.
From now on, the above is becoming a part of the Solver/Solution/Invoker specification.
UPDATE:
In discussion with @JehandadKhan, we decided not to include strides of non-packed tensors to the database keys. Only an optional flag (saying that at least one tensor is non-packed) should be included there. The above means that databases will share the same find-db records, same Invoker instances and same perf-db information for the non-packed convolutions that differ only in strides.
The above design should work correctly provided that:
DataInvokeParams
(passed to Invoker) and pass it to the kernels as run-time parameters.From now on, the above is becoming a part of the Solver/Solution/Invoker specification.
@amberhassaan @junliume
_Originally posted by @atamazov in https://github.com/ROCmSoftwarePlatform/MIOpen/pull/2334#discussion_r1348090910_