Hi Andreas, I agree with this sentiment overall as I think our collection of regressions currently are pretty ad-hoc; they are basically just the benchmarks that people want to ensure run for their in gem5, i.e, SPEC etc. I think smaller LLVM unit tests would provide more directed testing, similar or better coverage, less maintenance, and a suitable license.
Just to clarify when you say 'LLVM-specific' tests, are you referring to the unit/regression tests: http://llvm.org/docs/TestingGuide.html#regression-tests ? We are also thinking of using similar HCC tests (AMD's LLVM-based compiler for heterogeneous accelerators): https://github.com/RadeonOpenCompute/hcc/tree/clang_tot_upgrade/tests/Unit for our GPU model in gem5. For testing, I'm assuming we're going to want something like Jenkins going forward. The question is where will such a server live, and will it be accessible to the public? -Tony -----Original Message----- From: gem5-dev [mailto:gem5-dev-boun...@gem5.org] On Behalf Of Andreas Hansson Sent: Monday, November 14, 2016 2:40 PM To: gem5 Developer List <gem5-dev@gem5.org>; Jason Lowe-Power <ja...@lowepower.com> Subject: Re: [gem5-dev] Status of RISC-V patches Hi all, Merely a thought when it comes to adding tests: I would suggest we ditch all proprietary/closed-source tests and move in the direction of something that is open and maintained. My proposal would be to adopt a few of the tests from the llvm test suite. There are both very short LLVM-specific tests that are BSD licensed, and a bunch of smaller “apps” that maintain their original license. It would be great if we could identify a few relevant tests from the tests suite and start going in that direction. The source for the tests along with build scripts etc should probably be in a repo on their own. What do you think? Andreas On 28/10/2016, 22:12, "gem5-dev on behalf of Alec Roelke" <gem5-dev-boun...@gem5.org on behalf of ar...@virginia.edu> wrote: >I think I get it. Thanks for your help! > >It looks like I won't be able to make use of any tests other than >00.hello, because either they're multithreaded or pieces of them are >missing. I'm going to try to put my instruction tests into >02.insttest. > >On Fri, Oct 28, 2016 at 11:01 AM, Jason Lowe-Power ><ja...@lowepower.com> >wrote: > >> Hi Alec, >> >> Our regression testing infrastructure is confusing, to say the least. >> Honestly, it would take me at least a few hours to figure out how to >>add new regressions again. But here's a little information that >>hopefully will help you save some time. >> >> You need to put reference outputs in tests/quick/se/<TEST >> NAME>/ref/riscv/linux/<CONFIG FILE NAME>. >> >> The config files are in tests/configs. One of these files (without >>the >> .py) is what goes in <CONFIG FILE NAME> above. The <TEST NAME> can be >>anything. Using some of the same tests that are there make sense, but >>you may want to add other RISC-V specific tests as well. >> >> You *may* be able to use the config files in tests/configs without >>changes, but maybe not. I'm not sure. You'll probably be able to use >>some but not others. >> >> Getting scons to run your regressions is totally black magic to me. >>Here's >> a couple of things I've learned, though. >> 1) You should delete the build directory (e.g., build/RISCV/tests/ >> debug/quick/se/00.hello/riscv/) every time you want to re-run the >>regression. >> 2) The regression won't even try to run if you don't have dummy files >>in tests/quick/se/<TEST NAME>/ref/riscv/linux/<CONFIG FILE NAME>. >> >> For the missing stats/changed stats, since this is first time you're >>running the RISC-V stats, I would totally ignore all of that >>information. I would just look at the output (simout/simerr) and make >>sure it seems reasonable (e.g., no errors). If you have an idea of a >>stat that you expect to see (e.g., floating point ops > 0) then you >>could look at the stats file too to make sure it's what you expect. >> >> There's no specific configuration you should be using. For the most >>part, all of the tests are just functional tests. The configurations >>for the system are specified in the tests/configs (<CONFIG FILE >>NAME>) Python files. >> >> Hopefully this will help you get started. Let us know if you have >> more questions. Maybe someone with more regression tester experience >> will be able to help more. >> >> Jason >> >> On Thu, Oct 27, 2016 at 8:23 PM Alec Roelke <ar...@virginia.edu> wrote: >> >>> I'll start with converting as many from "quick" as I can. If/when I >>>end up creating my own, is there a convention for what they should >>>be named and where they should go? >>> >>> Also, I'm having a bit of a problem with just 00.hello. I compiled >>>the source in tests/test-progs/hello/src into >>>tests/test-progs/hello/bin/riscv/linux >>> (for some reason mine disappeared), and then created >>>tests/quick/se/00.hello/ref/riscv/linux/simple-atomic. Then I >>>compiled and ran build/RISCV/gem5.fast, configuring for the atomic >>>CPU and redirecting the output stats, configuration, stdout, and >>>stderr into that directory. But when I run >>>build/RISCV/tests/debug/quick/ >>>se/00.hello/riscv/linux/simple-atomic, it claims that it couldn't >>>find several stats and that it found several other unexpected ones >>>in stats.txt (and completely ignored the other files). Is there >>>some other configuration I should be using to generate the output >>>for the regression? >>> Actually, better yet, is there a way for me to figure out what the >>>configuration I should be using is, since I imagine I'll run into >>>this problem for the other CPU models? >>> >>> On Thu, Oct 27, 2016 at 6:38 PM, Jason Lowe-Power >>> <ja...@lowepower.com> >>> wrote: >>> >>> Hi Alec, >>> >>> Thanks for taking the time for writing tests. It's something that we >>>as a community need to get better at. >>> >>> To respond to your questions: >>> - It is completely acceptable for you to include RISC-V only tests. >>>In fact, I think it's a necessity. >>> - Focusing just on the "quick" regressions makes sense to me. If you >>>have one or two longer benchmarks, that would be good, but not >>>required. If you could stay away from SPEC it would be better. I >>>believe that we can't distribute the binaries, which makes it a pain >>>for others to run the regression test. >>> - Covering corner cases would be amazing, but again, not required. >>>If you look at gem5's current regression suite, you'll find that we >>>currently don't have anything like that. So, if it doesn't take you >>>too much time, this would be a good addition, but just getting >>>coverage of all instructions would be a step up from all the other >>>ISAs. >>> - For m5threads, no need to implement it for RISC-V. Although, it >>>looks like you only need to implement 3 functions, so I don't think >>>it would be too hard. But that's a project for another day :). >>> >>> Again, I want to stress that we can't expect you to spend lots of >>>time writing great regressions. It would be very hypocritical :). >>>Anything is acceptable. Of course, better regressions mean that >>>RISC-V will be more usable and more stable. >>> >>> Cheers, >>> Jason >>> >>> On Thu, Oct 27, 2016 at 5:29 PM Alec Roelke <ar...@virginia.edu> wrote: >>> >>> I'll certainly add regressions for "hello" for each of the four >>>models, and I'll try to get other "quick" tests done the same way, >>>too. I won't be able to do all of them as m5threads hasn't been >>>implemented for RISC-V, but I'll do what I can. I can also do the >>>"long" ones the same way, if time isn't a concern (I noticed some >>>were from SPEC, which could take a long time to complete). >>> >>> Because m5threads hasn't been implemented for RISC-V, and my patches >>>only support SE mode, I can't actually test if the atomic >>>instructions work properly when used concurrently, but I can at >>>least test that they perform the read-modify-write operations >>>properly. Is it okay if I add a few regressions that only work for >>>RISC-V since they'd use assembly calls? >>> For >>> that matter, should I be making sure that the existing regressions >>>cover corner cases in instructions, or is it sufficient to see that >>>each instruction is represented at least once by them? I could >>>write some tests that check corner cases, but at least some would >>>use assembly calls and thus be incompatible with anything other than >>>RISC-V. >>> >>> On Thu, Oct 27, 2016 at 5:55 PM, Jason Lowe-Power >>> <ja...@lowepower.com> >>> wrote: >>> >>> Hi Alec, >>> >>> Thanks again for implementing RISC-V in gem5. It's an incredibly >>> important and timely addition! >>> >>> As far as I can tell, the patches look good. Hopefully some other >>> will review them soon as well. >>> >>> The only thing that's missing that I would really like to have >>>before pushing the patches is some regression tests for RISC-V. If >>>you could look at http://gem5.org/Regression_Tests and have a go at >>>adding some regressions, it would be helpful. It would be *great* if >>>you could make sure the regressions cover most of what you've >>>implemented (e.g., multiply/atomic/etc. instructions, Linux >>>syscalls, etc.). If that isn't possible, at least having a "hello" >>>regression for a couple of different CPU models is needed. >>> >>> Thanks again for your contribution! >>> >>> Jason >>> >>> >>> >>> >_______________________________________________ >gem5-dev mailing list >gem5-dev@gem5.org >http://m5sim.org/mailman/listinfo/gem5-dev IMPORTANT NOTICE: The contents of this email and any attachments are confidential and may also be privileged. If you are not the intended recipient, please notify the sender immediately and do not disclose the contents to any other person, use it for any purpose, or store or copy the information in any medium. Thank you. _______________________________________________ gem5-dev mailing list gem5-dev@gem5.org http://m5sim.org/mailman/listinfo/gem5-dev _______________________________________________ gem5-dev mailing list gem5-dev@gem5.org http://m5sim.org/mailman/listinfo/gem5-dev