annotate src/fftw-3.3.8/libbench2/allocate.c @ 168:ceec0dd9ec9c

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