stanford-ppl / spatial

Spatial: "Specify Parameterized Accelerators Through Inordinately Abstract Language"
https://spatial.stanford.edu
MIT License
271 stars 33 forks source link

Banking Analyzer is Lying About Being Able to Bank This #273

Open mattfel1 opened 4 years ago

mattfel1 commented 4 years ago

This succeeds in the banking analyzer with only one duplicate, but it shouldn't! It is broadcasting incorrectly

@spatial class HowCanYouBank extends SpatialTest {
  override def compileArgs: Args = super.compileArgs and "--noBroadcast"
 def main(args: Array[String]): Unit = {
     type T = Int
     val N = ArgIn[Int]
     val np = 2
     val ep = 4
     val func: Idx => Int = {x => mux(random[Bit], 5.to[T], 10.to[T])}
     setArg(N, 888)
     Accel {
        val mem = SRAM[T](32,ep)
        Foreach(N by 1 par 1) { i =>
            Foreach(ep by 1 par 1) { j =>
                mem(i,j) = j
            }
        }
        Foreach(N by 1 par np) { i =>
           val a = func(i)
           val b = func(i)
           val slice = i % np
           Foreach(a by b par ep) { j =>
               val c = func(j)
               println(r"${mem(c,j)}")
           }
        }
     }

     assert(true)
  }
}