I think we can get started. So talking with a few folks ahead of time, it sounds like there's a lot of folks have a lot of content authors to manage. So looks like picked a good talk. So whom I, and why should you care? Why should you listen to me? So I work for a company called BlueSpark. We're a full-service digital agency. We do a lot of digital strategy, user experience design, Drupal development kind of stuff. And me, I'm the managing director. And my background is in user experience design and experience strategy. And it's been the last bit of my career focusing on how you merge kind of business requirements, business analysis, the mission or vision of an organization with kind of a great user experience and thinking even bigger than that beyond digital in terms of service design. Which kind of led us to, led me to thinking about operations of a website. How do you create something that your staff and your team can use to actually engage your audience and drive your mission or your vision forward, deliver results on that. Worked with a variety of clients in various capacities from Red Hat, Indiana University, UCLA library, and all of these are managing from 50 to a few hundred content authors. Red Hat's even managing a large community. They have community contributors for content. So it's really fascinating the different challenges that these organizations are facing. So before I start, probably wondering why I have a quote of Carl Sagan. I kind of want to lay a few of my philosophical ideas. We don't have to go all the way back to the Big Bang, but do want to lay a little bit of groundwork about where I'm coming from and where some of these tips might be coming from. First off, I'll talk a little bit about who this talk is for. I like to think in terms of the content steward, the person that is responsible for gathering all the people and making sure they're producing quality content. And this content steward serves various roles. Certainly editor being chief among them, but project manager, particularly for bigger pieces of content that need to get published, writer at times, therapist, certainly. But ultimately, it's the content steward's job to bribe, control, convince people to publish content for the website. And not just content, because anybody can write content and anybody can write content they think is good, but what you're after is content that engages your audience, I'm just gonna read it, content that engages your audience and delivers results on the vision for the website and the mission of your organization. Because otherwise, what's the point in having a website if it's not delivering results? So what makes for good stewardship? What makes for good stewardship? And I think there's just six traits here, and I'm gonna quickly go over them because I don't have a lot of time and I wanna make sure I get to the meat of the presentation. But good stewardship is educating, is teaching your content authors what it means to create good content and coaching them and guiding them and really bringing them along. It's championing the idea that your website is there to engage your audience and it's getting out there and helping people see why they should be doing it. I'm getting a little ahead of myself, but it's encouraging people to publish, writing content is a tough thing. We've all stared at the blank page and been overwhelmed by that. So it's getting out there, being the therapist, being the cheerleader and getting them to publish. It's supporting them whenever they have questions, whenever they're struggling. It's celebrating the success, not just with your content writers, but also with their managers and it's listening to the challenges they're facing and helping break down those obstacles. So in my mind, these are the qualities of good stewardship that whether you're managing a small number of authors, a large number of authors, whether it's just yourself writing for the website, these are things that you're doing. Common challenges that we face whenever we are, particularly whenever we're stewarding content for big websites is this often is not your only job. This is just one thing that you're responsible for and it's easy for that to get set aside in favor of other responsibilities that you have. I'm guilty of the second one. People like to have written. You don't want to write, you want to have written. That makes sense, right? There's a publish it and forget it mentality. So we put everything out there, we put it out there and we're on to the next thing. How is it performing? How can we have made it better? What can we do to improve it? It's the web, it's not a printed material. You can go back and change it if things aren't clear, if you got feedback on it. Another big thing, particularly I think with when you're dealing with hundreds of people who aren't writers by trade, especially if they think they're good writers, writing by its nature is a personal thing. We think it's an expression of ourself and so any kind of criticism of the writing is often taken as a criticism of them and that's very difficult to overcome and it can be very emotional to have those conversations with them. I was going to ask what other challenges we have but I thought I was gonna have closer to 40 minutes but I only have 30 so I'm gonna keep going. But I'd love to hear other challenges that you guys might be facing in your organization if any of those weren't covered afterwards. But this brings us to the topic for today's talk which I want to give you 10 tips for managing a multitude of content creators. These are tips, advice, things that I've seen, that I've observed in working with the organizations that I've worked with. There's no silver bullets, no magic formula. It all takes time and effort and energy and persistence. So number one is easy reference material, right? A style guide serves as a great reference for how they should write what grade level of writing they should be targeting. And you don't have to write these from scratch, you don't have to have your own. There are lots of really great style guides out there. MailChimp has a great style guide that you can say, look MailChimp is the one that's our starting point. Here's the link, go read that and then you can add to it. If you have an intranet or a wiki you can add to it. Worksheets, there's some really great worksheets to break down like okay what's the purpose of the article that I'm writing? My son has one of these fifth grader and it's like man, we should use this for writing online. You start with the purpose, where do your four or five key ideas and you use that as the basis for writing your article and you stick to the key ideas. The content life cycle. So one of the things mentioned in the challenges is the publish it and forget it mentality. Well if we think about the content life cycle from the idea to the draft to the reviewing, how we had metadata, what kind of metadata we should add, the publication of it, promotion, follow up and in some cases the retiring of the content and we set expectations for each of the stages of the life cycle. That's gonna be clear to your writers what's expected of them and then checklists. Checklists are just great. Does anybody here question checklists and why checklists are awesome? Do I need to go into that? So just like a 10 point checklist whenever they're going through it, did you do this, did you do this, did you do this? Great, you're done. Publish it, move on. But it's not enough to have the material. It's not enough to even have written it in a way that's easy for your content authors to understand. Make it easily accessible. Remove all barriers to publication. So make all your reference material, your style guides, your worksheets, your checklists, make all that, like when I go to publish, it's right there. Give it to them in PDF format, it's in their email, it's in Dropbox, it's printed right there on their desk. Like they can't turn around without hitting the reference material somehow, some way. Yeah, they will. They will, no doubt, but use your job to try to prevent that. See, streamlined workflows. This is one of the challenges too, but I think particularly whenever we're designing, we think about the challenges and issues and trying to put in constraints in terms of, well, let's try to make sure that we're actually publishing good content, and a lot of that makes sense, but we gotta be careful not to put too many constraints in place, otherwise it discourages people from writing the content they need to get published. This content still needs to get published, we would like to be of a certain quality. But as long as it's getting published, we can iterate to that quality. So think about how we streamline our workflows and even think about working outside of the content management system. Have people start writing in Google Docs or some kind of shared content authoring system that's not like a wissy-wee editor that feels as dry as Drupal's UI. Sorry, Drupal developers, it's kind of bad. But the great thing about Google Docs too is you can comment, you can make suggest changes. It's a full-on word processor and it's a richer environment for providing feedback. Focus UI, if you do have to stay inside Drupal, I think I was talking to somebody over here, like if you have a content author and their job is writing, strip away everything else, except just the features that they need. And Drupal will allow your developers to change the admin UI based on the developer's role and based on the role of the author. So strongly recommend you're working with your dev team to get them to do that. And don't expect it to work the first time.  What happened to that field or what happened to that feature? It's gonna be a little back and forth to get it just right. But if you can streamline and you can simplify stuff, that would be a good stuff for your authors. Another big challenge for writing is not just the writing, it's if this is a promoted piece or something you typically have imagery associated with it. That's another big roadblock for a lot of folks is they don't like, how do you select good imagery? So where do I go to find them? What's approved, what's not approved? So making sure they have access, they know where media sources they can go to, whether it's a videos or, what's your policy in publishing YouTube videos? Stuff like that, right? And make sure it's all centralized in one place with easy links. And how do you cite images? So if I do use a creative commons image, how do I make sure that that's cited properly? Never stop training. So we all think about onboarding. We think about that initial training step where we want people to come in there and we're gonna sit and we're gonna talk with them or we're gonna review it, or we walk through and maybe that's an hour, maybe it's 90 minutes, and they'll create great, you know everything. Maybe, probably not. So do the initial onboarding with the new folks, then meet with them regularly. Have weekly office hours. If you have a Slack or some kind of chat application be available periodically for that. There are some folks that need extra help and they have questions about how to do stuff if you've ever used Calendly or where you can block off like a little bit of time so that people can schedule 15, 20 minute conversations with you where they can say, hey, I have this problem or have this challenge. I just wanna sit down and brainstorm with you a little bit so you can help me think through this and you can actually get some problems off at the pass before they develop into bigger issues. And then I strongly suggest monthly refresher trainings. And kind of sample agenda here where get people to share their appreciations. You know, the more people feel appreciated for the work that they're doing the more likely they are to continue doing it and to engage with it even more. Celebrate successes, review published content, what was good about it, what wasn't so great, what they could have done better. But prepare people ahead of time.  You don't wanna spring that on somebody, you wanna make sure they're comfortable with it. Then an open Q and A just to give folks a chance to just ask whatever questions they have. And then don't forget to promote the training. Get it out there, let people know, make people aware of it. Just don't schedule it, put it on people's calendars and expect them to show up. That's not gonna happen. That's just, you wanna get out there, you wanna make sure they're showing up, do what you need to do to get people to show up. Next one, and I'm sorry, I'm really going through a lot of this stuff pretty quickly. But know your staff. Know the capabilities of your staff. What are they good at, what are they not good at? Don't ask if you're working on promoting, you've got an event coming up and you don't ask somebody, okay, can you go out and select some good photos for this for somebody who just doesn't have the eye for it? So know what their capabilities are. And be on the lookout. So you might know that this person has a tendency to write more academic than what you would like. Be on the lookout for that. And be ready, okay, they're publishing some content this week. Once it goes up, be ready to give them that feedback or try to get out ahead of that. Schedule some time, just sit down and review it with them. So just think about your staff and think about what they're doing and what their strengths and their weaknesses are and try to compensate as much as you can for their weaknesses. A recruit assistance. So you're gonna have people who are really good at what they do and maybe not initially, but they develop that over time. Can you get some folks to, you like maybe sit in on some office hours with you? Or where they're reviewing some content and taking that off your plate?  But can you find people, especially if it's just a one person show that it's just you as the content steward, can you find other people on your team that the other authors who are good at their jobs and kind of use them as a, to help train the rest of the staff. Touched on this a minute ago, but celebrate the success and celebrate what's working. Point that out, it's so easy, particularly as an editor, when you're looking at a piece of content to focus on, get the red pen out and strike through everything and it's like, okay, this is what we need to improve. Or, okay, the traffic to this article that we published that we needed X% of traffic for, it didn't hit it. So easy to focus on the negative and then that just wears people down and discourages them from writing more content. Celebrate stuff, always find stuff to celebrate. Even if you gotta show them an article that's completely red, find the one or two pieces in there that's good that you can compliment them on. You can always find something good to compliment people on and you gotta do that. You gotta take the time to do that and show appreciation. Cause like you, this is not their only job, right? In fact, this is, maybe it's 25 to 50% of your job to kind of be the content steward. For them, it might be five or 10% of their job to write the content for the website. So be appreciative and encouraging of that. Another really, I was just about this flip, but I wanna focus on the fourth point too. The more specific you can be in your celebration or your appreciation, the better it is received. Be as specific as you can. I do art with the kids at home. I volunteer and kind of teach art with fourth graders. It's in a very rewarding experience, but every like, you can tell the difference when you say, oh, that looks great versus, wow, I really like the shape of that circle there. You got a really interesting curve to it and it's very different. The eyes light up and we do that as well. The more specific you can be in your compliments, in your encouragement, the better received it will be. Share results, right? This is kind of a continuation of celebrate, but show people the results that matter to them. So not everybody's gonna care about the traffic to a webpage and in fact, some pages are probably only gonna receive four or five hits and that's really all that it should get. So what are the results? Maybe you got some feedback from your user. It says, I was looking for this information and this was clear and I got this and this was really great. Really appreciate that this content was out there on the website. Whether it's an anecdote like that, whether it's, maybe some people do respond well to metrics where they wanna see, okay, how much traffic did my event page get? Because we're waiting just, I wanna see how many people are gonna show up. But share the results, pass that information onto your authors. Ideally, we're not there yet, but I would love to see a Drupal dashboard where whenever I'm signed in to my, I'm looking at my content, I can actually see like metrics associated with what's going on, whether it's okay traffic or maybe there's a signup form on there. Like how many people signed up after they visited? So like be able to identify what the key metrics are for that piece of content and have that show up in my dashboard so I get as the author, get immediate validation that my content is successful. Or it's not and I can go in there and tweak it and fix it, right? But that faster feedback could be really, really helpful. Automate as much as you can, right? So data architecture is one of the great things about Drupal is just how much metadata you can associate with a piece of content from tags to categories to dates, all this stuff. And so if you can have, okay, we know that this event is at this location and it's in this category and we know that, okay, obviously it should show up on that location's calendar but maybe it should, based on the tags it shows up but it's promoted in other places as well. So we can use data architecture just to get it out there and get it promoted very easily so we don't have to do a lot of that by hand. Use readable.com, sitebeam.net, these are really great resources. They're subscription services but they're really great resources that you can run stuff through. And the nice thing about something like readable is that you're taking some of the sting out of the feedback. You're not, it's not so personal. It's like, look, we set a target readability score of fifth grade, sixth grade. So those are reasonable. And Mr. Professor, yours is a college level wording and phrasing here so we need to kind of bring that down and this is just what it is. I'm not criticizing your use of semicolons. I think they're brilliant but this is what we have, you know. You're on to me. And then just review the results.  Or whenever you're reviewing a piece of content, talk about what the readability score is. But don't just give the feedback to your writers, your authors, give it to the managers too. Help them get that promotion. Help them get that raise, right? Like they're gonna appreciate you so much more. Appreciate the feedback if they hear it from their manager. If their manager goes, you know, I was talking to Jane the other day and Jane says, you're doing great. You're killing it with the content. I'm so happy to hear that, right? That, who doesn't wanna hear that from their boss? So manage up, manage to their boss but not just their boss, manage to the executives. Tell, create reports.  I don't know what I'm looking at. I can't make heads or tails of this. So create a simple one-page report that you can explain very clearly. Look, this is how our website is being successful and helping drive our mission forward, helping our vision for the website. This is how we are being successful with the website. And here it is, very simple, very plain. And everybody across the organization who's working on the website gets that praise. So we'll benefit from that. The other value to that too is as you start to feel overworked and overwhelmed, which you will and you do, I know you do, that starts to lay the groundwork for getting some help, right? Like you're showing the value, you're showing what's going on, you're showing why this is working and why they should continue to invest in this. And then eventually like, okay, you love this, this is great, I'm overwhelmed. Can I get some help, please? Part time, contract, whatever. Speaking of overwhelming, take a break. Small breaks throughout the day. When you go to lunch, turn your phone off. There's virtually no emergency that can't just wait a little bit. This is a marathon, it's not a sprint. This is gonna be a lot of work to get all this stuff done, so you can't just go, go, go, go, go, go, go. Another, this was something that, I saw this as developer time versus manager time, and this is really helpful for me at some point, so I kind of tweaked it a little bit. So editor time versus focus time. So there's stuff that you need to do outside the scope of managing all these authors. There's also editing and other stuff you need to do. So let's separate that. Let's say, okay, a couple hours in the mornings, I have my office hours and a couple hours I'm gonna be reviewing stuff and editing stuff, and then in the afternoons it's all blocked off for me to focus and to do other stuff. Try to create blocks of time so that you can, when you need to focus, you can, when you're interruptible, you are, because you can't, like, if you have stuff you need to focus on, you can't be interruptible.  Another thing to think about stuff, a way to think about things is, is this important or is it urgent? Right, and 90, 100% of the time the urgent is gonna trump the important. So unless you make time, block time, set aside time, make sure the time is blocked and you're focusing, you're gonna work on the important work that you have to do instead of the people knocking on your door, hey, can you help me edit this or fix this or do whatever, your important work is never gonna get done and that important work might be selecting which style guide you wanna use, figuring out how, dealing with other kinds of content issues or working with the developers to integrate with the readable API or streamline the UI, all that stuff has to get done but you're busy and unless you block off time for it, it's not. So to recap, I won't go through them again because I've got a minute and a half but I'm sure my slides will be available. The 10 tips, the key takeaway is big, you can't do this alone.  You need competent and powered staff that can help you but to get there, it's gonna take time. It's gonna take time, for some folks it could be a few months, for other folks it could be a few years but it's just gonna take consistent, persistent effort. I was hoping we'd have time, a little more time for questions but I'm here. So if you wanna ask questions, we can. That's it. Go ahead. So the question is how often do you see like a core web team that's responsible for developing all the content versus where it's kind of more distributed and it really depends on the size of the organization. Like if you have smaller organizations say of less than 100 people or closer to 50 like you might see a smaller web team that's responsible for it rather than kind of having it distributed. It also depends on how much content the organization is producing that's responsible for producing. Like if it's a very singular, we just have this little bit of content that's gonna be more controlled by marketing.  So I think a big part of that is just the size of the organization. Go ahead. In the strategies and getting process where you're trying to achieve manager buy-in pre-editors and sort of somewhat relatedly how does one navigate the situation where you're the content manager but they're the subject manager experts and you're trying to critique or develop their writing on subjects that they're the experts on? That is a great question. And really there isn't, like there's no silver bullets for the first part of the question. How do you get buy-in from the managers, particularly the managers of the content authors? I'd sit down and listen to what concerns they might have. Is the person overworked already and they're worried about how much time they're committing to it? They feel like that's not necessarily important. Like what are their concerns? They listen to them. There's a book called People Skills that really talks about active listening. So, and I find that that kind of process like it helps people feel heard.  It's like, okay, look, I hear you, these are all problems, but this is what I need. Help me figure out. So you're enlisting their help to come up with a solution. And if they're helping you come up with a solution, they have ownership by buying into the solution.  They're still going back. Hey, you remember, we talked about that. This is what you said. It's following up an email. Okay, we had that conversation. Here were your concerns and here was the outcome for that. And, you know, just getting them to agree, getting them to agree and encourage publicly too, where they have other people that they've committed to is also helpful. Another great book to read in addition to the people skills for active listening is influence in just the different ways you can rely on influence to, well, to influence there, what they're doing, what they're saying, so. And what was the second half of the question? Managing the tension is sort of the expert on writing content and then just the expert on the content itself. Yeah, so that's great. Great question. I think there's two parts to it. One is goals. What are the goals of the content and is the content achieving that goals? And that's where too, like we talked about what's the readability score that you're after, like what are the guidelines that you're following and to be able to point to those guidelines, to be able to point to that score where it's objective. So as much as possible, making it objective, taking it out of you to be being critical. I mean, certainly, you know, if the style guide says you need to use serial commas and they're not using serial commas and if you're not using serial commas, what's wrong with you? Just saying. But right, so what does the style guide say? So make it more objective. The other thing too, that I think, hands down, get users in front of the content, get the recordings of users trying to understand what does this content mean? So whenever you need to do this, where is the answer on this page and they're reading through pages and pages of text and they're like, no, it's not here. So it's not me who's offering this to the user. Exactly. So get it out of you, as much as possible, you're not the one providing that feedback. It's, well, this is the style guide. This is what it says. This is the user. This is what they're saying. This is your readability score. So make it more objective, because if it's coming from you, it's subjective. Other questions? I think we're at time. Excellent. Thanks, everybody. Appreciate it.


My specific research is running to the area of irregular parallelism but today I'm going to take you all the way from the basics of why you want to do parallelism, what regular parallelism is and then the challenges that we see in regular parallelism. I'm trying to emphasize to all of you why no matter what your field is and what sort of software you're working in, why you'd be ingested in these techniques and how we're going to use them in the future. So why do you want to write parallel programs in the first place? Most people are taught to write sequential programs first and doing parallel programming is something you might get taught, a technique you might use every now and again but it's not something most of us think to do by default when we're programming. It used to be the case that all computers had a single CPU run all the codes sequentially and it's been like this for many decades so it's informed all of the way we write software, all of our education, all of our techniques and ways of doing things, we're very used to thinking sequentially and it's a nice comforting place to be, everyone knows what they're doing on a sequential system so we've tended to try and stay there. There were some systems in the past that have had two CPUs so expensive servers, some specialist systems might have had to do two CPUs but it's only an extra CPU so if you ignore it it doesn't matter particularly and generally if you had two CPUs because you wanted to use them specifically to do something so again most people didn't worry about dealing with two CPUs in a single computer. The problem we've had is we as we've advanced processor technology and added more and more transistors and made them more and more tiny inside the CPU. We've used more and more elaborate systems to get more performance out of our processors. We're starting to hit a point where we can't put any more power into the system. We've only got so much power you could put into CPU because we can only draw so much power we can only get rid of so much heat and we're drawing more and more power to create these more elaborate CPUs with these tiny transistors and it's not working anymore because we can't show any more power into achieve that so this graph shows the the number of transistors in processors at the time which just keeps going up and up and up and this is a logarithmic scale mind but the amount of power that we can put into a CPU is limited we can't stick much more in and starting around 2004 we start to hit what we call a power wall. This has meant that the clock speed in processors can't go up any further because we can't put any more power through the processor so we can't use the clock speed any higher that's caused the blue line where again around 2004 the clock speed stayed the same we couldn't put any more in and this has meant that the processors aren't getting more powerful they've made more transistors in but in terms of how fast you can actually run your programs your benchmark your applications you're not getting any more any more out of it over a single processor it's likely that we'll still get some performance increase over time but the key difference is you're not going to get that exponential increase of Moore's law giving you more and more performance again and again again like we used to we used to be able to build a program how we like and just think that the next generation processors will take that performance slack up for us that's probably not going to happen on the same scale as it used to so the way around this is to took two processing cores in a single processor it's different having two CPUs because you have the same heat and power budget it's integrated into a single package so they can share cash they can share the memory but it's not the same as having two CPUs it's much more efficient way to get the same processing power of two into a single processor but again this is pretty easy to deal with you can simply run one application in the foreground and one in the background or one a couple of background tasks or you can just ignore it and you're not really using much over that processors continued so my phone typically has two cores most phones do my laptop's got four cores and here you can run a couple of background applications perhaps but you're starting to think what am I going to do about fourth core and as this process continues over time you can start to see how the problem exacerbates when you've got 16 cores which is probably something we'll see in the very near future you start to very quickly run out of ideas of things to put on these cores if your application is running on just one of them it's what you're going to do with all the others and they're taking up space and the key thing as well is that if you add more and more cores we've got the same space the same power budget we might start getting less and less powerful on their own and eventually some people may think we end up with hundreds or even thousands of cores that's some of the research we're looking at here in Manchester and if you have thousands of cores what earth are you going to do with them all the danger is if you have a sequential application it's going to end up running on some tiny little corner of your processor ignoring all the power that's got around it and this applies no matter what your application domain is if you're writing software for modern processors you're going to end up in a situation if you're writing a parallel code that's why we want to do it in the first place we do already know how to make parallel programs we've been doing it for 30 to 40 years now it's not something new people talk about parallelism as if it's come from nowhere the logical revolution here has it we know lots of good techniques already all we have to do is structure your program so you've got tasks that can run at the same time with each other so two tasks at least which can run at the same time doing their own thing making their own calculations and you've got parallelism that sounds really straightforward sounds really easy so instead of your biggest sequential program split it up into lots of tasks which run alongside each other we've run them in parallel by sticking them on separate cores and if you create as many of these tasks as possible then we can fill up some of those cores on these potentially huge multiple processes so a really good example is matrix multiplication it's really simple because it's one of those traditional scientific operations that you were using things like weather processing large linear algebra systems the sort of thing we want to have a parallel computer and that's why we're good at it because it's where the money's been in the past so matrix multiplication for each set in the matrix you use a column from one of the input matrices and a row from the other that informs the results of one cell and then the next set in the matrix has different inputs and a calculator's own value but the key thing to know is that each set of the matrix is entirely independent of any other cell and therefore we've got tasks which can run in parallel all we have to do is separate those out and then we can run them on different cores this is a really good solution because you can have very very large matrices and some problems or you can parallelize those pretty easily now there are some issues still about how you schedule them and about where you move the data around in terms of creating the parallelism in the first place is pretty straightforward this only works if those tasks are entirely independent of each other as they are matrix multiplication there needs to be ideally no communication between them and if they all they need to be able to run so they're not using the same memory ideally so each of these tasks needs to have nothing to do with any other tasks so there needs to be nothing moving between them they need to not stop each other and then you'll have as much parallelism as we need the problem that you might find is that you create a choke point by having some kind of shared object if you have some sort of object in your program that everyone wants to use and I don't mean a jar of just any kind of conceptual object if everyone wants to use it then you may find that everyone goes down into this one object and then they have to wait to use it and if you are familiar with parallel coding you might have used locks before and this is the sort of problem that locks use and that things become serialized as they all try to go through this single object and you can imagine if we try and schedule out onto different cores you can end up with that problem where it had lots of cores and only one being used this is where you get that problem from one point in your program where everyone's trying to use it at the same time and you may think you've got all these tasks but in reality if they use a single shared object then you're going to have one task perhaps for a significant amount of your program ideally obviously don't write software choke points in the first place and you can avoid it for lots of scientific applications but perhaps there are some problems where you can't avoid writing these choke points and what are we going to do about those? It's traditionally been the case that this is what they're running scientific parallel computers and solving big problems on these sort of computers this is what people think of when they think of parallelism they think it doesn't apply to them but in reality with these massive multi-cores you've got that kind of parallelism potentially going into your single computer over the next few years as we get more and more cores so you're operating this kind of machine that they at moment have specialist programming and specialist running on your own for your application even if you're writing something nothing to do with parallelism you must try to manage and program this sort of computer so let's look at a tricky problem and this is a problem which I'm looking at intensively in my PhD it's designed to be really awkward but it's not something I've just picked out of the air it's a real problem so this is called Lee's algorithm it's an algorithm to solve the problem of circuit routing on a printed circuit board we have lots of the black dots where components connect to the board we'd like to join them together by building wires and the the colored lines represent those wires and you can see that there's lots of wires and they all crisscross each other and they're allowed to go over the top of each other it costs a bit more so you'd like to try to avoid that but generally the wires cross the entire board and it's a bit of a rat's nest of a problem if we zoom in you can see the kind of complexity if you pick out a single line and follow up your eyes you can see it's going under otherwise around others the shape the wires take depends on the shape that otherwise have taken in the past and this is that algorithm for working this out isn't particularly relevant it's a simple breadth first search but what it points out is the kind of inter complexity between the different routes and this should be ringing an armbos because we said we wanted our task to be independent and you think about starting to pick out routes from here which are independent of each other so they can be solved in parallel you can start to see where the problem is so if I pick out one route it goes from one of these black dots where some components connected to another and there's already wires on the board so in order to get the the cheapest cost of each wire it already moves around in a slightly funny way it's quite hard to work out why it's doing that from looking at a single wire it's as the program builds up you get to this state which forms where a particular while great and then if you have another wire would like to solve at the same time the problem is that it crosses the other wire so it's going from where it thinks it wants to start and finish it looks at the best route and it tries to use the same bit so if you've got something that's being shared between the two if we try to run them in parallel then overwrite each other's memory would end up in a big mess what we have is a conflict the two tasks are getting in each other's way at this point in the middle however the really tricky thing is that you don't know where the route's going to go until we've started trying to solve them so all we know at the start is we've got these black dots and we're going to try and link them up and that's all the information you've got you can try to use some heuristics but in practice I found that routes are so unpredictable where they go any kind of heuristic is not like to be useful so you end up with a problem that the thing that the task conflicts over the thing that they try and get each other's way with is basically anywhere on the board and so you can see that massive shared object is instantly a cause that problem a conflict where everyone tries to go down through the same object to use it so it looks like we can't find any parallelism and this is a really annoying problem because of thinking about how the algorithm works it should be really easy there should be loads of routes you can solve in parallel and if you knew what solutions of the routes were then you could make any parallel really easy but you don't know that stuff beforehand so you can't solve it in that way the entire board ends up being one big shared object no matter how many tasks you create they end up going through either one choke point or reality a few choke points but still enough to really constrict how much power is we are getting this is what we'd like to try and avoid we're going to see an irregular problem we can't divide up the shared resource and so it stays as one big or shared resource that contrasts to the irregular parallelism things like matrix multiplication so how can we tackle this i'm using this quote as inspiration this is admiral hopper she was a famous us naval programmer um some people say she invented the terms of bugging but that's debatable what she said was it's easier to ask for forgiveness than it is to get permission now she was actually talking about us naval politics but you can take the same sentiment and apply it to solving irregular problems it's easier to ask for forgiveness than it is to get permission so we'll assume that tasks are not going to get each other's weight if they do then we'll do something about it that's quite an unusual thing to say in the science we'd like everything to be in terms of being deterministic to know what's going to happen let's just say things can get each other's weight it's not an issue when we find there's a problem we'll sort it out now that sounds like a little bit of magic sorry i'm carrying on talking here the idea is that these shared objects can be accessed by every task they can all go through them and instead of saying they all have to stop for one to go through we'll let them all go through willy nilly and we'll just see what happens and we'll sort out any problems afterwards so if two tasks conflict with each other if they try and access the same kind of status each other then we need to do something about that what we'll do is we'll we'll stop one of the tasks we'll forget about it we'll cancel it and then we'll run it again later so there was a conflict then these two run at the same time what we're going to do is somehow stop one of the tasks and then run it again later so it's got nothing to complete against that takes a little bit more time but we still got loads of parallelism out most of them and then a bit less after that last one but that's not too bad it's not better than having anything go through one shared computation so that brings up two questions it sounds like magic how can you tell when one task gets in the way of another and how can you cancel a task that's already money you've already drawn half your route onto the board if you try and take that away somehow are you going to get in the way of other tasks by trying to delete it and how do you know when one task is getting in the way of the other if you're just letting them just write to the third state however they like but one solution to this problem is transactional memory the only way is instead of writing to memory we're going to write to a log so instead of all our reads and writes go straight to memory we'll write them down in a log somewhere we'll report what you've read what you've written and what the values were and we'll store that in a separate data structure and then we can tell if two tasks are getting in each other's way they're conflicting by simply comparing the logs search through the logs to see if they're getting each other's way and the great thing is we can cancel the task by simply throwing the log away forgetting about it pretending it never happened and nothing's actually happened to memory all we have to do at the end is actually finish up by writing the log to memory from a disciple on that task to finish up so if we have two tasks these two routes again they're running at the same time looks like they're going to conflict but we don't know that from the start so instead of writing the memory the results into memory we'll store them in some log somewhere and this says what memory access we made and what the values were we can then search that and find that wait a minute these two tasks they're finished on the road but they've actually used the same piece of memory so therefore we're going to have to throw away one of the tasks just forget about it scratch it off throw away its log and let the other one write it's the data it produced to memory and then those tasks get stopped from interfering with each other we can rerun this one later um at some other time and hopefully won't conflict with another route but if the routes don't conflict so these two routes are not likely to get in each other's way then they could do their calculations write to their log and then we can simply finish off by writing the both of memory and these two run in parallel without getting each other's way and therefore they've been simply allowed to go ahead and write to memory at the end with no problems and they've run in parallel so that's great we solved the problem and transactional memory is a real technique applied today it's moving from research as it has as it has been over the last decade or so and it's now being moved into production systems so it's really good to transactional memory support in C, C++, Java we're working on transactional memory support here at Manchester we've written a library for Scarlet which implements transactional memory what's in languages like Clojure and Haskell it tends to be more functional languages which have better support for transactional memory because they control their side effects better so they're easier to control in this sort of way and it's coming out in the next year or so it's going to be a real hard work implementation of transactional memory from Intel in their new Haswell processor Haswell stuff to do with Haskell it's still in the name that's all so your processor will actually understand the concept of redirecting memory to a log rather than writing it straight to memory it's going to use the cache system to achieve that effect so hopefully that'll make it nice and fast nice and simple to use and it'll be in our hardware for real and the hardware guys and to solve this problem is that the people have given us these voltage cores but we're not really sure about how to program them so thankfully they've come back to us for these hardware techniques enabling us to try and program them in the future it's not only about transaction memory there are other interesting ways to reverse computation for example you do things at a semantic mathematical operator level if you know you add an x to a value then you reverse that computation by subtracting x if you know you inserted a node into a graph you can reverse that computation by removing the graph this is what's really great for you people in your own specific domains because you know the the right way to compare the semantics of operators within your domains if you work in graphics you know what graphics operations can be reversed a lot and this is what my research is in i'm trying to find more high-level ways to be intelligent about how you reverse computations about how you find out when things conflict and try to stop the conflicts in the first place transaction memory can be a bit of a blunt tool applied because it's working at the machine word level at the rational memory reason right so i do like to use some of these high-level techniques there's some fantasizing research from the past in the 80s there's a system with an absolutely amazing name the jeffson time warp system and this was a system for reversing computations which are made across a network where you're normally sending packets of messages around they invented a system of anti-messages that when they collide with their original message destroy each other and produce more anti-messages to delete those that were created by those messages and these anti-messages spread throughout the distributed system reversing computation it's actually fantastic and it's got a great name so do we have a solution it sounds like we've got a system there that's going to sort out our irregular problems really well well there are lots of downsides transactional memory can be slow in the past the implementations in software have been prohibitively slow they're getting a lot better but redirecting all these reader write scenarios turns each read write instruction in the processor into hundreds or thousands of instructions it can be a lot of work the hardware is probably extremely limited our hardware implementation is always going to be restricted into how much work it can include buffers of limited size so perhaps the hardware's poor won't really give us much the ability to solve these larger problems and generally perhaps transactional memory isn't the the magic bullet people thought it was my own belief is that we need to apply a lot more knowledge about the problems we're solving in order to apply a similar approach to transactional memory from a higher level and that's where we need the people with the their own domains in your science you know about what sort of operators they can reverse and what they can't and then general optimistic execution we general we said it can be sorry can be wasteful we said that this whole problem started when we ran out of power and here we are doing computation that we simply throw away at the end of it so there's a bit of a contrast there do we want to save power don't we and general it turns out to be a trade-off in that it's okay to waste this amount of work because you can show that overall it produces a solution that's more parallel. Irregular problems are billion-dollar questions they really are they're the kind of problems that Facebook and Google work on all the time computer graphics physical simulations the only thing about irregularity is that before a regular simulation might be less precise because it's constrained to always be as specific as it is with irregular computations you can divide things up further make more precise in a particular area they want to be so a regular simulation can be more precise over a particular area of the country that's a regular problem now we're starting to tackle those we might be better at achieving that sort of thing the web and social graphs now these are a hundred billion dollar questions the kind of data structures that Facebook and Google operate on are very irregular graphs with nodes being added and removed people changing around things changing the whole time and lots of computations wanting to operate on that same data structure at the same time really complicated problems and they're they're regular and those are the some of the big problems these companies face there's also lots of regular problems in machine learning networks and data mining both big problems that's been lots of money research being spent on here it's at Manchester as well so perhaps there's some stuff we do to help you paralyze your problems when you find yourself with a 32 core processor your sequential program's not running very fast anymore thanks very much any questions about my work or a regular parents irregularity is a sort of pathology it's something which goes wrong in problems it's quite hard concept to decide to define what it's saying in general that an algorithm or data structure is regular or irregular people are trying to do that because it's easy to do but generally it's a a set of problems that arise so having shared states generally gives you an irregular problem having an irregular shaped graph often gives you an irregular problem and Google has got in their web graph they've got a massive data structure that doesn't fit on one computer bits of the the computers it's running on are constantly failing they're trying to update it at the same time as they're trying to read stuff it's constantly changing because they've got so many people using it at the same time it gets into an inconsistent state of it not careful um so those are the sort of things which generally build up to be a pathology of problems which are important and regular can be solved using these sort of irregular techniques so you talked about transactional management solutions sort of the things that make you a problem so yeah you've said that a lot of the things but do you know of any big companies who have decided to try and use transactional management as well those larger companies tend to be using a high-level abstraction so Google's produces lots of their own systems they produce a map reducer which I need to try and tackle some of these problems but map reduces quite a regular system everything gets put through in these big batches and they realize the problems with that so it's better to future systems you may want to look up that are really interesting such as percolator or pregul for processing these problems and they've got similar ideas in some of them about optimistic execution trying to solve the problem of little things want to change in a big data structure and how do you handle that so Google and Facebook are doing the idea of they're going to make their own domain specific solutions for their big domains of their specific problems that's because they've got lots of money to do it I've got the experts somebody's trying to write a machine learning algorithm doesn't know anything about parallelism it's going to find these problems as well when they get themselves a 32 rule machine they're trying to run using any kind of proportion of the parallelism available in that machine and they want to but potentially each call is going to get less performance or the best case is going to stay the same we'll get a lot we'll get faster a lot slower than used to be used to your presence getting faster and faster and faster and solving all our problems that's not likely to happen anymore it just it just took years up that you said that you produce a lot of things like Google are dealing with transactional memories and abstraction when you think they almost have the money to put it into hardware which would get rid of them so Google like to use commodity hardware they like to use their own systems on top of that and when Haswell comes out it's possible that within each compute node people like Google might want to use transactional memory but you can't use transaction memory easily across distributed systems it's a much more complicated problem so people often find they like to use a regular parallelism system between compute nodes and within a compute node they solve problems using a regular parallelism because a distributed system is a bit more regular but when you've got shared memory you find more of those pathological cases where you'd like to use the technique for a regular parallelism yeah so in your research you're talking about you spoke about moving towards lifting this concept of transactional reactor layer yeah using more abstract notion of undoing operations yeah it strikes and these operations are going to be more expensive at a higher level um do you think you're just removing the expense upwards? I think that'll be a lot cheaper because of when you do things on a machine word level you've got a lot of stuff in there you're not actually interested in so temporary variables you wrote to a temporary data structure that gets all logged stuff like that you don't need if you can just record the signal information log by inserting a node here you need to remove it afterwards then that's very easy to log all you have to do is put one entry in the log and then the rare cases when things get aborted if you have to undo them then we can then worry about the cost of that operation but typically we think things aren't going to conflict when you do lesagro and circuit routing examples the routes don't often conflict it's just they may always conflict so you'd like to have as little information stuck in the log as possible it's almost like you're writing it forget about it so i insert a node here remember that for laser that's a lot easier than instrumenting every single read and write new processor does so it should be faster if we do a high level semantic so it's about the common case yeah we'd like to be on a critical path that's easy and it matches up the whole other philosophy that we'd like to do the easy way forget about the problems when we get problems then we'll deal with an expensive case on the problem because if you're if you're undoing an operation you've already ruined your your cash you know you've already got me over you're already starting again so it doesn't matter if you expect it then particularly thank you any other questions? Thanks so much Chris


Service men and women overseas that always has a family that's back home, wondering how things will turn out for them where they're at. We always pray for their safe return. It doesn't always work out that way. But we do want to thank her for her service and our thoughts and prayers do go out to her family. And while a little comfort it may be, her family needs to know that she was well liked, well lived in the community and everybody really respected her for what she did and her service to the country. Thank you.