Support.py 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229
  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. def writeTestsF64(config):
  64. NBSAMPLES=256
  65. va = np.random.rand(NBSAMPLES)
  66. va = Tools.normalize(va)
  67. config.writeInput(1,va,"Samples")
  68. def writeTestsF32(config):
  69. NBSAMPLES=256
  70. va = np.random.rand(NBSAMPLES)
  71. va = Tools.normalize(va)
  72. config.writeInput(1,va,"Samples")
  73. config.writeInputQ15(3,va,"Samples")
  74. config.writeInputQ31(4,va,"Samples")
  75. config.writeInputQ7(5,va,"Samples")
  76. config.writeInputF16(11,va,"Samples")
  77. # This is for benchmarking the weighted sum and we use only one test pattern
  78. genWsum(config,Tools.F32,6)
  79. def writeTestsF16(config):
  80. NBSAMPLES=256
  81. va = np.random.rand(NBSAMPLES)
  82. va = Tools.normalize(va)
  83. config.writeInputF32(1,va,"Samples")
  84. config.writeInputQ15(3,va,"Samples")
  85. config.writeInput(11,va,"Samples")
  86. # This is for benchmarking the weighted sum and we use only one test pattern
  87. genWsum(config,Tools.F16,6)
  88. def writeTestsQ31(config):
  89. NBSAMPLES=256
  90. va = np.random.rand(NBSAMPLES)
  91. va = Tools.normalize(va)
  92. config.writeInputF32(1,va,"Samples")
  93. config.writeInputQ15(3,va,"Samples")
  94. config.writeInput(4,va,"Samples")
  95. config.writeInputQ7(5,va,"Samples")
  96. def writeTestsQ15(config):
  97. NBSAMPLES=256
  98. va = np.random.rand(NBSAMPLES)
  99. va = Tools.normalize(va)
  100. config.writeInputF32(1,va,"Samples")
  101. config.writeInput(3,va,"Samples")
  102. config.writeInputQ31(4,va,"Samples")
  103. config.writeInputQ7(5,va,"Samples")
  104. config.writeInputF16(11,va,"Samples")
  105. def writeTestsQ7(config):
  106. NBSAMPLES=256
  107. va = np.random.rand(NBSAMPLES)
  108. va = Tools.normalize(va)
  109. config.writeInputF32(1,va,"Samples")
  110. config.writeInputQ15(3,va,"Samples")
  111. config.writeInputQ31(4,va,"Samples")
  112. config.writeInput(5,va,"Samples")
  113. def writeBarTests(config):
  114. # For testing
  115. NBSAMPLES = 10
  116. nbVecsArray = [4,8,9]
  117. vecDimArray = [4,4,4,8,8,8,9,9,9]
  118. genBarycenter(config,1,NBTESTSAMPLES,nbVecsArray,vecDimArray)
  119. # For benchmarks
  120. va = np.random.rand(128*15)
  121. vb = np.random.rand(128)
  122. config.writeInput(1,va,"Samples")
  123. config.writeInput(1,vb,"Coefs")
  124. def writeTests2(config, format):
  125. data = np.random.randn(11)
  126. data = Tools.normalize(data)
  127. config.writeInput(7, data)
  128. ref = np.sort(data)
  129. config.writeReference(7, ref)
  130. data = np.random.randn(16)
  131. data = Tools.normalize(data)
  132. config.writeInput(8, data)
  133. ref = np.sort(data)
  134. config.writeReference(8, ref)
  135. data = np.random.randn(32)
  136. data = Tools.normalize(data)
  137. config.writeInput(9, data)
  138. ref = np.sort(data)
  139. config.writeReference(9, ref)
  140. data = np.full((16), np.random.randn(1))
  141. data = Tools.normalize(data)
  142. config.writeInput(10, data)
  143. ref = np.sort(data)
  144. config.writeReference(10, ref)
  145. def generatePatterns():
  146. PATTERNDIR = os.path.join("Patterns","DSP","Support","Support")
  147. PARAMDIR = os.path.join("Parameters","DSP","Support","Support")
  148. configf64=Tools.Config(PATTERNDIR,PARAMDIR,"f64")
  149. configf32=Tools.Config(PATTERNDIR,PARAMDIR,"f32")
  150. configf16=Tools.Config(PATTERNDIR,PARAMDIR,"f16")
  151. configq31=Tools.Config(PATTERNDIR,PARAMDIR,"q31")
  152. configq15=Tools.Config(PATTERNDIR,PARAMDIR,"q15")
  153. configq7=Tools.Config(PATTERNDIR,PARAMDIR,"q7")
  154. configf32.setOverwrite(False)
  155. configf16.setOverwrite(False)
  156. configq31.setOverwrite(False)
  157. configq15.setOverwrite(False)
  158. configq7.setOverwrite(False)
  159. writeTestsF64(configf64)
  160. writeTestsF32(configf32)
  161. writeTestsF16(configf16)
  162. writeTestsQ31(configq31)
  163. writeTestsQ15(configq15)
  164. writeTestsQ7(configq7)
  165. writeTests2(configf32,0)
  166. # For benchmarking we need to vary number of vectors and vector dimension separately
  167. PATTERNBARDIR = os.path.join("Patterns","DSP","SupportBar")
  168. PARAMBARDIR = os.path.join("Parameters","DSP","SupportBar")
  169. configBarf32=Tools.Config(PATTERNBARDIR,PARAMBARDIR,"f32")
  170. configBarf16=Tools.Config(PATTERNBARDIR,PARAMBARDIR,"f16")
  171. writeBarTests(configBarf32)
  172. writeBarTests(configBarf16)
  173. if __name__ == '__main__':
  174. generatePatterns()