static int applicable(const solver *ego_, const problem *p_, const planner *plnr, int *dp) { const S *ego = (const S *)ego_; const problem_dft *p; if (!applicable0(ego_, p_, dp)) return 0; /* fftw2 behavior */ if (NO_VRANK_SPLITSP(plnr) && (ego->vecloop_dim != ego->buddies[0])) return 0; p = (const problem_dft *) p_; if (NO_UGLYP(plnr)) { /* Heuristic: if the transform is multi-dimensional, and the vector stride is less than the transform size, then we probably want to use a rank>=2 plan first in order to combine this vector with the transform-dimension vectors. */ { iodim *d = p->vecsz->dims + *dp; if (1 && p->sz->rnk > 1 && X(imin)(X(iabs)(d->is), X(iabs)(d->os)) < X(tensor_max_index)(p->sz) ) return 0; } if (NO_NONTHREADEDP(plnr)) return 0; /* prefer threaded version */ } return 1; }
static int applicable(const solver *ego_, const problem *p_, const planner *plnr, int *dp) { const S *ego = (const S *)ego_; if (!applicable0(ego_, p_, dp)) return 0; /* fftw2 behavior */ if (NO_VRANK_SPLITSP(plnr) && (ego->vecloop_dim != ego->buddies[0])) return 0; if (NO_UGLYP(plnr)) { const problem_rdft2 *p = (const problem_rdft2 *) p_; iodim *d = p->vecsz->dims + *dp; /* Heuristic: if the transform is multi-dimensional, and the vector stride is less than the transform size, then we probably want to use a rank>=2 plan first in order to combine this vector with the transform-dimension vectors. */ if (p->sz->rnk > 1 && X(imin)(X(iabs)(d->is), X(iabs)(d->os)) < X(rdft2_tensor_max_index)(p->sz, p->kind) ) return 0; /* Heuristic: don't use a vrank-geq1 for rank-0 vrank-1 transforms, since this case is better handled by rank-0 solvers. */ if (p->sz->rnk == 0 && p->vecsz->rnk == 1) return 0; if (NO_NONTHREADEDP(plnr)) return 0; /* prefer threaded version */ } return 1; }
static int applicable(const solver *ego_, const problem *p_, const planner *plnr, int *dp) { const S *ego = (const S *)ego_; if (!applicable0(ego_, p_, plnr, dp)) return 0; /* fftwf2 behavior */ if (NO_VRANK_SPLITSP(plnr) && (ego->vecloop_dim != ego->buddies[0])) return 0; return 1; }