1import os.path 2import itertools 3import Tools 4import random 5import numpy as np 6 7NBTESTSAMPLES = 10 8 9# Nb vectors for barycenter 10NBVECTORS = [4,10,16] 11 12VECDIM = [12,14,20] 13 14def genWsum(config,f,nb): 15 DIM=50 16 inputs=[] 17 weights=[] 18 output=[] 19 20 21 va = np.random.rand(DIM) 22 vb = np.random.rand(DIM) 23 inputs += list(va) 24 weights += list(vb) 25 26 nbiters = Tools.loopnb(f,Tools.TAILONLY) 27 e = np.sum(va[0:nbiters].T * vb[0:nbiters]) / np.sum(vb[0:nbiters]) 28 output.append(e) 29 30 nbiters = Tools.loopnb(f,Tools.BODYONLY) 31 e = np.sum(va[0:nbiters].T * vb[0:nbiters]) / np.sum(vb[0:nbiters]) 32 output.append(e) 33 34 nbiters = Tools.loopnb(f,Tools.BODYANDTAIL) 35 e = np.sum(va[0:nbiters].T * vb[0:nbiters]) / np.sum(vb[0:nbiters]) 36 output.append(e) 37 38 inputs=np.array(inputs) 39 weights=np.array(weights) 40 output=np.array(output) 41 config.writeInput(nb, inputs,"Inputs") 42 config.writeInput(nb, weights,"Weights") 43 config.writeReference(nb, output,"Ref") 44 45def genBarycenter(config,nb,nbTests,nbVecsArray,vecDimArray): 46 dims=[] 47 inputs=[] 48 weights=[] 49 output=[] 50 51 dims.append(nbTests) 52 53 54 for i in range(0,nbTests): 55 nbVecs = nbVecsArray[i % len(nbVecsArray)] 56 vecDim = vecDimArray[i % len(vecDimArray)] 57 dims.append(nbVecs ) 58 dims.append(vecDim) 59 60 vecs = [] 61 b = np.zeros(vecDim) 62 coefs = np.random.rand(nbVecs) 63 64 for i in range(nbVecs): 65 va = np.random.rand(vecDim) 66 b += va * coefs[i] 67 vecs += list(va) 68 69 b = b / np.sum(coefs) 70 71 inputs += list(vecs) 72 weights += list(coefs) 73 output += list(b) 74 inputs=np.array(inputs) 75 weights=np.array(weights) 76 output=np.array(output) 77 config.writeInput(nb, inputs,"Inputs") 78 config.writeInputS16(nb, dims,"Dims") 79 config.writeInput(nb, weights,"Weights") 80 config.writeReference(nb, output,"Ref") 81 82# Gen samples for datatype conversions 83def genSamples(nb): 84 va = np.random.rand(nb) 85 va = Tools.normalize(va) 86 sat = np.array([-1.0,1.0,-2.1,2.1]) 87 va = np.hstack([va,sat]) 88 return(va) 89 90def writeTestsF64(config): 91 NBSAMPLES=256 92 va = genSamples(NBSAMPLES) 93 94 config.writeInput(1,va,"Samples") 95 config.writeInputF32(6,va,"Samples") 96 config.writeInputQ31(4,va,"Samples") 97 config.writeInputQ15(3,va,"Samples") 98 config.writeInputQ7(5,va,"Samples") 99 config.writeInputF16(11,va,"Samples") 100 101def writeTestsF32(config): 102 NBSAMPLES=256 103 104 va = genSamples(NBSAMPLES) 105 config.writeInput(1,va,"Samples") 106 config.writeInputF64(6,va,"Samples") 107 config.writeInputQ15(3,va,"Samples") 108 config.writeInputQ31(4,va,"Samples") 109 config.writeInputQ7(5,va,"Samples") 110 111 112 # This is for benchmarking the weighted sum and we use only one test pattern 113 genWsum(config,Tools.F32,6) 114 115 116def writeTestsF16(config): 117 NBSAMPLES=256 118 119 va = genSamples(NBSAMPLES) 120 config.writeInputF16(11,va,"Samples") 121 config.writeInputF32(1,va,"Samples") 122 config.writeInputF64(6,va,"Samples") 123 config.writeInputQ15(3,va,"Samples") 124 125 # This is for benchmarking the weighted sum and we use only one test pattern 126 genWsum(config,Tools.F16,6) 127 128def writeTestsQ31(config): 129 NBSAMPLES=256 130 131 va = genSamples(NBSAMPLES) 132 config.writeInputF32(1,va,"Samples") 133 config.writeInputF64(6,va,"Samples") 134 config.writeInputQ15(3,va,"Samples") 135 config.writeInput(4,va,"Samples") 136 config.writeInputQ7(5,va,"Samples") 137 138 139def writeTestsQ15(config): 140 NBSAMPLES=256 141 142 va = genSamples(NBSAMPLES) 143 config.writeInputF32(1,va,"Samples") 144 config.writeInputF64(6,va,"Samples") 145 config.writeInput(3,va,"Samples") 146 config.writeInputQ31(4,va,"Samples") 147 config.writeInputQ7(5,va,"Samples") 148 config.writeInputF16(11,va,"Samples") 149 150def writeTestsQ7(config): 151 NBSAMPLES=256 152 153 va = genSamples(NBSAMPLES) 154 config.writeInputF32(1,va,"Samples") 155 config.writeInputF64(6,va,"Samples") 156 config.writeInputQ15(3,va,"Samples") 157 config.writeInputQ31(4,va,"Samples") 158 config.writeInput(5,va,"Samples") 159 160def writeBarTests(config): 161 # For testing 162 NBSAMPLES = 10 163 nbVecsArray = [4,8,9] 164 vecDimArray = [4,4,4,8,8,8,9,9,9] 165 genBarycenter(config,1,NBTESTSAMPLES,nbVecsArray,vecDimArray) 166 167 # For benchmarks 168 va = np.random.rand(128*15) 169 vb = np.random.rand(128) 170 config.writeInput(1,va,"Samples") 171 config.writeInput(1,vb,"Coefs") 172 173def writeTests2(config, format): 174 175 data = np.random.randn(11) 176 data = Tools.normalize(data) 177 config.writeInput(7, data) 178 ref = np.sort(data) 179 config.writeReference(7, ref) 180 181 data = np.random.randn(16) 182 data = Tools.normalize(data) 183 config.writeInput(8, data) 184 ref = np.sort(data) 185 config.writeReference(8, ref) 186 187 data = np.random.randn(32) 188 data = Tools.normalize(data) 189 config.writeInput(9, data) 190 ref = np.sort(data) 191 config.writeReference(9, ref) 192 193 data = np.full((16), np.random.randn(1)) 194 data = Tools.normalize(data) 195 config.writeInput(10, data) 196 ref = np.sort(data) 197 config.writeReference(10, ref) 198 199 200def generatePatterns(): 201 PATTERNDIR = os.path.join("Patterns","DSP","Support","Support") 202 PARAMDIR = os.path.join("Parameters","DSP","Support","Support") 203 204 configf64=Tools.Config(PATTERNDIR,PARAMDIR,"f64") 205 configf32=Tools.Config(PATTERNDIR,PARAMDIR,"f32") 206 configf16=Tools.Config(PATTERNDIR,PARAMDIR,"f16") 207 configq31=Tools.Config(PATTERNDIR,PARAMDIR,"q31") 208 configq15=Tools.Config(PATTERNDIR,PARAMDIR,"q15") 209 configq7=Tools.Config(PATTERNDIR,PARAMDIR,"q7") 210 211 configf64.setOverwrite(False) 212 configf32.setOverwrite(False) 213 configf16.setOverwrite(True) 214 configq31.setOverwrite(False) 215 configq15.setOverwrite(False) 216 configq7.setOverwrite(False) 217 218 219 writeTestsF64(configf64) 220 writeTestsF32(configf32) 221 writeTestsF16(configf16) 222 writeTestsQ31(configq31) 223 writeTestsQ15(configq15) 224 writeTestsQ7(configq7) 225 226 configf64.setOverwrite(False) 227 configf32.setOverwrite(False) 228 configf16.setOverwrite(False) 229 configq31.setOverwrite(False) 230 configq15.setOverwrite(False) 231 configq7.setOverwrite(False) 232 233 writeTests2(configf32,0) 234 235 236 237 # For benchmarking we need to vary number of vectors and vector dimension separately 238 PATTERNBARDIR = os.path.join("Patterns","DSP","SupportBar") 239 PARAMBARDIR = os.path.join("Parameters","DSP","SupportBar") 240 241 configBarf32=Tools.Config(PATTERNBARDIR,PARAMBARDIR,"f32") 242 configBarf16=Tools.Config(PATTERNBARDIR,PARAMBARDIR,"f16") 243 244 writeBarTests(configBarf32) 245 writeBarTests(configBarf16) 246 247if __name__ == '__main__': 248 generatePatterns() 249