Support.py 6.6 KB

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