Hi Gabe, Thanks for your reply. For the vector register file, I agree it is probably a better idea to stick with current approach, at least it does not require changing the SSE instructions. I cound not find your plan to redesign the register handling mechanism. If you could provide a link I would be interested to take a look to have better understanding of the philosophy behind the design.
Let's hear from AMD first as they have more insights about the microop. If everything turns out well, I can start to refactor the code into smaller commits and add tests for that. *王 钲 荣* Zhengrong Wang Computer Science Department University of California, Los Angeles California, USA 90024 Work Email: [email protected] Mobile :+1 310-447-4568 Gabe Black via gem5-dev <[email protected]> 于2020年5月31日周日 下午7:44写道: > Hi Sean. I'm not aware of anyone working on AVX-512, but it would be nice > if the AMD folks could chime in and confirm that. The x86 microcode was > originally based off of the microcode for the K6 as described in a patent. > The floating point parts of that patent were very vague and hand wavy, so I > more or less made up the initial part. It would be nice for the AMD folks > to chime in here too, as far as what's realistic for the design of the > microops. > > As far as testing, we don't have a great scheme for testing individual > instructions right now, but that would be really valuable to have in the > long run. I've thought a bit about how that might work, but I don't have a > plan at the moment. The best thing to do right now is to probably to have > small programs that execute the instructions in question and print their > inputs/outputs and/or check that the outputs are correct. I think our > testing framework has a way to check that program output matches a golden > reference, and that could be used to delegate correctness checking to the > framework. Bobby can probably give more details here. > > As far as the registers, my preference for now is to do what you did and > treat each 64 bit chunk as its own register. There are real drawbacks to > this approach, but the existing solution to them, a vector register file, > has other, in my opinion more serious, drawbacks. A while ago I put > together a manifesto about how I'd want to redo the whole register handling > mechanism in gem5, but unfortunately I haven't had time to actually > implement very much of it. By treating larger registers as groups of > smaller registers, you'd be consistent with the rest of the x86 code as it > stands right now. That, and the fact that I think that's the lesser of two > evils, makes that my preferred way to go. > > As far as submitting code, there are instructions on the gem5 website for > creating and submitting reviews. We use gerrit, and so in addition to the > instructions we provide, you should be able to find pretty good/complete > instructions out on the internet to explain the mechanism of sending out a > review. For this or any other change, you'd want to break up your work into > logical chunks where everything works before and after any given change, > and then send them out (perhaps all together in a series) for review. > Exactly how to break things up is up to you, but my opinion is that each > change should be logically complete but also about one thing. That makes it > easier for a reviewer to wrap their head around what you're doing and how > it works without having to untangle multiple things going on at once, or > having to merge multiple reviews together in their head to see the whole > change their reviewing. If there are lots of related small changes (many > individual instructions for instance) it might make sense to do one or two > by themselves first, and then once the kinks are worked out to do a larger > change with the rest, applying the pattern from the earlier reviews. > > Gabe > > On Sun, May 31, 2020 at 4:18 PM Sean Wong via gem5-dev <[email protected]> > wrote: > > > Hello, > > > > This is my first time posting here, so apologies if I made any mistakes. > > > > The last time I checked the develop branch, gem5 has not yet supported > the > > AVX512. And searching the mail list I do not see any plan for that. Is > > there any ongoing development to support that? If not, I am happy to > > contribute my code. During my research, I have developed partial support > > for AVX512 (and AVX-256 as a by-product), which I hope would be useful > for > > others. > > > > My implementation so far is a straightforward extension to the existing > SSE > > instructions. To summarize it: > > > > - Like SSE implementation, the 512-bit register is broken into 8 64-bit > > sub-register. This may not be a good design. Any suggestions are welcome. > > - Unlike SSE implementation, most of the instructions are broken into a > > single microop. For example, a 512-bit 'vaddps' is decoded into one > 'vaddf' > > microop instead of eight. > > - Currently, it supports common arithmetic instructions (add, mul, etc.) > > and basic data movement (load, store, mov, extract, insert, etc.). > > - No support for masking. > > > > If you guys are interested, I am willing to clean my code and submit for > > review. I may need some guidance on: > > > > - Design of the vector register file. My implementation directly follows > > the SSE instructions to minimize the work. Is there any better way to do > > this? > > - If I am going to merge my code, what is a good submission plan? I am > > thinking about first committing the skeleton code with a simple 'vaddps' > > instruction, and then for other instructions. > > - Testing: This is probably the most important one. Currently, I manually > > test my code by simulating small programs. What is the best way to write > > tests for new instructions? Should I try unit testing for binary testing? > > > > Thank you for reading this long post. Any feedback is welcome. > > > > *王 钲 荣* > > > > Zhengrong Wang > > Computer Science Department > > University of California, Los Angeles > > California, USA > > 90024 > > > > Work Email: [email protected] > > Mobile :+1 310-447-4568 <(310)%20447-4568> > > _______________________________________________ > > gem5-dev mailing list -- [email protected] > > To unsubscribe send an email to [email protected] > > %(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s > _______________________________________________ > gem5-dev mailing list -- [email protected] > To unsubscribe send an email to [email protected] > %(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s _______________________________________________ gem5-dev mailing list -- [email protected] To unsubscribe send an email to [email protected] %(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s
