Hello! welcome to the armboff. Hector i'n mynd yn ffosgol. Konstantinos sould have been here but he's in the middle of a panicked house move at the moment. So couldn't make it this week. So we can say all kinds of silly things about him and he can't talk back. Obviously we're all deb甋 yn disputing and we are lucky enough to be employed by people who are happy a gynnwys i'n ffordd i gael'r gweithio o'r cwmhyslunio a'r hwysbeth a'r gweithio'r gwaith o'u ffwrdd i'n dweud iawn i gyd yn yn ymddangos. Felly, gweithio'r gwybodaeth, mae'n ddweud, gallwn i'n meddwl, mae'n gweithio'r lechau, mae'n gweithio'r gwybod i'r ffordd i gael. Ond dweud gweithio'r gwybodaeth o'r ffordd iawn, rwy'n gweithio'r gweithio'r gweithio'r gweithio, bydd yn ei wneud yn hyfrifio allan lleol y ddweud arall i'r llwyddiad? A yna'n mynd i'n ddweud i'r ddweud arall. Felly mae'r ffordd yn ddweud cymaint o'r bwysig yng Nghymru y peth yn ychydig yn y Debion. Felly mae'r ffordd yn gweithio, a'r bwysig yn ddiol. Mae'r bwysig yn y Lennie. Felly, mae'r Lennie yn gweithio gyda'r ffordd, mae'n ddweud i'n meddwl o'r arddangosol.  It's, there's not much we can do about that. We can't support everything at all end of the scale. There was the ARM EB which never hit Debian, although there are some weird people out there still using it I'm told. We have the current ARMEL port which in Debian supports ARM V4T onwards, ac yn y bun 2 yw'r argynwys ar y V7. Felly, ydych yn y gweithio, dwi'n dweud bod yna'r F4T ac Y V7 ac ddweud hynny? Dwi'n ddweud hynny? Dwi'n ddweud, mae'r architechu arall wedi bod yn ddwy'r ffordd ffordd ffordd. Felly mae'r angen yn ychydig o'r cyflawn, maen nhw'n ddweud hynny'n ddweud hynny. F4 hynny'n ddweud hynny ynddw'r ffordd. F4T er digwydd yn llaw y F4, dwi'n ddull hwnnw, fel y cyflawn ddweud ac yw. Mae'n ddweud i'r F5, F6, F7. F7 mae'r architechu arall wedi y poro ar y ffordd. Mae'r amllun hefyd fel tegrau, mae'r amser ffordd ar y ffordd. Felly mae'r amser arall dweud .. ydych chi'n gweithio yn y cyfnod cyfnod o'r cyfnod yw'r cyfrannu'r ffordd? Yn ddiddordeb. Yn ddiddordeb. Yn ddiddordeb. Yn ddiddordeb, fel y lliff eich eich ymdweud yma, yw MHF. Yn y ddiddordeb newydd, mae'r ddiddordeb busr. Yn y ffordd ar argynno MHF a MHF, mae'r ddiddordeb eich gweithio oes. Dwi'n ddiddordeb eich gweithio, ond RML will happily run on V7, on HF. We're targeting V7 and up only. It could technically run on earlier hardware, but it's not worth doing. I'll come to that in a moment. The big difference is in terms of floating point hardware. From V7 onwards on ARM, you can rely on having hardware floating point support. Previously you couldn't. However, the RML ABI is designed around coping without hardware floating point. To do that, you end up passing all of your floating point arguments into functions using the integer registers of your CPU. Now that means a lot of good things if you don't have guaranteed hardware floating point. It means that you don't break. But it does mean that when you do have hardware floating point support, you end up taking the cost of copying arguments into and out of your integer registers on every single function call. That's really, really slow if you're calling into short functions that do two or three operations and then return. You can end up being swamped by the cost just of this overhead. On HF, we are targeting V7 in both Debian and Ubuntu. In fact, here you go, there's more details here. Now you can use the same kernel for both RML and RMHF. The kernel is ABI agnostic, basically because the kernel does not do floating point itself. You don't need to worry, therefore, about how you pass floating point arguments. Obvious, but it needs stating. So what we can do is run an RML kernel and we're doing this on some of our machines and you can happily have a chyrwt for now with RMHF. Once we have multiarch up and running, then you will be able to have RML, RMHF running multiarch. There are some wrinkles around that in that, of course, the two are not binary compatible. You cannot run and share any libraries or processes in the same address space. They must all be consistent one way or the other, otherwise things explode in interesting ways. So Constantinos started the RMHF bring up just about 12 months ago. We were talking about it last year in New York. He's supported by the company he works for, Genesi. They've given out loads and loads of their EFICA, MX notebooks and little net top machines to lots of people all over the world who are helping to just generally port more stuff to ARM and in particular RMHF. He's been through and has bootstrapped RMHF in the Debian Ports Archive. The vast majority of the normal archive builds. The fun bits happen to me. It's just like when you're bootstrapping any new port in Debian is when you want to start building from the ground up. The awkward things that don't depend on C at the bottom. So obviously self-hosted languages, Java, Haskell, C-Lisp, there are probably others but those are the three we keep on talking about. Each of those needs involved bring up typically with experts. Some of them have really good instructions, some of them it avoids you of discovery. This is a Genesi laptop or netbook that Konstantinos is doing the ARMHF work for. Genesi have that. It's running ARMHF Debian right now. It's pretty cool. So if you want to see it, he has it around. Yeah, that's an IMX51, which is a free scale CPU. Genesi are just moving over to the IMX53 which is faster, has more features and is generally good. But it's really good obviously. They have a vested interest in making ARMHF work because they get much better performance on that hardware. Lots of other folks are seeing the light two to the extent that we're expecting most of the system on chip vendors to be providing drivers and support for ARMHF real soon now. Discussion on IRC and on mailing lists suggests that almost everybody will be giving us even much as we may not care about it in Debian, things like the hardware, 3D drivers, that kind of thing, even the binary blobs, of course they need to be built compatibly with the rest of your system. So we're expecting ARMHF versions of those too. I was wondering why the drivers need to support ARMHF, but if they're binary blobs then yes, I understand. We are working together, there was a group of us, me, Hector, Konstantinos, a couple of other folks. We're looking at inclusion into the main Debian archive for ARMHF real soon now. We're evaluating, we have a wiki page on the Lenovo site. On the Debian site. wiki.debian.org, ARM, hard float, and then there's buildeev, and they search for ARM hard float on the wiki. There's a number of pages though, that's where Konstantinos has been tracking his status, showing what was working, what bugs have been posted. I said we're evaluating about half a dozen different boards and we're just working out what the best options are and we're hoping to get official Debian buildees up and running within, well, by the end of August. We know that most of the archive already builds, but of course we need a reboot strap inside the main archive from what we have. That's the plan. Now, that is most of what I'm going to say about ARMHF. Do we have any questions, points, comments? Lots, go. The original ARM port was hard float. Yes. Which was a pain in the whatever for nearly everybody, except for the one person in the world that had a floating point variant of a strong arm or something. Exactly, yes. And the process there was that you used your hardware floating point process and then were rescued by the kernel with the pretend one at huge cost. Is that likely to be the same, so that you can run, so that if you haven't got a floating point unit, even on ARMHF on... No, nobody is thinking in those terms. The reason that we're targeting V7 onwards with ARMHF is that you can rely on hardware floating point. You could bootstrap it yourself if you want on older hardware, but to be honest, there really is no game to be made. The point is, as Nick says, the original ARM ABI as far as we're concerned in Debian did expect hardware floating point, despite the fact about half a percent of all the boards ever shipped had it. So then the kernel would trap an illegal instruction error, take the exception, would deal with it, with the kernel-based floating point emulator, and then switch back, which then gave you a cost of about 100 times slower than it needed to be. That was why we switched to the Army L, the new EABI, which then assumed that you didn't have hardware floating point. If you did need to do floating point operations, you could then do them in user land without that incredibly costly trap in kernel. Would it be possible to mix ARML and ARMHF? I mean, GCC has this calling convention. When compiling with GCC can specify calling convention to be used, like in the x86 world, you can say STD calling, things like that, would it be possible to do something similar with ARML and ARMHF? Absolutely. One GCC, you can use exactly the same compiler binary to output either ABI, but that's only a small part of the solution, I guess, a small part of the problem. So far, what we have, we've been doing a lot of cross compiling on a lot of native compiling. We deliberately target explicitly. We default to one or the other, so we have two toolchains. You can do it in one go. Absolutely.  I guess ARMHF might make sense if you're on an ARM11, because I think most ARM11 implementations do have floating point hardware. Exactly. We thought about it, but there is no guarantee that all ARMv6s will have floating point. That's why we picked v7. To be honest, also, some of this work is sponsored by ARM and Linaro, who of course are trying to sell admittedly. The latest versions, the newest shiny ARM processor, so of course we're going to target the latest, but there are lots of real devices out there using v7 processors now. That's what we're targeting. It's on. Presumably, if you statically link, just like you could have soft load under ARM, you can use old ARMEL stuff. Absolutely. The old ARMEL stuff will still continue to work on the newer processors as well for the foreseeable. I don't expect that we're necessarily going to kill the ARMEL port in Debbie any time soon before anybody panics. One more question. Does ARMHF imply that thumb 2 instructions will be used or is it orthogonal? That is a very good point. Yes, we also, as we can expect that there will be thumb 2 in ARMv7, we are going to be pushing for thumb 2 in a lot of cases, which then gives... I'm using terminology that not everybody may understand. Does anybody here want me to explain what ARM thumb and thumb 2 mean in terms of instruction sets? Right. Are we all that? Wonderful. Easy. Thumb 2 will allow us, of course, to significantly reduce the executable size, the code size of the stuff you're running, which generally is expected to give you better performance just from reduced instruction cache hits. It's no guarantee. The one thing I haven't actually shown here, because I didn't quite manage to get all the details down yet, is we are doing benchmarks as part of the Lenaro work on ARMHF. Konstantinos has gone through and is doing a back-to-back comparison of ARMEL and ARMHF binaries. I know Clint has some benchmarks as well from last year, if I remember correctly. There are places where you will not gain anything from the switch. We'll be totally open and honest about that. If you're running tight integer-based code, obviously changes to floating-point argument are not going to be noticeable at all. However, in code where you are expecting to be running a lot of floating-point heavy, we've seen typically performance boosts could be anywhere from 10% to 30% on some particular... I'll not quite contrive, but probably not representative benchmarks. Konstantinos is seeing a factor of two or three in performance improvement. I think there's... The Povway renderer, for example, of course, is stuck. It uses incredibly nested recursive code. Going up and down the stack of recursive functions with ARMEL involves basically you're spending all of your CPU time just copying data in and out of registers. It's utterly pointless. There are many places where we can gain. We'd expect that for a typical system these days, especially where people are wanting to get nice, shiny, compositing desktops and everything, you will see a noticeable speed-up by switching ABI. That's why we're doing all of this work. If you want to see more details, search in the Debian Wiki for ARMHARD Float and there are links to all of the numbers that we have. Anything more that people would like to ask Tom? Two microphones. Just a comment to follow up on that. One of the things that's going on in the upstream Java community right now is a patch to the JDK for tail call optimization, which will hopefully make recursive calls much, much less expensive, and that would be of interest, of course, to, in this case, Java directly, but also particularly interesting for derived languages like Scala or Clojure that use recursive idioms quite heavily. Stay tuned to that space and hopefully trunk versions of the JDK will enable that. It'd be really fun. Cool. Moving on from the RBL versus ARMHF stuff, hands up anyone who hasn't heard about the, I guess, controversies going on on the Linux kernel mailing list in the last few months to do with ARM. The Linux on ARM history is a complicated one. Unlike on X86 where you can basically target one or maybe two different machine types and know that, you know, because everything's an Intel, everything looks like a PC, you know where your serial ports live, you know where your memory lives, you know where all of your normal system resources live in memory addresses in terms of interrupts and all of that, you can have a nice, simple, single architecture tree but basically it's called i386 but it specifies it's a PC. ARM is more complicated. The ARM as a company have taken a policy of not telling all of their licensees how to connect everything up. You know, they sell you the whites or license to use an ARM core or one of many ARM calls but then so many different licensees, so many other actual chip manufacturing companies over the years have added their own IP around that and they've all gone, they've covered almost every possible combination of how to connect things. So you can't necessarily have a single ARM binary that will run on every ARM CPU out there because actually in a lot of cases the ARM CPU in the middle is tiny compared to say the video component we attached or to the onboard networking or to the cache or the memory they're all connected totally differently. That has led to a huge amount of fragmentation within the Linux kernel in the ARM community and Linus has almost thrown his toys out of the pram about this in recent months. If you look at the changelogs on the later 2.6 kernels you'll see moving from one to the next typically it could be a huge proportion of the check-ins moving from one to the next where the changes are entirely within the ARM tree. That means that there's a lot of work out there just for what some people see as a small toy architecture. Those of us working on it of course see it as more important but for a lot of people who don't know the nitty gritty it looks just like there's a huge amount of churn for no reason. Now in some cases that is true last time a friend of mine locked there were 15, I think, different almost identical UART serial drivers that did exactly the same job but just had different addresses hard coded as to where those UARTs lived. It's been getting very messy for a while and there was a real, I guess, fear that Linus might actually just say we've had enough of this, I'm not going to accept any ARM patches I'm just going to throw it out to the kernel you lot can fork it and it's your own problem this is too messy for me. There's been a lot of consternation about this obviously in the very large ARM community with people who are making money out of selling ARM processors especially ARM processors running Linux and other free software. Linaro and a lot of the people involved in Linaro are working on this. There is a real effort, a real push to consolidate how the different system on chip families are supported in the kernel. I'm getting ahead of myself. Do people know who Linaro are in this room? Does anybody not? We have one or two. Linaro is a non-profit group that is a consortium founded by ARM and a number of their partners so several of the system on chip renders are involved even IBM are involved not because they actually directly sell ARM system on chips they just have a vested interest they manufacture them for lots of other people for example. It's an effort to basically take into the software world the ARM model in the hardware world. ARM does not ever make any actual real ARM CPUs instead they sell the components and then they share out the cost of developing those components with all of their licensees. So people like TI, Freescale, NVIDIA a whole bunch of other people pay a smaller cost to ARM for licensing that core CPU than it would cost to develop themselves. That's a wonderful model ARM are making reasonable amounts of money salaries for lots of us they're nice people, we like them. In the software world it's been utter chaos and there's been nothing like that which is one of the reasons why we've seen all of the different system on chip vendors shipping their own Linux trees their own drivers, their own distributions none of which actually seem to work all that well compared to what might happen if they just shared their work. Again in this room I doubt it's going to be a difficult sell to say sharing what you're working on is a really good thing. So ARM started Leno last year and it's a consortium that isn't necessarily to do with people putting money in it's more a case of the various companies involved putting engineer time in. So ARM has a number of engineers in I can't remember exactly how many Wookie might remember he's looking puzzled as well. So ARM and TI and Freescale and IBM and a number of six or nine other largest companies you've all heard of because they're all shipping big devices got together to start with since then there've been lots and lots other companies also putting engineer time in small bits of funding in cases where it's necessary but the main point is we're now actually working together collaborating on making things work properly so this all feeds in Leno are now pushing for consolidation in the Linux kernel for ARM and this again is being greeted by a lot of delight almost it seems from the upstream folks and we're hoping it's going to work. Any questions, comments? I'm sorry I am rabbiting on here please shout if there's anything else you want to say discuss. Well Alinaro is mostly caring about latest course on ARM v7 and we still have devices ARM v5 which we don't support in Debian and there is no support in mainline kernels and there is a lot of people working their own patch sets and maintaining their own devices out of three so it might be interesting maybe not Alinaro but some team within Debian trying to get these patches organise them and try to make some kind of nice patch set to send to upstream so maybe we can have ARM EL kernels and support devices properly on the ARM EL user land. Okay P2. Maybe a slightly side question but when is the device 3 compiler in Debian going to be updated to the latest version? Because it doesn't work at all for ARM at the moment. Oh okay. Who's the maintainer? Alinaro. He's been kind of unactive lately so maybe an Mew. At the moment you have to find out where the G3 is where this thing lives otherwise there is no way you can compile your own devices. Feel free to grab me afterwards and I can talk through that with you. Grant Likeley who works with me in Alinaro in the office of the CTO is doing a lot of the pushing now upstream and is trying to get device 3 accepted. We're hoping that in kernel 3.1 it should be usable for just about all of the current ARM devices the current brand new ARM devices at least. It's a long road but we're getting there. I have used this development tree for internal data work so I know it works. The device 3 compiler is the thing you have to look for manually. I'm explaining for others as well. There is even a real push for the first time ever we might actually be able to get a single image a single Z image that will boot and run on a large number of totally different unrelated systems on chip by using device tree. Have people heard of device tree or flattened device tree? I'm going off using jargon that may not mean much to everybody. The device tree compiler has been last uploaded in 2008 so I think you can get the package and upload the newer version yourself. P2 well volunteered all yours. By using the device tree to pass hardware configuration around between the boot loader the kernel and anything else that needs it it means we might finally have a flexible enough system that we can run a single kernel. That would make life so much easier for upstream it would make life so much easier for well in Debian as well we would be able to have a we wouldn't need to have the potentially 20, 30, 40 different flavours of ARM kernel if we want to support all of the new devices we could do it with one and that would be lovely. I thought the only exception was this LPA extensions we have in products A15? Yes, fine. Debian ARM kernels at the moment we have a lot of devices supported but there's always a trade off. Again we have this huge multitude of different possible chips and systems that we can support but there's always a trade off do we support every single one possible and need to then have 50 different flavours in the archive or do we target the most common ones and then other people are going to struggle they may need to maintain their own kernel. We tend to go for the latter just for sheer manpower issues and also build time. Obviously the more flavours are currently have in the archive the bigger it takes to build and traditionally the ARM buildies have not been the fastest so it would be a pain if we ended up trying to build 20 kernel flavours on a slow buildie and then a new kernel security update comes out and it takes 36 hours to build. We don't want that. That might change if we get multi-core buildies which nowadays is more possible. At the moment we have a lot of V5 buildies hosted by ARM. We have some hosted at other companies. I'm pushing for ARM to host the new ARM HF buildies. There are issues around that and DSA have some questions about networking things which we're going to work through. I'm also hoping that we'll be able to update some of the existing buildies and replace those with newer, faster, shinier hardware. We're still working on it. Other distros, sorry. I wonder if there is a problem with too many kernel flavours and slow buildies. Why won't you just compile the bigger packages? Another case is like for a example of packages like Fenech which are even too big to be compared with link-time optimisations. For C++ code in those packages it adds 20% speed. So even if it takes more than 4GB of other space, cross-building those parts would not simply benefit. Well, ARM is still a lot slower than other architectures so those benefits are worth a lot more. Yes. Sorry. So why would you just massively cross compile things? There are issues with some of the bigger packages. We know that. I've worked in the past on the Chrome browser on ARM and absolutely simply linking it you can run out of address space. This is not ideal. We have had people looking more and more at cross-compiling for the slower architectures. Wookie is going to be talking about something about that in the very next talk in this room. But if we can give Wookie a microphone he can probably say something more. We had a conversation about this with FTP. We don't cross-build things at the moment because we're not allowed to if we're uploading it to Derby and it's simply not permitted. So the question is when should that be permitted? Are there good reasons why the archive should accept cross-build packages? There are clearly advantages to building things that way but we have to believe that what we get out is actually right which fundamentally the powers that be in release world aren't convinced of yet so we need to persuade people that it is reliable and ultimately it's a port decision if there aren't people decide that in fact we think cross-build stuff is good enough then we can decide to upload some. Basically. But that's something we're just starting to be able to do. Is this on? Yes. How about using an emulator for buildings like QME or something like that because you can run them on. Basically. Okay they are slow but you have there's lots of say PC hardware available I believe it's much more abundant than that arm. We're no longer at the stage that I think where we need to be thinking about emulating things for builds. Of course you'd still end up with the same problem of a dress space because of course the emulated machine is still 32-bit and all that kind of thing. We now have sufficiently fast hardware available I believe to be able to make things work. I mean okay a current top-end 8-core AMD64 machine will still run a lot faster than even the fastest single arm CPU but we're catching up. Okay Nick. Steve, if we're just having one user land or all-arm HF why do you have to build it on every single different kind of board? Surely this is just a rebuilding the kernel for the different target board and just build the user land once on your fastest arm board. Oh yes absolutely. The kernels is just for the different flavours of kernel package. The user land is consistent across all of it. Anything else? Andy? Stand up. If it's a choir then I stand up of course. Just jumping back to a bit previous slide we spoke about AMEL and AMHF so I understand the benefits of AMHF but does that mean that we are just then going to fade away with AMEL? No. So it means that we are just doubling the shaft size for ARM? What's that question? Yes. It's a simple answer. Unless the FTP masters have a major problem with that and I've been assured several times by Mark alone that there isn't a problem. Yes we are expecting to have two ARM ports in the archive. If we ask for a third then there might be trouble. Again this is why going back four or five years when we first started talking about AMEL coming into the main archive the same question was brought up then of how many ABIs do you want? We have thought about this. AMEL is going to cover all of the older machines V4T. The reason why we are staying at V4T is so all of those people who have the open mocos and old devices that cannot run anything newer we are not going to abandon those folks at least not for a while yet. They tend to be quite enthusiastic and know where we live and might come round to find us and ask us hard questions. We are going to carry on supporting them for now. We will continue to support the main buildings we have for AMEL or V5 only. We are not about to drop those machines either clearly. There is such a game to be had by having ARMHF for the very latest machines that we absolutely want to do that. There is one more thing is the FPU we are building ARMHF we have a floating point unit and there are several floating point units with an arm course and we are building ARMHF with BFP D16 which is compatible across most cores but it happens that NEON is attached to more cores and it is becoming default and I think it was only Tegra 2 which didn't have this floating point unit but Tegra 3 is going to have NEON so maybe somebody see a reason why not building NEON by default or changing this. Cortex A8 which is the first generally available ARMV7 architecture chip mandated that you must have a NEON unit attached. NEON is a vector floating point unit similar to SSE on Intel not exactly the same design not exactly the same features but the same kind of thing it's a SIMD architecture with Cortex A9 ARM did not enforce that you must chip NEON but most people did as Hector points out the Tegra 2 which is now a very very common chip in lots of machines the AC100 lots and lots of the Android tablets out there for example are now going to the Tegra 2 which is a dual core A9 runs quite fast will support a gig of RAM it's quite nice unfortunately the fact that those are so common it would mean that shipping expecting NEON always will not work it's a pain but there's something we have to live with at some point in the future we might consider moving to NEON by default but it's not something I think we can count on just yet it's one of those it's similarly like we have user land libraries that will use MMX or SSE were possible we may end up having to have different versions of libraries with different optimisations for this case just the same I think the best way is to have some kind of runtime detection because the GCC is just not smart enough to make good use of NEON for general purpose code that times you have advantages of NEON code is when you have some hand written assembly yeah, also vectorisation in GCC is hard some of the toolchain folks who live in the office just down the corridor from me at home keep on telling me this and they know GCC a lot better than I do so I'm not arguing if you do write hand optimised SSE or hand optimised NEON I mean one of the things that I've got I've still got a patch outstanding I need to push into Chrome for doing color space conversion for video going from the initial naive C implementation to one in NEON I can see a factor of 14 improvement in speed you know that kind of thing is so worth having but you have to have full batch you have to have equivalent code for when that hardware isn't available so if you want to use NEON we have a question as Debian is exactly how we manage that because GCC now has a thing called iFunk which means you can put the NEON code in and the other code and it will work out at load time which set of functions it should be using and whether to do the cool stuff because it's on this hardware that it's running on or not which is neat because it will just always work but obviously you have to build it in the right way which is tricky and not how we do things right now I guess we can or we can have partial archives of optimise for particular flavours you know we have loads of 686 packages for 886 optimise so that your video actually goes fast you could do the same thing for ARM and have a load of with NEON packages but only for stuff where it actually matters but we have to decide which of those we're doing or just both depending on which package it is it's something that we're still working on and we don't want to ignore the FTP masses anymore for example with even more architectures or the release team so the work that we've been doing isn't just restricted to Debian we're not obviously just like in every other aspect we're not working alone Fedora have had an ARM port but it's still very much a second class citizen there are folks now working on sorry they started with Migo actually which is RPM based and they bootstrapped hard float and the Migo is used RPM user land to start Fedora so the Fedora folks are getting ARMHF working we're having discussions with them the Gen2 folks in fact are slightly ahead of us as well when Konstantinos started doing the ARMHF Debian port he was using some a very limited subset of a Gen2 system to use as a base and then basically building binaries one at a time and bringing the system up there's a number of us being there bringing up new systems it's not fun it's not easy whatever you can use to get an extra leg up you use it the Majer folks I've been told are also looking into an ARM port thinking ARMHF maybe maybe not but it's unofficial it's unofficial at this point I'm not saying that this is an exhaustive list by any means I'm just giving examples we've explicitly just a week before last started up at Linaro a cost distro list obviously Linaro and ARM have a vested interest in Linux on ARM working well no matter which distro so far we've been seriously targeting Debian and Ubuntu because that's where a lot of the momentum is but we've set up this cost distro list as a useful place where anybody can come and ask questions about porting to ARM come and get advice about how to target neon all of those questions we're quite happy to provide advice and generally just host some community discussion right how long do we have left a couple of minutes right there are many many other questions these are ones that have just come up in the last week just while people have been talking on IRC apparently the the Toshiba AC100 that we just showed is it has a Tegra chip in it's never going to be officially supported by the vendor but there is there is an unofficial Debian archive being worked on by Julian Andres Close of the discussions about what we should do in terms of supporting GL as more and more of the mobile devices out there most of those are ARM are coming out with GLES instead of full open GL we may consider building some of the archive differently depending on which architect you are on that's a whole big mess that I don't want to get into right now but it's something people should be considering we've been looking a lot at cross bootstrapping again like we had a bit of the beginnings of a discussion earlier cross building is a very useful tool when you're targeting a smaller architecture or when you're trying to bring up a new architecture we've got lots of cross building, cross bootstrapping work going on that I don't have time to talk about but Wookie will soon and again optimisations like neon or for the particular flavours of ARM processor there are more things out there than just neon there's so many things you can do to make the most of your hardware that it can be a difficult choice to make like what's the default I just want to basically say thanks to obviously all the people in Debian who are helping with this but also the people on the screen behind me who are actively helping to pay Debian people to work on making Debian and ARM work better thanks to those Genesi, Lenaro, Toby Churchill and obviously ARM do we have any more questions you'll have to be quick, time's up so if anybody would like to ask any more questions please obviously I'm going to be around I'm wearing my corporate t-shirt today Wookie and I will be happy to tell you more about things especially if you buy us coffee and beer thanks for attending the bot thanks for attending the bot


In the last segment, we discussed how numbers are represented using sequences of zeros and ones. So we discussed how integers are represented with or without signs and how real numbers are represented. And we also said that you do not need to really worry about binary representation when you write a program because you are only expected to write something in decimal and the computer will convert it to binary for its internal processing. And likewise, when the computer prints out something, although it might be holding things in binary, it will print that out in decimal so that we can understand it very easily. Now I want to give you at a very high level how a computer works. So I am going to start by telling you the overall organization of a computer and then I will talk about how the parts work. So here is what a computer looks in a very simplified form. So there are some important components. So one important part is this memory. It has capacitors to store different bytes. It has something called an address port or a data port and it has also control ports. So there can be a read control port and a write control port or there can be just a single control port which tells this memory whether writing has to be done or reading has to be done. Then there is a network which connects these different components together. So perhaps the most interesting part of the computer is this so called arithmetic unit. So this receives, this can receive inputs and it has some control ports and based on what value is sent on the control ports, these numbers will get added, multiplied, subtracted or something like that and they will appear on the output port. And they can go back into the network and they can be sent back to the various components. And there can be a keyboard connected through the network and the values from the keyboard can go into the rest of the computer. There can be a monitor or a screen. There can also be a disk. And finally perhaps the most complex part of this is the so called control unit which really controls all of these things. So let me talk a little bit about the memory. So typically memory is organized into bytes, so groups of 8 capacitors. So modern memories will contain few gigabytes where a giga represents 2 raised to 30 or about 10 raised to 9 or about a billion. So a gigabyte is a billion bytes. Each byte in the memory is assigned a distinct number or a distinct address. These numbers are very much like house numbers on a street. So think of the capacitors as sitting on a long road and you can, so each group of 8 capacitors has a number. So in a memory with n bytes, the addresses go from 0 to n minus 1. And I can say that look, now do something to house number 57 or rather I should say byte number 57 and those capacitors may get something written into or something might and you or you may say look tell me what is in those capacitors. The memory circuit communicates with the rest of the world using 3 sets of wires or ports. So these are the address port, data port or the control port. The control port could be a single wire or it could be multiple wires. So in the picture I had shown 2 wires, the read port and the write port but we can also have a single wire. So here I am going to talk about what happens if it is a single wire. These details are not important and we are just using those details just for making this picture a little bit more detail and therefore more real. So how do you store or write data into memory? So suppose I want to store a number D and D could be whatever say 37 and I want to store it in the byte which has address A. So whatever 57. So the 57th house or the 57th byte on this long road I want to store the number 37, something like that. How do I do that? Well on the address port I am going to store the number A. So the address port consists of several wires and basically when I say put the number A on the address port I mean think of A as a binary number and place the bits of A on the respective wires. So that is what I am going to mean in general. So if I say place a number then I mean think of it as a binary number and place the voltages corresponding voltages on the corresponding wires. In a similar manner I can place the number D on the data port. So you had that memory and it had those two ports and I have set the voltages on the corresponding wires at this point. Then I have this single wire control port suppose and maybe I place the number 1 on it or if I had a 2 wire control port I will place the number 1 on the right control port. It does not really matter this is a minor detail. So now all these values I am going to hold steady for a period which is called a clock cycle. So this is the time in which the circuits do their work. So at the end of that period the capacitor at address A will get that data D. So something will happen because of which the circuits will work and the data will move, those voltages will move from the data port to the capacitors themselves and not to any capacitors but the capacitors at address A. So that is what writing data into memory means. Now you may ask what is this clock cycle business? Well that is something that is determined by the memory designer. So the memory designer will look at that circuit that he or she has designed and will say that look this circuit requires 10 nanoseconds for it to do its work and so the clock cycle will be 10 nanoseconds or something like whatever it is. Now you do not just want to store data but you also want to read what is stored. So suppose I want to know what is stored in address A of the memory. What does that mean? So A could be 57 and if you think back about our picture where capacitors are sitting on this long road, groups of capacitors are sitting on this long road. So I want to look at the 57th group, the 8th group and figure out what is in those capacitors. How do I do that? So I am going to place A on the address port. And that means converting A to binary and storing the corresponding values on the wires in the address port. Place 0 on the control port or if we had a 2 wire control port we will place a 1 on the read control port. So again equivalent and we will wait for 1 clock cycle. So again the circuits will do their work and somehow they will copy the values in the capacitors at address A on to the wires on to values in the wires in the data port. Now this copying is not destructive that is the capacitors will still continue to hold those values but now those values will also appear on the data port. Now the data port connects to the rest of the world by wires and from there you can move those voltages or those that value wherever we want. So reading the value at any address does not destroy it. So even after this operation address A will continue to hold the value that it was holding earlier. So this description is really very superficial. I have not told you what circuitry is present. I have just said that there exists circuitry which will do this movement and I have just told you what is so that this box, this black box called memory has these 2, 3 openings through which it communicates with the rest of the world. And now this organization can be somewhat different. So again this is all schematic. So I just want to tell you that this organization need not be exactly what I said earlier. So for example instead of reading one byte at a time you may read one word. So a word starting at address A may be read or written to in such a case the memory is called a word oriented memory. Well what does the phrase word starting at address A mean? It simply means the data stored in bytes having address A, A plus 1, A plus 2, A plus 3. So remember that a byte is 8 bits, a word is 32 bits. So 4 bytes make a word and so we have to regard, we have to consider the data stored in 4 bytes and the notion of word starting at address A is simply the 4 consecutive bytes starting at address A. And typically in such a memory the data port will have 32 wires so that all the bits in that world can be brought out simultaneously. Similarly we can have double word oriented memory or maybe a half word oriented memory whatever you want. Next I am going to look at the arithmetic unit. So here the ports are input, output so there may be there typically are 2 inputs and there is an output and then there is a control port. Inputs and output will consist of W wires where W is typically the size of the memory data port. So if it is a word oriented memory then this will typically be a word oriented ALU. But not necessary, this is just a typical organization. Control could be several wires. So the numbers appearing on the control wires will say what operation should be performed. So what happens over here? So let me draw a picture. So typically the ALU is pictured in this funny fashion. So this is data port, input port, this is input 2 and this is the output port and there is a control port over here. So if you want say something to be added up what do you do? You place the value to be added on these wires then you place the second value to be added on these wires and then there is this control port and it may have several wires. So there might be a 1 wire which is the add wire. So you raise this wire to become 1 instead of 0 and everything else should of course be 0s. That is going to command this arithmetic unit to take these values, these two values and put out their sum over here. So that is how the arithmetic unit works. So the arithmetic unit is I guess sort of the heart of it because this is where the calculations are performed. But in principle it is fairly simple, the organization is fairly simple. So values come in, what is to be done with them is fed through the control port and the outputs go out. Of course it has to contain circuits for doing multiplication, addition, division, whatever it is that you want done. Next there are these so called peripheral devices which might include keyboards, screens and disks. So these also have a control port and a data port like organization. So I am going to describe this again in a very simplistic manner. So we are going to place values on the control port and those really tell the peripheral to what is to be done with the value on the data port or it may say that look this value that I am placing on the control port really indicates that you should place a certain value on the data port. So let me give an example. So if you take the screen as a peripheral then the data port value is going to be suitably interpreted and shown on the screen. So the control port might say where the data value is going to be shown. So that might be how a screen works or if it is a keyboard then you may say you may that the keyboard itself will place some value on the data port and the rest of the world will be able to read it. So your computer may be able to read it. So the control port of the keyboard may signal to the keyboard that now look now I am waiting for you to send me something. So the value placed on the data port by the keyboard can be sensed by the rest of the computer. Then the final unit that I want to discuss is the so called control unit. So this control unit is what you might call the manager or the brains of this entire thing. This is the controller as the name says it is going to tell the other parts what to do. So how does it do that? Well it sends numbers or commands on the control wires of each unit. So we said that the memory unit control wire has to become one so it is made one by the controller or the add control wire of the arithmetic unit has to become one. Who does it? The control unit does it. The control unit decides what to tell other units by reading a machine language program stored in the memory. So of course the question arises how does the control unit itself know? So for that there is the machine language program. A machine language program is a sequence of numbers representing machine language instructions and machine language instruction examples might be something like this. So there might be a machine language instruction which says make the ALU add the numbers in addresses x and y and store the result in address set or maybe another instruction which says make the ALU, the ALU is an abbreviation for arithmetic and logic unit which is the abbreviation which is sometimes used but another abbreviation is also AU and which is just the arithmetic unit. Arithmetic and logic unit or ALU and AU arithmetic unit are abbreviations which really mean the same thing for practical purposes. So you might have a machine language instruction which commands the AU or the ALU to do multiplication or do division or addition or whatever it is. So what have we discussed in this? So we have discussed that a computer has several parts like memory, ALU or arithmetic unit or AU, peripherals and these communicate with the rest of the world through data port, address port, control port, ports like this. Then there is a control unit which tells other devices what to do by placing values on the control ports of those devices. The control unit arranges for data moment to happen between other parts of the computer and the control unit knows what to tell others by reading a machine language program which is sitting in the memory of the computer. So we will conclude this segment at this point.


Hello folks, welcome again. So in the last session, we studied what are Serds and we studied how to express Serds as a Product of rational and in irrational part and vice versa Now we are going to understand one more important topic and that's called similar Serds. Okay, so what do we mean by similar Serds? Now similar Serds are two or more Serds Obviously you have to have multiple Serds to compare so that you can talk about similarity. So two or more Serds Are said to be similar when they can be reduced in such a way that they have same Irrational factors Right, so we learned how to convert a pure Serd or a complete Serd into a product of a rational and an irrational Factor so if by after reduction you see that the irrational factors are same then the Serds are called similar Example root 45 and root 80 are similar Serds Why because root 45 you can see is nothing but under root 9 into 5 which is under root 3 square into 5 Which is under root 3 square into under root 5 which is equal to 3 times under root 5 3 root 5 right so 3 root 5 is root 45. What about root 80? Root 80 is under root 16 into 5 4 under root 4 square into 5 then finally under root 4 square into Root 5 sorry I missed the root sign here and then this 4 root 5 Right now if you compare these root 45 and root 80 you will see the root 5 component is Both in the both they are same right so your rational part are same So hence we'll say 3 root 5 and 4 root 5 are similar Serds Let me take another example and explain it to you. So another example is root 27 and root 275 are similar. Why because root 27 if you reduce it You will get 3 root 3 and root 75 if you reduce you'll get 5 root 3, right? So if you see again the Irrational part in both the Serds same So hence it is similar Serd another such examples There would be so many examples minus 2 root 7 and 5 root 7 are similar Okay, then 4th root of 3 and 5 times 4th root of 3 are similar because irrational parts are same all these are similar Serds Something which is not similar for example root 5 is never similar to root 3, right? They are not similar root 20 let us say is nothing, but if you see root 20 is 2 root 5 isn't it so root 20 is not similar to root 18 which is nothing but 3 root 2 Correct. So these two are not similar. You understood what is similarity now similarity of search is very important while doing some operations And we'll see now How it impacts, right? So what is the importance of finding similarity because only similar Serds Could be added or subtracted Now dissimilar Serds or not similar Serds can be multiplied and divided but for addition and subtraction which is going to be a big thing for you Later on because most of you would be doing such mistakes later And hence to take care of it We have we are now saying that please be careful about the operations on Serds now similar Serds only can be added and subtracted Okay, they can any type of Serds can be multiplied and divided except During division you have to make sure that you're not dividing by zero But in case of addition and subtraction only similar Serds can be added. So two or more similar Serds Can be added, right? So root of 45 plus root 80 if you see is nothing but 7 root 5 5 because root 3 root 5 plus 4 root 5 you can take root 5 common So 3 plus 4 within the brackets. So 7 root 5 Right, this is this is 7 into root 5. So please do not get confused between this And 7th root of 5 guys So if you see if you see 7 written in this valley, then it is 7th root But if you see 7 written outside the root sign, it is 7 times square root of 5, right? So when the nothing is mentioned it is 2 over here. So it is 7 times square root of 5 So don't make mistakes in these cases, right? Now similarly if root 27 plus root 75 is there so root 27 is 3 root 3 root 75 is 5 root 3 we just saw above now are they similar? Yes, because their irrational parts are similar same. So hence I can add Simply as if you know, you're adding 3x plus 5x isn't it? It's it's it's like if you call root 3 as x So it's like adding 3x plus 5x Which is nothing but 8x similar similar to the algebraic relation what we have studied Okay, similarly subtraction can be done only with similar So hence again, we take the same root 80 and root 45 you subtract You'll get 4 root 5 minus 3 root 5 Which is root 5 1 root 5 that is right. So 1 is hidden over here 1 into root 5 now root of 27 Minus root of 75 is 3 root 3. We just saw above minus 5 root 3 So 3 root 3 minus 5 root 3 is minus 2 root 3, right? You can also express this as what can you express this as So you can express this as minus 2 to the power 2 whole Half right same thing into root 3. Isn't it? Or this can be written as this can be written as minus under root 4 into root 3 Isn't it? Which is nothing but minus under root 4 into 3 which is nothing but minus root 12 So you can express in whichever way you can reuse it till this level and leave it like that also now So these are what what did we learn? We learned about similar certs We learned that only similar certs could be added and subtracted for multiplication and division. There is no such restriction So please understand whenever you see a plus sign be aware only when if you see a similarity of the certs Then only you operate we also learned this that don't get confused between things like 3 root 5. This is third root 5, right? Third root 5 is different from 3 times root 5 Which is usually written as 3 and along with it root 5, right? So these two are Different quantities. So please be careful about it