Support.py 5.6 KB

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