 Yr ydych chi'n gweithio i'r ysgol, a'i ddweud y cwestiynau. Ddw i'ch meddwl i'n meddwl i'r ddweud, mae'r ddweud ystod y dystod yn ei fod yn ystod, yn ddweud yn ystod, ond mae'n ddweud yn ystod. Yr ystod y dystod yn ei ffordd ymlaen, mae'n golygu i'n gwneud yw'n mynd i'r ystod yn ystod o'r gorau. Yn gyfaint, mae'n meddwl i'n meddwl i'n meddwl i'n meddwl can distinguish local variable extents on the stack so if GCC told us well if GCC could put some spaces in between local variables and lay them out with those spaces in the right order and then tell Valgrins somehow where those spaces are then we can paint them red when the thing you know when you enter the function it will be expensive but it will check up fine overruns on the stack so yeah that would be good. I don't know what the chances of that ever happening are but that would help. Well the chances are good I'm sure that if somebody wants to submit a pass to GCC and look forward to make the local variable variable and I don't think it's likely to check that there's been a reason to say it's just that I don't know how important it is for Valgrins versus yet another variable. I don't know how hard it would be to develop such a patch for GCC never having messed around with it but you could always send one. I know I know yeah. Yes there was an effort no I don't really think it went anywhere but also I don't really know. I think it was Jeff Dyke who was pushing this along and we got a lot of complaints about signal handling and Valgrins is broken and stuff because UML does all sorts of weird shit as far as I can see really pushing its luck. I don't think it worked out but I don't know either. I mean yes it would be great because then you could obviously do at least some kind of kernel checking us. I'm curious what changes you're going to make with the way that Valgrins is running. Well it depends how your MPI implementation works. If you're just doing kind of low performance MPI in which you transfer data by doing system calls read and write then there's no big deal because data comes in through read is painted as defined and then you're OK. The problem is if you have a high performance MPI implementation which shoots data directly into user space like the quadrics stuff or various others then as far as the algorithm is concerned suddenly that you're picking up this data which is uninitialized and it starts shouting all over the place. So what is in construction is a bunch of wrappers for the MPI API MPI read MPI write. And these effectively tell Valgrins how MPI read and MPI write modified memory so it can then paint memory accordingly. You can also do buffer checks on input so if you say MPI sorry MPI send this buffer and it's like contains garbage or is not addressable then it'll tell you at that point which I think is kind of nice. Yeah it takes a lot of pissing around with instruction sets. What are you thinking of OK what has to be done. You need to write an instruction decoder which takes your instructions turns them into this common in this immediate language. And that's often well that basically that's a big and difficult thing to do because instructions do all sorts of weird things and you have to simulate them quite exactly. How many operations. Well we have sort of primitive operations like as subtract multiply and then we have all the floating point stuff and then we have all the vector stuff. So it's actually quite a large intermediate language. It's sort of small in a way. The you have simple stuff for load stores reading writing simulated registers control flow stuff arbitrary expression trees. And then in the expression trees you have about 300 different kinds of operation that you can do. We have to have that money. Even for X86 you get a lot. It's an SSA based intermediate representation. If that means anything. So to hold it to a new architecture you probably have to write on the order of 25 to 30,000 new lines of code. And to make it work reliably on open office size programs then that is another interesting problem. Because you don't want your simulator to be slightly broken and 100 million instructions ago it did something wrong and now the program crashes. Well you can never find out what happened or why so you have to be quite careful. Yeah. You mean you want to see you want to stack trace which goes from C into Python and then sorry the C strax stack trace gives you a bunch of what calls. Right. In the running program. Well I can tell you that we don't have support for constructing Python frames in stack traces. But it's interesting that GDB can do it so maybe we could also find out how to do that. There's no support for that right now. It's just a standard stack trace. I don't know what you get some stuff that goes into the Python interpreter or what. Yeah pretty much it attempts to do that. At least it takes the top 40 frames or however many you ask for up to 100 stack frames. I mean it takes a stack snapshot every time you do malloc or free so it can't get quite expensive if you take these giant stack frames all the time. Especially if you're doing a lot of mallocs and free. Yeah for the most part it doesn't see library boundaries. It just the only boundary that is really of significance is the kernel boundary. And to some extent the malloc and free entries in glibc are treated specially. But you know one random library calls another random library doesn't see any difference. In 3.2 we have the ability to wrap any function with some other function that you supply. So suppose here is some function entry into the library which you're interested in. And you can write a wrapper which when you call there it actually runs the wrapper. Thus I'm checking the arguments calls the original comes back to the wrapper and then returns. So that's how the MPI wrappers are implemented. That's why we have that functionality to some extent. So you could do that would be some effort for this personally possible. If you have some special library you want to do special checks on. Sorry I can't hear you can you say that speak louder. Yeah. No not really. Not sure we really want to. Anyone who wants to leave now please leave.