program_mult_manycore.go 1.9 KB

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