annotate src/fftw-3.3.8/libbench2/allocate.c @ 84:08ae793730bd

Add null config files
author Chris Cannam
date Mon, 02 Mar 2020 14:03:47 +0000
parents d0c2a83c1364
children
rev   line source
Chris@82 1 /* not worth copyrighting */
Chris@82 2
Chris@82 3
Chris@82 4 #include "libbench2/bench.h"
Chris@82 5
Chris@82 6 static void bounds(bench_problem *p, int *ilb, int *iub, int *olb, int *oub)
Chris@82 7 {
Chris@82 8 bench_tensor *t = tensor_append(p->sz, p->vecsz);
Chris@82 9 tensor_ibounds(t, ilb, iub);
Chris@82 10 tensor_obounds(t, olb, oub);
Chris@82 11 tensor_destroy(t);
Chris@82 12 }
Chris@82 13
Chris@82 14 /*
Chris@82 15 * Allocate I/O arrays for a problem.
Chris@82 16 *
Chris@82 17 * This is the default routine that can be overridden by the user in
Chris@82 18 * complicated cases.
Chris@82 19 */
Chris@82 20 void problem_alloc(bench_problem *p)
Chris@82 21 {
Chris@82 22 int ilb, iub, olb, oub;
Chris@82 23 int isz, osz;
Chris@82 24
Chris@82 25 bounds(p, &ilb, &iub, &olb, &oub);
Chris@82 26 isz = iub - ilb;
Chris@82 27 osz = oub - olb;
Chris@82 28
Chris@82 29 if (p->kind == PROBLEM_COMPLEX) {
Chris@82 30 bench_complex *in, *out;
Chris@82 31
Chris@82 32 p->iphyssz = isz;
Chris@82 33 p->inphys = in = (bench_complex *) bench_malloc(isz * sizeof(bench_complex));
Chris@82 34 p->in = in - ilb;
Chris@82 35
Chris@82 36 if (p->in_place) {
Chris@82 37 p->out = p->in;
Chris@82 38 p->outphys = p->inphys;
Chris@82 39 p->ophyssz = p->iphyssz;
Chris@82 40 } else {
Chris@82 41 p->ophyssz = osz;
Chris@82 42 p->outphys = out = (bench_complex *) bench_malloc(osz * sizeof(bench_complex));
Chris@82 43 p->out = out - olb;
Chris@82 44 }
Chris@82 45 } else if (p->kind == PROBLEM_R2R) {
Chris@82 46 bench_real *in, *out;
Chris@82 47
Chris@82 48 p->iphyssz = isz;
Chris@82 49 p->inphys = in = (bench_real *) bench_malloc(isz * sizeof(bench_real));
Chris@82 50 p->in = in - ilb;
Chris@82 51
Chris@82 52 if (p->in_place) {
Chris@82 53 p->out = p->in;
Chris@82 54 p->outphys = p->inphys;
Chris@82 55 p->ophyssz = p->iphyssz;
Chris@82 56 } else {
Chris@82 57 p->ophyssz = osz;
Chris@82 58 p->outphys = out = (bench_real *) bench_malloc(osz * sizeof(bench_real));
Chris@82 59 p->out = out - olb;
Chris@82 60 }
Chris@82 61 } else if (p->kind == PROBLEM_REAL && p->sign < 0) { /* R2HC */
Chris@82 62 bench_real *in;
Chris@82 63 bench_complex *out;
Chris@82 64
Chris@82 65 isz = isz > osz*2 ? isz : osz*2;
Chris@82 66 p->iphyssz = isz;
Chris@82 67 p->inphys = in = (bench_real *) bench_malloc(p->iphyssz * sizeof(bench_real));
Chris@82 68 p->in = in - ilb;
Chris@82 69
Chris@82 70 if (p->in_place) {
Chris@82 71 p->out = p->in;
Chris@82 72 p->outphys = p->inphys;
Chris@82 73 p->ophyssz = p->iphyssz / 2;
Chris@82 74 } else {
Chris@82 75 p->ophyssz = osz;
Chris@82 76 p->outphys = out = (bench_complex *) bench_malloc(osz * sizeof(bench_complex));
Chris@82 77 p->out = out - olb;
Chris@82 78 }
Chris@82 79 } else if (p->kind == PROBLEM_REAL && p->sign > 0) { /* HC2R */
Chris@82 80 bench_real *out;
Chris@82 81 bench_complex *in;
Chris@82 82
Chris@82 83 osz = osz > isz*2 ? osz : isz*2;
Chris@82 84 p->ophyssz = osz;
Chris@82 85 p->outphys = out = (bench_real *) bench_malloc(p->ophyssz * sizeof(bench_real));
Chris@82 86 p->out = out - olb;
Chris@82 87
Chris@82 88 if (p->in_place) {
Chris@82 89 p->in = p->out;
Chris@82 90 p->inphys = p->outphys;
Chris@82 91 p->iphyssz = p->ophyssz / 2;
Chris@82 92 } else {
Chris@82 93 p->iphyssz = isz;
Chris@82 94 p->inphys = in = (bench_complex *) bench_malloc(isz * sizeof(bench_complex));
Chris@82 95 p->in = in - ilb;
Chris@82 96 }
Chris@82 97 } else {
Chris@82 98 BENCH_ASSERT(0); /* TODO */
Chris@82 99 }
Chris@82 100 }
Chris@82 101
Chris@82 102 void problem_free(bench_problem *p)
Chris@82 103 {
Chris@82 104 if (p->outphys && p->outphys != p->inphys)
Chris@82 105 bench_free(p->outphys);
Chris@82 106 if (p->inphys)
Chris@82 107 bench_free(p->inphys);
Chris@82 108 tensor_destroy(p->sz);
Chris@82 109 tensor_destroy(p->vecsz);
Chris@82 110 }