annotate src/fftw-3.3.5/libbench2/allocate.c @ 56:af97cad61ff0

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