Ejemplo n.º 1
0
static void apply_buf(const plan *ego_, R *IO)
{
     const P *ego = (const P *) ego_;
     plan_rdft *cld0 = (plan_rdft *) ego->cld0;
     plan_rdft *cldm = (plan_rdft *) ego->cldm;
     INT i, j, m = ego->m, v = ego->v, r = ego->r;
     INT mb = ego->mb, me = ego->me, ms = ego->ms;
     INT batchsz = compute_batchsize(r);
     R *buf;
     size_t bufsz = r * batchsz * 2 * sizeof(R);

     BUF_ALLOC(R *, buf, bufsz);

     for (i = 0; i < v; ++i, IO += ego->vs) {
	  R *IOp = IO;
	  R *IOm = IO + m * ms;

	  cld0->apply((plan *) cld0, IO, IO);

	  for (j = mb; j + batchsz < me; j += batchsz) 	       
	       dobatch(ego, IOp, IOm, j, j + batchsz, buf);

	  dobatch(ego, IOp, IOm, j, me, buf);

	  cldm->apply((plan *) cldm, IO + ms * (m/2), IO + ms * (m/2));
     }

     BUF_FREE(buf, bufsz);
}
Ejemplo n.º 2
0
void loribu_destroy(loribu_t *rb)
{
    if (rb)
    {
        if (rb->buffer && !rb->user_buffer)
            BUF_FREE(rb->buffer);

        RB_FREE(rb);
    }
}
Ejemplo n.º 3
0
static void apply_buf(const plan *ego_, R *ri, R *ii, R *ro, R *io)
{
     const P *ego = (const P *) ego_;
     R *buf;
     INT vl = ego->vl, n = ego->n, batchsz = compute_batchsize(n);
     INT i;
     size_t bufsz = n * batchsz * 2 * sizeof(R);

     BUF_ALLOC(R *, buf, bufsz);

     for (i = 0; i < vl - batchsz; i += batchsz) {
	  dobatch(ego, ri, ii, ro, io, buf, batchsz);
	  ri += batchsz * ego->ivs; ii += batchsz * ego->ivs;
	  ro += batchsz * ego->ovs; io += batchsz * ego->ovs;
     }
     dobatch(ego, ri, ii, ro, io, buf, vl - i);

     BUF_FREE(buf, bufsz);
}
Ejemplo n.º 4
0
static void apply_buf(const plan *ego_, R *rio, R *iio)
{
     const P *ego = (const P *) ego_;
     INT i, j, v = ego->v, r = ego->r;
     INT batchsz = compute_batchsize(r);
     R *buf;
     INT mb = ego->mb, me = ego->me;
     size_t bufsz = r * batchsz * 2 * sizeof(R);

     BUF_ALLOC(R *, buf, bufsz);

     for (i = 0; i < v; ++i, rio += ego->vs, iio += ego->vs) {
	  for (j = mb; j + batchsz < me; j += batchsz) 
	       dobatch(ego, rio, iio, j, j + batchsz, buf);

	  dobatch(ego, rio, iio, j, me, buf);
     }

     BUF_FREE(buf, bufsz);
}
Ejemplo n.º 5
0
static void apply(const plan *ego_, R *ri, R *ii, R *ro, R *io)
{
     const P *ego = (const P *) ego_;
     INT i;
     INT n = ego->n, is = ego->is, os = ego->os;
     const TWR *W = ego->td->W;
     E *buf;
     size_t bufsz = n * 2 * sizeof(E);

     BUF_ALLOC(E *, buf, bufsz);
     hartley(n, ri, ii, is, buf, ro, io);

     for (i = 1; i + i < n; ++i) {
	  cdot(n, buf, W,
	       ro + i * os, io + i * os,
	       ro + (n - i) * os, io + (n - i) * os);
	  W += n - 1;
     }

     BUF_FREE(buf, bufsz);
}
Ejemplo n.º 6
0
static void iterate(const P *ego, R *I, R *O,
		    void (*dobatch)(const P *ego, R *I, R *O, 
				    R *buf, INT batchsz))
{
     R *buf;
     INT vl = ego->vl;
     INT n = ego->n;
     INT i;
     INT batchsz = compute_batchsize(n);
     size_t bufsz = n * batchsz * sizeof(R);

     BUF_ALLOC(R *, buf, bufsz);

     for (i = 0; i < vl - batchsz; i += batchsz) {
	  dobatch(ego, I, O, buf, batchsz);
	  I += batchsz * ego->ivs;
	  O += batchsz * ego->ovs;
     }
     dobatch(ego, I, O, buf, vl - i);

     BUF_FREE(buf, bufsz);
}