public bool Barrier(int core, int from, ulong addr) { BarrierRec b; if (m_barriers.ContainsKey(addr)) b = m_barriers[addr]; else { b = new BarrierRec(); m_barriers[addr] = b; } if (b.waiting[core]) { if (b.awaken[core]) { b.waiting[core] = false; b.awaken[core] = false; //Console.WriteLine("Progress: " + core.ToString()); } } else { b.waiting[core] = true; b.count++; Console.WriteLine("Barrier: " + core.ToString() + ' ' + addr.ToString() + ' ' + b.count.ToString()); /* string waiting = ""; string awaken = ""; for (int i = 0; i < Config.N; i++){ waiting += (b.waiting[i]).ToString() + " "; awaken += (b.awaken[i]).ToString() + " "; } Console.WriteLine("Barrier.waiting " + waiting); Console.WriteLine("Barrier.awaken " + awaken); */ if (b.count == from) { Console.WriteLine("Waking"); b.count = 0; b.waiting[core] = false; for (int i = 0; i < b.awaken.Length; i++) b.awaken[i] = true; b.awaken[core] = false; Simulator.CurrentBarrier++; } /* waiting = ""; awaken = ""; for (int i = 0; i < Config.N; i++){ waiting += (b.waiting[i]).ToString() + " "; awaken += (b.awaken[i]).ToString() + " "; } Console.WriteLine("Barrier.waiting " + waiting); Console.WriteLine("Barrier.awaken " + awaken); Console.WriteLine("============="); */ } return ! b.waiting[core]; }
public bool Barrier(int core, int from, ulong addr) { BarrierRec b; if (m_barriers.ContainsKey(addr)) { b = m_barriers[addr]; } else { b = new BarrierRec(); m_barriers[addr] = b; } if (b.waiting[core]) { if (b.awaken[core]) { b.waiting[core] = false; b.awaken[core] = false; //Console.WriteLine("Progress: " + core.ToString()); } } else { b.waiting[core] = true; b.count++; Console.WriteLine("Barrier: " + core.ToString() + ' ' + addr.ToString() + ' ' + b.count.ToString()); /* * string waiting = ""; * string awaken = ""; * * for (int i = 0; i < Config.N; i++){ * waiting += (b.waiting[i]).ToString() + " "; * awaken += (b.awaken[i]).ToString() + " "; * } * Console.WriteLine("Barrier.waiting " + waiting); * Console.WriteLine("Barrier.awaken " + awaken); */ if (b.count == from) { Console.WriteLine("Waking"); b.count = 0; b.waiting[core] = false; for (int i = 0; i < b.awaken.Length; i++) { b.awaken[i] = true; } b.awaken[core] = false; Simulator.CurrentBarrier++; } /* * waiting = ""; * awaken = ""; * for (int i = 0; i < Config.N; i++){ * waiting += (b.waiting[i]).ToString() + " "; * awaken += (b.awaken[i]).ToString() + " "; * } * Console.WriteLine("Barrier.waiting " + waiting); * Console.WriteLine("Barrier.awaken " + awaken); * Console.WriteLine("============="); */ } return(!b.waiting[core]); }