On Tue, 23 Jun 2015, Beckmann, Brad wrote:

 Nilay,

 Please be more professional when responding to questions.  If you have a
 particular idea on how to fix the problem, we would appreciate if you
 described it rather than leaving us a trail of breadcrumbs.

First, this is the second time you have used the word "professional" in past month or so. I don't know what it means to be a professional. You should enlighten me.

Over years, I have developed a sense of what is right and what is wrong and how I should behave. It is my personal preference that people learn things rather than things be told to them. I feel good whenever I learn something or I am able to make others learn. I think, but I am not sure, the method I use to impart my knowledge to others is what is known as the Socratic way of learning / teaching. You may not like it, but I find it good enough.


 Please note that your patch, 10311, is the one that breaks the tenet that
 ClockedObjects, which include ports, are MemObjects.  It is unfortunate that
 our regression tester does not test config.ini loading with ruby and did not
 realize that the SimpleNetwork is different than all other ClockedObjects.
 However, I do not believe revision 10458 is at fault here.  Rather it is
 SimpleNetwork's unconventional use of ports.

I am guessing patches time travel in your world. Revision 10458 added the ability to load config file in C++. Surely 10311 was committed before it. How can 10311 break something that did not exist when it was committed?

I don't know about the tenet. Reading the code it seems, MemObject ==> Clocked Object + Ports. What you are suggesting is Clocked Object + Ports ==> MemObject. Those two statements are not equivalent.

I agree that Ruby uses ports in an unconventional fashion. But that's because Ruby uses MessageBuffers and not ports in C++. Ports are only used in the python code. Had Ruby been using ports in C++ as well, I think it would have used them in the same fashion as the classic memory system.


 We appreciate your help on this matter.  Important work is currently blocked
 on this bug.


I am surprised people at AMD failed to realize the functions I pointed to in the previous mail are essentially doing the same thing. If you add the following code from the pyobject.cc to the beginning of cxx_manager.cc:bindPort(), I feel things should work for you. Ofcourse, I have not tested anything.


    // These could be objects from the ruby memory system.  If yes, then at
    // least one of them should be an abstract controller.  Do a type check.
     AbstractController *ac1, *ac2;
     ac1 = dynamic_cast<AbstractController*>(o1);
     ac2 = dynamic_cast<AbstractController*>(o2);

     if ((ac1 || ac2) && name1 != "memory" && name2 != "memory") {
         MessageBuffer *b = new MessageBuffer();

         // set the message buffer associated with the provided names
         if (ac1) {
             ac1->setNetQueue(name1, b);
         }
         if (ac2) {
             ac2->setNetQueue(name2, b);
         }

         return;
     }


--
Nilay
_______________________________________________
gem5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/gem5-dev

Reply via email to