program_jun_laplaciano.go 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  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 : simulation //MultCoreJun
  5. // Diretorio onde o resultado da compilação será gravado
  6. @outputDirectory : `C:\Users\EUGENIO CARVALHO\Desktop\tmp\laplaciano`
  7. // Quantidade de palavras de um bloco 32 palavras de 4bytes
  8. @cacheBlockSize: `32`
  9. /**
  10. Profile de compilacao do back-end
  11. O formato da string é um json que descreve um array de definições de cada core
  12. {
  13. "stackBaseAddress" : 5888, -> endereço da base da pilha do core em questão
  14. "initFunction": "multiplica(0)", -> define a main de cada core. aceita ate 4 parametros com valores de constantes
  15. "id": "core0" -> label que define o codigo de cada core
  16. },
  17. Se "stackBaseAddress" não for definido o compilador irá inferir o valor iniciando do ultimo endereço da memoria
  18. */
  19. @profile: `[
  20. {
  21. "id" : "core0",
  22. "initFunction" : "multiplica(0)",
  23. "filename" : "%s_core_0.txt"
  24. },
  25. {
  26. "id" : "core1",
  27. "initFunction" : "multiplica(5)",
  28. "filename" : "%s_core_1.txt"
  29. },
  30. {
  31. "id" : "core2",
  32. "initFunction" : "multiplica(10)",
  33. "filename" : "%s_core_2.txt"
  34. },
  35. {
  36. "id" : "core3",
  37. "initFunction" : "multiplica(15)",
  38. "filename" : "%s_core_3.txt"
  39. }
  40. ]`
  41. package main;
  42. const (
  43. LIN = 4
  44. COL = 4
  45. )
  46. var (
  47. origin [LIN][COL]int32
  48. result [LIN][COL]int32
  49. )
  50. func preenche_matriz() {
  51. var (
  52. w = 1
  53. value, LM1, CM1 int32
  54. )
  55. LM1 = LIN - 1
  56. CM1 = COL - 1
  57. for i := 0; i < LIN; i++ {
  58. for j := 0; j < COL; j++ {
  59. switch {
  60. case i == 0, i == LM1: // Primeira e ultima linha
  61. value = 0
  62. case j == 0, j == CM1: // Primeira e ultima coluna
  63. value = 0
  64. default: // Elementos do interior da matriz
  65. value = w
  66. w++
  67. }
  68. origin[i][j] = value
  69. }
  70. }
  71. }
  72. func laplaciano() {
  73. var (
  74. l int32
  75. )
  76. LM1 := LIN - 1
  77. CM1 := COL - 1
  78. for i:= 1; i < LM1; i++ {
  79. for j := 1; j < CM1; j++ {
  80. l = origin[i-1][j]
  81. l += origin[i][j-1]
  82. l += origin[i][j+1]
  83. l += origin[i+1][j]
  84. l -= (4 * origin[i][j])
  85. if l > 255 { l = 255 }
  86. else if l < 0 { l = 0 }
  87. result[i][j] = l
  88. }
  89. }
  90. }
  91. func main() {
  92. preenche_matriz()
  93. laplaciano()
  94. }