program_jun_lu.go 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. // Aplica o back-end do juninho
  2. @target : mipsjun
  3. // Especifica o tipo de metodo empregado para salvar o resultado da compilação
  4. //@export : MultCoreJun
  5. @export : simulation
  6. // Diretorio onde o resultado da compilação será gravado
  7. @outputDirectory : `C:\Users\EUGENIO CARVALHO\Desktop\tmp\lu`
  8. // Quantidade de palavras de um bloco 32 palavras de 4bytes
  9. @cacheBlockSize: `32`
  10. /**
  11. Profile de compilacao do back-end
  12. O formato da string é um json que descreve um array de definições de cada core
  13. {
  14. "stackBaseAddress" : 5888, -> endereço da base da pilha do core em questão
  15. "initFunction": "multiplica(0)", -> define a main de cada core. aceita ate 4 parametros com valores de constantes
  16. "id": "core0" -> label que define o codigo de cada core
  17. },
  18. Se "stackBaseAddress" não for definido o compilador irá inferir o valor iniciando do ultimo endereço da memoria
  19. */
  20. @profile: `[
  21. {
  22. "id" : "core0",
  23. "initFunction" : "bitCount(0)",
  24. "filename" : "%s_core_0.txt"
  25. },
  26. {
  27. "id" : "core1",
  28. "initFunction" : "bitCount(18750)",
  29. "filename" : "%s_core_1.txt"
  30. },
  31. {
  32. "id" : "core2",
  33. "initFunction" : "bitCount(37500)",
  34. "filename" : "%s_core_2.txt"
  35. },
  36. {
  37. "id" : "core3",
  38. "initFunction" : "bitCount(56250)",
  39. "filename" : "%s_core_3.txt"
  40. }
  41. ]`
  42. package main;
  43. const (
  44. SIZE = 20
  45. INITIAL_LINE = 0
  46. END_LINE = 5
  47. )
  48. var (
  49. M [SIZE][SIZE]int32
  50. L [SIZE][SIZE]int32
  51. lock bool
  52. i int32
  53. j int32
  54. k int32
  55. aux_div int32
  56. res_div int32
  57. aux_mkk int32
  58. )
  59. func preenche(){
  60. if lock {return}
  61. lock = true
  62. /* Inicializa matrizes */
  63. for i = 0; i < SIZE; i++ {
  64. for j = 0; j < SIZE; j++{
  65. if i == j {
  66. M[i][j] = 1
  67. }else{
  68. M[i][j] = 1 + (i*SIZE) + j
  69. }
  70. L[i][j] = 0
  71. }
  72. }
  73. lock = false
  74. }
  75. func lu(){
  76. //for ;lock; {}
  77. /* 4. ITERATIONS LOOP */
  78. for k=INITIAL_LINE; k<SIZE-1; k++ {
  79. /* 4.1. PROCESS ROWS IN PARALLEL, DISTRIBUTE WITH nthreads STRIDE */
  80. for i=k+1; i<END_LINE; i++ {
  81. /* 4.1.1. COMPUTE L COLUMN */
  82. // L[i][k] = M[i][k] / M[k][k]; //Era DIV, mas usava BREAK e daria trabalho fazer
  83. aux_div = M[i][k]
  84. aux_mkk = M[k][k]
  85. res_div = 0
  86. if aux_div < 0 {
  87. aux_div = aux_div * -1
  88. }
  89. if aux_mkk < 0 {
  90. aux_mkk = aux_mkk * -1
  91. }
  92. for aux_div - aux_mkk >= 0 {
  93. aux_div -= aux_mkk
  94. res_div++
  95. }
  96. L[i][k] = res_div
  97. /* 4.1.2. COMPUTE M ROW ELEMENTS */
  98. for j=k+1; j<SIZE; j++ {
  99. M[i][j] = M[i][j] - L[i][k] * M[k][j]
  100. }
  101. }
  102. /* 4.2. END ITERATIONS LOOP */
  103. }
  104. }
  105. func main(){
  106. zomba := 10
  107. lu()
  108. }