> On Oct. 7, 2016, 2:15 p.m., Jason Lowe-Power wrote:
> > configs/ruby/Ruby.py, line 50
> > <http://reviews.gem5.org/r/3647/diff/1/?file=58365#file58365line50>
> >
> >     I think I'm missing something, but isn't the network directory and the 
> > topologies directory both in configs/? Why are these addToPath calls 
> > different?
> 
> Andreas Hansson wrote:
>     Excellent question. I think the topology line is acually both wrong and 
> unnecessary.
>     
>     I really must confess the current behaviuor of addToPath is a bit of a 
> mystery (what is it really relative to), and it turns out it is relative to 
> the run.py script in the test folder.
> 
> Jason Lowe-Power wrote:
>     Thanks for the info. I agree about addToPath :).
> 
> Tony Gutierrez wrote:
>     You're right, according to the comment near the definition of addToPath() 
> it seems things are relative to whichever run script you're using. 
> Unfortunately the relative path of configs is not the same for all run 
> scripts. E.g., using apu_se.py by hand still doesn't work, even with this 
> patch, and I have to manually add the paths back to apu_se.py for things to 
> work.
> 
> Andreas Hansson wrote:
>     Any suggestions for how to solve it?
>     
>     Can this patch go in as is? If not, what should I add to it?
> 
> Tony Gutierrez wrote:
>     I would suggest we make addToPath() behave more intuitively by having it 
> use the callers path, as opposed to whichever script initiated the python 
> interpreter - in our case the run scripts. This way the configs can truly use 
> paths relative to their own, which is not only more intuitive, but solves the 
> problem of the configs essentially needing to know the path relative to the 
> run scripts, which as previously pointed out may vary. The following worked 
> for apu_se.py paths:
>     
>     diff --git a/configs/ruby/Ruby.py b/configs/ruby/Ruby.py
>     --- a/configs/ruby/Ruby.py
>     +++ b/configs/ruby/Ruby.py
>     @@ -46,8 +46,8 @@
>      from m5.util import addToPath, fatal
>      
>      import MemConfig
>     -addToPath('../configs/topologies')
>     -addToPath('../configs/network')
>     +addToPath('../topologies')
>     +addToPath('../network')
>      
>      import Network
>      
>     diff --git a/src/python/m5/util/__init__.py 
> b/src/python/m5/util/__init__.py
>     --- a/src/python/m5/util/__init__.py
>     +++ b/src/python/m5/util/__init__.py
>     @@ -81,8 +81,10 @@
>      
>          # if it's a relative path and we know what directory the current
>          # python script is in, make the path relative to that directory.
>     -    if not os.path.isabs(path) and sys.path[0]:
>     -        path = os.path.join(sys.path[0], path)
>     +    frame = sys._current_frames().values()[0]
>     +    caller_path = os.path.dirname(frame.f_back.f_globals['__file__'])
>     +    if not os.path.isabs(path) and caller_path:
>     +        path = os.path.join(caller_path, path)
>          path = os.path.realpath(path)
>          # sys.path[0] should always refer to the current script's directory,
>          # so place the new dir right after that.
>     
>     Then you'd need to go for all callers of addToPath() to specify paths 
> relative to their own, and not run.py.
> 
> Tony Gutierrez wrote:
>     Sorry, the diff in the above got messed up somehow. Should be:
>     
>     diff --git a/configs/ruby/Ruby.py b/configs/ruby/Ruby.py
>     --- a/configs/ruby/Ruby.py
>     +++ b/configs/ruby/Ruby.py
>     @@ -46,8 +46,8 @@
>      from m5.util import addToPath, fatal
>      
>      import MemConfig
>     -addToPath('../configs/topologies')
>     -addToPath('../configs/network')
>     +addToPath('../topologies')
>     +addToPath('../network')
>      
>      import Network
>      
>     diff --git a/src/python/m5/util/__init__.py 
> b/src/python/m5/util/__init__.py
>     --- a/src/python/m5/util/__init__.py
>     +++ b/src/python/m5/util/__init__.py
>     @@ -81,8 +81,10 @@
>      
>          # if it's a relative path and we know what directory the current
>          # python script is in, make the path relative to that directory.
>     -    if not os.path.isabs(path) and sys.path[0]:
>     -        path = os.path.join(sys.path[0], path)
>     +    frame = sys._current_frames().values()[0]
>     +    caller_path = os.path.dirname(frame.f_back.f_globals['__file__'])
>     +    if not os.path.isabs(path) and caller_path:
>     +        path = os.path.join(caller_path, path)
>          path = os.path.realpath(path)
>          # sys.path[0] should always refer to the current script's directory,
>          # so place the new dir right after that.

This is beyond my Python knowledge. I gave it a quick stab and I cannot work 
out what the right "addPath" would be for e.g. the learning-gem5 regressions 
that then call another script.

I am happy to push the patch in its current form (as it solves all the 
regression issues), but I don't know how to best address the bigger issue.


- Andreas


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
http://reviews.gem5.org/r/3647/#review8780
-----------------------------------------------------------


On Oct. 7, 2016, 5:29 p.m., Andreas Hansson wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> http://reviews.gem5.org/r/3647/
> -----------------------------------------------------------
> 
> (Updated Oct. 7, 2016, 5:29 p.m.)
> 
> 
> Review request for Default.
> 
> 
> Repository: gem5
> 
> 
> Description
> -------
> 
> Changeset 11668:8816ebf0a103
> ---------------------------
> ruby: Fix broken regressions
> 
> This patch moves the addition of network options into the Ruby module
> to avoid the regressions all having to add it explicitly. The example
> scripts are also updated, and the messy path-deducing variations in
> the scripts are unified.
> 
> 
> Diffs
> -----
> 
>   tests/configs/gpu-randomtest-ruby.py ebf2acd02fc5 
>   tests/configs/gpu-ruby.py ebf2acd02fc5 
>   tests/configs/memtest-ruby.py ebf2acd02fc5 
>   tests/configs/o3-timing-mp-ruby.py ebf2acd02fc5 
>   tests/configs/o3-timing-ruby.py ebf2acd02fc5 
>   tests/configs/pc-simple-timing-ruby.py ebf2acd02fc5 
>   tests/configs/rubytest-ruby.py ebf2acd02fc5 
>   tests/configs/simple-atomic-mp-ruby.py ebf2acd02fc5 
>   tests/configs/simple-timing-mp-ruby.py ebf2acd02fc5 
>   tests/configs/simple-timing-ruby.py ebf2acd02fc5 
>   configs/example/apu_se.py ebf2acd02fc5 
>   configs/example/fs.py ebf2acd02fc5 
>   configs/example/garnet_synth_traffic.py ebf2acd02fc5 
>   configs/example/ruby_direct_test.py ebf2acd02fc5 
>   configs/example/ruby_gpu_random_test.py ebf2acd02fc5 
>   configs/example/ruby_mem_test.py ebf2acd02fc5 
>   configs/example/ruby_random_test.py ebf2acd02fc5 
>   configs/example/se.py ebf2acd02fc5 
>   configs/ruby/Ruby.py ebf2acd02fc5 
> 
> Diff: http://reviews.gem5.org/r/3647/diff/
> 
> 
> Testing
> -------
> 
> 
> Thanks,
> 
> Andreas Hansson
> 
>

_______________________________________________
gem5-dev mailing list
gem5-dev@gem5.org
http://m5sim.org/mailman/listinfo/gem5-dev

Reply via email to