program_mult_manycore.go 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. // Aplica o back-end do juninho
  2. @target : mipsjun
  3. // Quantidade de palavras de um bloco 32 palavras de 4bytes
  4. @cacheBlockSize: `32`
  5. /**
  6. Profile de compilacao do back-end
  7. O formato da string é um json que descreve um array de definições de cada core
  8. {
  9. "stackBaseAddress" : 5888, -> endereço da base da pilha do core em questão
  10. "initFunction": "multiplica(0)", -> define a main de cada core. aceita ate 4 parametros com valores de constantes
  11. "id": "core0" -> label que define o codigo de cada core
  12. },
  13. Se "stackBaseAddress" não for definido o compilador irá inferir o valor iniciando do ultimo endereço da memoria
  14. */
  15. @profile: `[
  16. {
  17. "id" : "core0",
  18. "initFunction" : "multiplica(0)"
  19. },
  20. {
  21. "id" : "core1",
  22. "initFunction" : "multiplica(5)"
  23. },
  24. {
  25. "id" : "core2",
  26. "initFunction" : "multiplica(10)"
  27. },
  28. {
  29. "id" : "core3",
  30. "initFunction" : "multiplica(15)"
  31. }
  32. ]`
  33. package main;
  34. const (
  35. LIN = 20
  36. COL = 20
  37. NUM_LINHAS_MULT = 5
  38. )
  39. var (
  40. matrizA [LIN][COL]int
  41. matrizB [LIN][COL]int
  42. matrizR [LIN][COL]int
  43. )
  44. func multiplica(initial int) {
  45. aux := 0
  46. limit := initial + NUM_LINHAS_MULT
  47. for i := initial; i < limit; i++ {
  48. for j := 0; j < COL; j++ {
  49. for k := 0; k < LIN; k++ {
  50. aux = aux + (matrizA[i][k] * matrizB[k][j])
  51. }
  52. matrizR[i][j] = aux
  53. aux = 0
  54. }
  55. }
  56. x()
  57. }
  58. func x() int {
  59. a := 1
  60. return a
  61. }