Struct std::Conv2dJob
struct Conv2dJob {
const IM_R* img;
const IM_R* kernel;
IM_R* out;
unsigned long h;
unsigned long w;
unsigned long kh;
unsigned long kw;
}Each output row is a sum of shifted input rows times one kernel tap: row-wide multiply-adds over the x range where the tap stays inside the image, which vectorize. Rows run on the thread pool for larger images.