> On 2011-07-11 11:38:24, Brad Beckmann wrote:
> > Is it necessary for the fault model to be configured using a text file?  
> > Can you do this in python instead?  For instance, if you used scripts to 
> > generate the files, it would be best if you implemented those scripts in 
> > python and used the standard sim_object methodology.  Also is the one text 
> > file just a "temp" file?  If so, should it be checked it?
> 
> Konstantinos Aisopos wrote:
>     These 2 text files are a small database generated by my infrastructure 
> (PrimeTime+SPICE), and is used to calculate the fault vector based on the 
> routers' configuration and the current environmental conditions. 
> Specifically, DB.conf.txt stores the fault vectors for a number of baseline 
> configurations, while DB.temp.txt stores weights applied to vectors (these 
> weights reflect how much higher the fault probabilities will be) while 
> temperatures increase.  
>     
>     Thus, these two files are a part of the fault model's "code" and not a 
> user input. The fault model's user is not supposed to ever change these 
> files, that's why I do not consider a good idea to put them together with 
> gem5 inputs. In practice, I (or whoever maintains this tool in the future) 
> should only edit these files. For instance, if in the future I want to 
> incorporate additional technologies (eg 32nm) or additional router 
> configurations in the fault model, I can do so by using my infrastructure to 
> generate 2 updated DB files and provide you another gem5 patch. 
>     
>     The actual input to my fault model is the network configuration (routers' 
> input/output ports, buffers, VCs, etc) which is read  directly from Garnet. 
> Currently, the only actual input that the user can control  is the 
> enable/disable flag (i.e., enable_fault_model in 
> src/mem/ruby/network/garnet/BaseGarnetNetwork.py)
>     
>     Let me know if you think my argument makes sense, or you still think the 
> database files should be a python input.
> 
> Brad Beckmann wrote:
>     Thanks for the explanation.  If the text files are generated by 
> PrimeTime+SPICE, then I agree, it doesn't make a lot of sense to integrate 
> the text file data directly into a python script.  However, I would suggest 
> moving the text file parsing out of C++ and into Python.  As I'm sure you 
> know, Python is much cleaner than C++ when comes to parsing text.
>     
>     Also I would suggest renaming the text files to more meaningful names.  
> For instance: baseline.fault-vectors.txt and baseline.temp-weights.txt.
>     
>     Finally, instead of including a README file in the directory, you should 
> put that information on the wiki.
> 
> Konstantinos Aisopos wrote:
>     OK.
>     Regarding "moving the text file parsing out of C++ and into Python": I am 
> not very familiar with Python, but if you consider this critical I could read 
> on Python a little bit. However, assuming the file is parsed in python, how 
> do I then make C++ read the parsed objects? Any pointers to gem5 code where 
> something similar is done?
> 
> Brad Beckmann wrote:
>     There are many examples where arrays created in python are then 
> translated into C++.  One such example is the Process envirnoment array (see 
> sim/process.*, sim/Process.py).
>     
>     I know it may seem like I'm being a "stickler" here, but please 
> understand that gem5's Python-based configuration process is a key component 
> of the infrastructure.  We want all configuration to go through that process 
> and not have a situation where certain components bypass the process and do 
> configuration a different way.
> 
> Konstantinos Aisopos wrote:
>     Tushar helped me out to create a python class in a new file 
> (FaultModel.py) and showed me how to interface it with C++. Btw, I think it 
> would be nice if you would  document this procedure into your wiki (it's hard 
> for someone who hasn't used gem5 before to figure out what's going on)
>     
>     But then, I looked into the files you pointed out and could not find a 
> case where an array (with data; not an empty one) is read from a file into 
> python. I decided that it might just be simpler to add my fault model's 
> database (a huge array of floats) directly into FaultModel.py (instead of 
> keeping it in a txt file), but the functionality to declare a vector with 
> data does not seem to be there in gem5, unless I used the wrong syntax (did 
> I?):
>     
>     ----------FaultModel.py---------------
>     from m5.params import *
>     from m5.SimObject import SimObject
>     
>     class FaultModel(SimObject):
>         type = 'FaultModel'
>         cxx_class = 'FaultModel'
>         test = VectorParam.Int([1, 2, 3], "");       <---- this line (a test 
> vector with 3 elements) results in a seg fault
>     ----------/FaultModel.py---------------
>     
>     this compiles fine but, at runtime, I get a seg fault because of "test":
>     
>     Traceback (most recent call last):
>       File "<string>", line 1, in <module>
>       File "/data/lsp/kaisopos/GEM5_Fault_Model/gem5/src/python/m5/main.py", 
> line 356, in main
>         exec filecode in scope
>       File "configs/example/ruby_network_test.py", line 131, in <module>
>         m5.instantiate()
>       File 
> "/data/lsp/kaisopos/GEM5_Fault_Model/gem5/src/python/m5/simulate.py", line 
> 78, in instantiate
>         for obj in root.descendants(): obj.createCCObject()
>       File 
> "/data/lsp/kaisopos/GEM5_Fault_Model/gem5/src/python/m5/SimObject.py", line 
> 881, in createCCObject
>         self.getCCParams()
>       File 
> "/data/lsp/kaisopos/GEM5_Fault_Model/gem5/src/python/m5/SimObject.py", line 
> 836, in getCCParams
>         value = value.getValue()
>       File 
> "/data/lsp/kaisopos/GEM5_Fault_Model/gem5/src/python/m5/SimObject.py", line 
> 885, in getValue
>         return self.getCCObject()
>       File 
> "/data/lsp/kaisopos/GEM5_Fault_Model/gem5/src/python/m5/SimObject.py", line 
> 866, in getCCObject
>         params = self.getCCParams()
>       File 
> "/data/lsp/kaisopos/GEM5_Fault_Model/gem5/src/python/m5/SimObject.py", line 
> 840, in getCCParams
>         assert not len(vec)
>     TypeError: object of type 'PySwigObject' has no len()
>     Segmentation fault
>     
>     any suggestions?
> 
> Nilay Vaish wrote:
>     The following script has VectorParams which are non-empty to begin with.
>     
>     src/mem/ruby/network/garnet/fixed-pipeline/GarnetLink_d.py

Now that I have thought more about your problem, I think the initialization
is not creating Int objects as expected. [1,2,3] may not be a list of Int 
objects.


- Nilay


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
http://reviews.m5sim.org/r/776/#review1408
-----------------------------------------------------------


On 2011-07-08 17:46:10, Konstantinos Aisopos wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> http://reviews.m5sim.org/r/776/
> -----------------------------------------------------------
> 
> (Updated 2011-07-08 17:46:10)
> 
> 
> Review request for Default, Ali Saidi, Gabe Black, Steve Reinhardt, Nathan 
> Binkert, Brad Beckmann, and Tushar Krishna.
> 
> 
> Summary
> -------
> 
> GARNET: adding a fault model for resilient on-chip network research.
> 
> This patch adds a fault model, which provides the probability for a number of
> architectural faults in the interconnection network (e.g., data corruption,
> misrouting). These probabilities can be used to realistically inject faults
> in GARNET and faithfully evaluate the effectiveness of novel resilient NoC
> architectures.
> 
> 
> Diffs
> -----
> 
>   src/mem/ruby/network/fault_model/DB.conf.txt PRE-CREATION 
>   src/mem/ruby/network/fault_model/DB.temp.txt PRE-CREATION 
>   src/mem/ruby/network/fault_model/FaultModel.hh PRE-CREATION 
>   src/mem/ruby/network/fault_model/FaultModel.cc PRE-CREATION 
>   src/mem/ruby/network/fault_model/README PRE-CREATION 
>   src/mem/ruby/network/fault_model/SConscript PRE-CREATION 
>   src/mem/ruby/network/garnet/BaseGarnetNetwork.hh 7907b19fbe80 
>   src/mem/ruby/network/garnet/BaseGarnetNetwork.cc 7907b19fbe80 
>   src/mem/ruby/network/garnet/BaseGarnetNetwork.py 7907b19fbe80 
>   src/mem/ruby/network/garnet/fixed-pipeline/GarnetNetwork_d.cc 7907b19fbe80 
>   src/mem/ruby/network/garnet/fixed-pipeline/Router_d.hh 7907b19fbe80 
>   src/mem/ruby/network/garnet/fixed-pipeline/Router_d.cc 7907b19fbe80 
> 
> Diff: http://reviews.m5sim.org/r/776/diff
> 
> 
> Testing
> -------
> 
> 
> Thanks,
> 
> Konstantinos
> 
>

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

Reply via email to