Example #1
0
File: Sync.cs Project: hirous/test
        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];
        }
Example #2
0
        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]);
        }