Good afternoon, everyone. I think we'll get underway. I've been told I'm late, and I think I am. So while you finish your lunch, we'll begin the program. Welcome. Thank you for joining us today. My name is Tom Cardamone. I'm the managing director at Global Financial Integrity. And for the next day and a half, we'll be talking about illicit financial flows and global development. And I think this discussion has come at a perfect time, given that the SDGs will be formally approved at the UN at the end of the week. And these issues, as we all know, fit exactly into that discussion. Illicit financial flows, the most damaging economic problem facing the developing world, I think, puts a very fine and exact point on it. Over the next two days, we're going to hear from a number of experts on various aspects of this topic. Raymond Baker is going to lead us off in a few moments to provide some history of this topic and where we've come and where we see ourselves going. Professor Thomas Pogge from Yale, a GFI board member, is going to take a philosophical look at the issue. And maybe challenge some of the conventional wisdom we have about global development issues. Huguette LaBelle, a name many of you I'm sure know, will provide a broader view of the IFF issue. She is also a GFI board member. We're very happy to have her here today. Tomorrow, Jean Ross, a program officer from the Ford Foundation, will lead us off in the morning. She'll talk about accountable government and building the importance of accountable governance and building strong democracies. And interspersed over the next day and a half, we're going to look at specific data issues underlying the research that has driven so much of the advocacy we've done. Devkar, our chief economist, will be talking about that. We're going to talk about trade-based money laundering. We're also going to look at some emerging illicit flows issues such as wildlife trafficking. And then in the afternoon yesterday, we're going to do a deeper dive and examine illicit flows in the context of five specific countries, India, Mexico, Russia, the Philippines, and Brazil. I think numerous thanks are due. Several people getting this book published, which has been nine years in the making, as well as this conference today. Christie Cloud and Joe Spangers from our staff just did a tremendous job and a tremendous amount of work in the editing process. I know one of the authors was late in getting his draft to them, so I apologize for that. Channing May and Lucy Azarian have done Yeoman's work putting this event together. And we thank them as well. All you will hear from all of the authors, save for one Eric Solheim, who was chair of the Development Assistance Committee at the OECD. And prior to that, he was the Norwegian Development Minister, was unable to be with us today and tomorrow due to scheduling conflict. But he wanted me to send his warm greetings to everyone. A couple of housekeeping items before we get underway. We will go to four o'clock this afternoon, and then there will be a two hour reception following that at the fourth estate room. And I'm not quite sure where that is, but when I find out, I'll let you know. It's that way I'm being told. So out the door and then to your right. Restrooms are out the door until your left and then another left. Tomorrow we'll get underway at 8.30. Registration started at 8.30, formal program at 9.00. And we will go through concluding about 5 o'clock. Before I introduce Raymond Baker, I just want to take a few minutes to put this book and this conference into some context. Both the book and the conference are a capstone of a partnership GFI began with the Ford Foundation in 2007. And it's been a tremendously successful collaboration with Ford over the intervening years given the impact the issue of illicit flows has had on international development policy. After Raymond published his book, Capitalism's Achilles Heal in 2005, he launched GFI the following summer, June of 2006. And just a few months after that, we're fortunate enough to meet Leonardo Berlamaqui, who was a program officer at Ford at the time. Leonardo was here. If you don't know him, introduce yourself. And if you haven't said hello yet, certainly make a point to do that. We say fortunate, not just because Ford was a potential funder and we were a new NGO trying to get off the ground, but the fact that Leonardo was an economist and he was from an emerging market country. And I think the combination of those two things gave him a unique perspective about what we were talking about. Raymond and I had met with numerous development experts prior to meeting Leonardo. And while the conversations were rich and informative in both directions, we got the feeling that people weren't really quite sure what to do with the information we were bringing to them. Leonardo immediately grasped what we were talking about, sort of an intuitive sort of got it right from the very start. He knew what we were describing. He knew how it fit and the relationship took off from there. The first grant we got from Ford was for a conference much like this in June of 2007. And I was actually able to find the agenda from that conference. And the first thing that shocked me was that we started at 8.15 in the morning. So we were very eager to get the issue in front of people. I'm glad we started at noon time today. But looking back on that event and a couple of the panel discussions are, I think, really informative. The first one was called what is known about illicit financial flows. So we were very, at the very, very beginning of this process. We were, at that point, we were 18 months before our first annual report on the volume of illicit flows for all developing countries. Today, of course, we know quite a bit about illicit financial flows. They're valued at about $1 trillion per year. About three quarters of that is due to transfer, sorry, trade misinvoicing. We also know that even in the poorest of poorer countries, where the volumes of illicit flows tend to be relatively small compared to some of the other countries, Mexico and India and others, they still have a very corrosive impact on those economies. And we also know that the volume of illicit flows is greater than all development aid and foreign direct investment going in. So you really get a clear understanding of the countervailing economic impact these have on developing economies. Another panel was titled, Including Illicit Financial Flows in the Development Equation, which was a mantra GFI had early on. What's the total amount of money going into these economies and what's the total amount of money coming out? And the illicit amount of money flowing out had never really been considered prior to this. There was talk about capital flight, but that was generally thought to be having to do with illicit money. We're talking about the illicit component, of course. Now, with illicit flows being a key component of what is now known as the Addis Ababa Action Agenda and the SDGs and the great amount of discussion around the connection between illicit flows and domestic resource mobilization, we can clearly see that IFFs are now a part of the overall development equation. So what we talked about in 2007 has now become the conventional wisdom, which we don't see too often in the policy sphere in such a short amount of time. And I think the fact that it is a conventional wisdom is due in no small part to the support Ford has given GFI over the years and the faith Leonardo in particular had in GFI in those early days. And so I would like all of you to join me in thanking the Ford Foundation and Leonardo Burlameque for their longtime support. Now, let's get underway, shall we? Our first speaker needs no introduction, but I'm going to give a short one anyway. I don't think it would be overstating the point to say that if we're not for Raymond Baker, none of us would be in this room today. He has been thinking about writing about and working on this issue longer than anyone else. Nine years as president of GFI, 10 years researching and writing capitalism's Achilles heel prior to that and decades thinking about it before he ever put pen to paper. And given Raymond's long experience conducting business around the globe, he developed a unique perspective on the way global trade works or perhaps doesn't work. And this coupled with his innate sense of fairness due to all people I think has led us to this place. And of course his boundless energy and enthusiasm and optimism have certainly helped propel this issue onto the global agenda. Please welcome Raymond Baker. Thank you, Tom. And thank you, Tom and the GFI staff for producing this piece of work. And Leonardo, again, thank you. You did the heavy lifting on the funding side. We perhaps did the heavy lifting on the analytical and the writing side, but we wouldn't be here if it wasn't for you. I'm going to begin my remarks in 2006. October 2006, Tom Cardamone joined me as managing director of GFI. He was the first person that joined me, and he was managing director right from the beginning. We fairly early on had a conversation, a lengthy conversation, about what do we call this stuff that we're talking about.  But I knew that we couldn't call this dirty money because that expression makes people shrink from the subject matter, makes them afraid of the subject matter. Don't want to go there and don't want to talk about that. So what do we call this phenomenon? Came back from Europe a little bit or something, but never mind. What do we call this stuff that we are addressing? And we thought about all sorts of, do we call it corruption? No. There are a lot of elements of this that don't stem from the flow of corrupt money. Do we call it flight capital? No, that tends to put the emphasis entirely on the developing countries. People want to take their money out of those developing countries. And we didn't want to do that. Do we call it black money? No, we're not going to go there. What do we call this phenomenon that we're dealing with? And after going through a whole lot of possibilities, illegal flight capital, the corrosive effects of corruption, what have you, after going through a whole lot of possibilities, we decided to use the words illicit financial flows. This was a decision that Tom and I made. And we did that because each of those three words contributes to what we're trying to say. The word illicit is just a little bit weaker than the word illegal. So we wouldn't offend too many lawyers if we use the word illicit. Financial makes it very clear that we're talking about money, not the product of drugs or human trafficking or elephant or toss or what have you. And the word flows is perhaps the most important because it clearly identifies that we're talking about the origin, the path, and the destination of money as it goes through the financial system. So illicit financial flows was what we decided to call this phenomenon. Among the very earliest people that we employed was Dev Carr. After 32 years at the IMF, Dev agreed to join us and look into this phenomenon. I think Dev had a great deal of skepticism as to what we were doing and whether or not it was possible to examine this subject matter.  Anything except what I did. Dev said, OK, he studied the literature. He realized that the economist Bugwati had been using this kind of information, this kind of analysis four decades ago, applied to particular countries. So the question was, why can't we take this same methodology and apply it to an analysis of all developing countries, which is what we did. GFI's contribution was not the methodology per se, but taking that methodology and applying it to all developing countries. We produced the first analysis and have produced an annual analysis ever since then. With Leonardo's support, we not only produced a global analysis, but as you can see in the book, produced analyses of a number of individual countries. And we continue to do that, do annual analyses, country analyses, and regional analyses of these phenomenon. As Tom said, our first goal was to get the issue of illicit financial flows on the table. And particularly with Tom's very, very hard work over the past 15 months or so, we've got that terminology into the Addis Ababa documents and into the sustainable development goals. Now the job shifts. Now the task is to devote much more of our effort to curtailing illicit financial flows, is getting into the hard work of saying, OK, it's on the table. Now what do we do to curtail this phenomenon and leave more resources in developing countries for their own progress? So I hope that you will share your thoughts and your views with us over the next day and a half and leave us with the ideas that we can take to figure out together with your support how to make this phenomenon curtailed for the advantage of developing countries. Thank you. Thank you very much, Raymond. Thomas Pogge is a person of many talents, along with being a GFI board member. He's an expert in issues related to global development, the environment, and human rights. And is the foremost thinker and writer on the nexus of those three issues. Thomas is director of the Global Justice Program at Yale University and also the Leitner Professor of Philosophy and International Affairs, also at Yale. And while I welcome all of you to read the book we published today, I especially want to encourage you to read Thomas' chapter. It gives quite a bit of food for thought, as I said earlier, about some of the conventional wisdom on the issues of global development. Please welcome Thomas Pogge. Thank you very much. And I will basically just run through a little bit of the background that will make clear I hope why this is such an important issue. Is this working? The lower one? OK, good. So actually it was one slide before. I think it just, you see, when a philosopher tries to do something in the real world, this is what happens. All right. Terrible. It will confirm your worst prejudice. So here we go. We hadn't practiced this though, I have to say, in my defense. So the problem of deprivation in the world is a problem that for quite a number of years we thought we were in a position to solve. And so very recently, I've collected here a few quotes. Very recently, the Dutch minister said that we are now, for the first time in human history, we are able to solve the problem of deprivation, hunger, need, and so forth. But there are a whole number of quotes which say for the first time in history and they go all the way back about 150 some years. So the thing is we have talked about it a good bit of time, but we haven't actually achieved a great deal. Now I'm pointing in the right direction. OK. So here is the state of the world according to the official numbers as they are now. We have a large number of people undernourished, suffering various other deprivations, lack of access to medicines, lack of safe drinking water, lack of adequate shelter. Gosh, this thing is really temperamental. And anyway, I leave these figures. Roughly half the world's people are suffering from one major deprivation or another, things that are relevant, certainly, to human rights fulfillment. And here we have on the next slide the people who die prematurely. And we still have today roughly one third of all people dying prematurely from poverty-related causes. This is a conservative estimate which I made by just looking at all the causes of death and singling out those which are very heavily concentrated in the poor countries. Then you can be pretty sure that they are poverty-related. So for example, nobody dies of diarrhea in the United States or close to nobody in Europe, in Australia, and so on. All these deaths are concentrated among the poor, so I count them as poverty-related. Obviously, there are people who die in the developing countries from diseases that we know only too well, like heart disease and diabetes and so forth. And they often die much sooner than we do because they have lousy medical care and they also often have a much more challenging environment. The immune systems are compromised and so forth. But I've not counted a single one of those deaths in these statistics. So these are just causes of death that are clearly poverty-related. Roughly 50,000 a day, roughly 18 million a year over the last 25-year period, which is also the period of the MDGs. And if you put this in perspective and compare it with government-sponsored violence deaths, you find that while 450 million people died from poverty-related causes in just 25 years, government-sponsored violence deaths were 200 million roughly in the entire 20th century. So four times as long a period, less than half the number of deaths. I'm not saying that they are not a problem. They are a very big problem. The Second World War is obviously a humongous catastrophe. But poverty is an even greater problem in terms of the human misery that it causes. Except that for us, it's a problem that we often don't perceive as very serious because we are not directly affected by it. Now, the first thing to say about why this is persisting, why do we still have so many poor people when the means to eradicate this severe life-threatening poverty have obviously been in our hands for many decades, if not one or two centuries? Well, the answer is in the first instance, the distribution of income and wealth in the world. So this is the global income distribution. I've put the divided humanity into five segments. The top 5% take about 43% of global income. The next 20% take the same amount again. And then you have very tiny slices left over for the bottom two quarters. And in particular, the bottom quarter has almost nothing. The bottom half of humanity has just it had over 4% of global household income. And just to put it in perspective, if they had 6% or 7%, all these deprivations that I showed you could be history. So it's not the case that we would have to sacrifice enormous amounts of our treasure to make poverty go away. Theoretically, 2% or 3% of global household income would be sufficient to solve the problem. So here is the global wealth distribution. We are celebrating this year, in fact, this week, more or less, the end of the MDGs, the Millennium Development Goals. And everybody other than me will tell you that there were spectacular success and that we have really done a lot to lift people out of poverty and so on. I will tell you that we have done no better than we've done in prior decades. It's made no difference. Yes, global income has increased. The global average income has increased. And so poverty has improved a little bit. The poor have dissipated. But no more than in previous decades, also nothing particularly dramatic has happened with regard to poverty. One thing that will also happen in 2015, and you will not see that in any newspaper, is that for the first time, we'll have the top 1% of the human population have more than half the wealth. In the moment, they have 49%. But in the next months, that will cross the 50% mark. And so we'll have 50% going to the top 1% in terms of the wealth and the other 99%, including myself, sharing the other half of global wealth. This is again, oh my god. Now I wanted you to guess something and now it's already been. This is really, I don't know why this is. Maybe because you're sitting behind the column. So let's look at the bottom, the same global wealth distribution. Look at the bottom and you see here that the bottom half of the human population have only 0.6% of global wealth. So 99.4% goes to the top half, 0.6% goes to the bottom half. And what I wanted to ask you is, how many people do we need to take from the top? What percentage of the population from the top to balance out the wealth of the bottom half? This 0.6%. But since you've already seen the answer, I'll give it to you. It's, yeah, this is, it, all right. Now that's technology in action. All right, so it's 0.0000009% of the world's population that you need to make up as much wealth as the bottom half, namely 66 individuals. And that's according to the latest Forbes list of billionaires. So 66 people have as much wealth as the bottom half of the human population. Next. Now, the objection that many of you will make having been good students of the official propaganda about the millennium development goals is, but haven't we seen progress? Hasn't there been fantastic progress? And well, yes, there has been some progress. Can you click next? Because we need to go. Now there should be a bottom half of that. Well, maybe not. Anyway, so the first thing to be said about the progress is that the progress, a lot of the progress is cosmetics. There was a great deal of manipulation of numbers. Again and again and again, our friends at the United Nations and their agencies have changed their definitions, have changed their methodologies. So the World Bank, for example, which is the official keeper of the poverty numbers, they started with $1 a day. Then they went to $1 a day. Then they went to $1.25 a day. So they raised the poverty and it's nice. It's good, right? No, they didn't. Because the dollar was a $1985. The $1.08 was a $1993. And the $1.25, which they're now using, is a $2005. So they lowered the poverty line quite dramatically. Look up the inflation in the United States and you'll see how they lowered it. They lowered it with the effect, I'm not saying intention, but with the effect of creating a better looking poverty trend. As it happens at the very, very bottom, poverty fell faster than it fell at higher levels. And so each time they changed the methodology, they produced a better looking trend. Similarly, with the hunger numbers, as important as can be for judging development and how it works. The left side gives you the official hunger numbers as published each year by the Food and Agriculture Organization of the United Nations until 2011. So each year they come out with a book. It's called Sophie or State of Food in Security. And they published the latest number. Then in 2012, three years before the end of the Millennium Development Goal period, the good people at the FAO said, we will change our methodology. We will use a new methodology. And they called it the improved methodology so that you get the point. And that improved methodology, guess what, produced a different set of numbers with exactly the opposite direction. So that dramatic climb of the hunger numbers above a billion, which you all remember from 2009. It was much discussed, including in the Economist magazine. The FAO itself hung bedsheets out of their windows in Rome and said, we are mad as hell more than a billion people hungry. Never happened. Well, actually it did happen, but it happened in 1990. And since then, the numbers have been steadily decreasing, not withstanding, I have you know, the fact that of course food prices doubled as we all remember from the Arab Spring and so on. Everybody suffered from that except the poor. The poor apparently never noticed that food prices doubled. And their numbers steadily continued to decline throughout this period. As you can hear from my tone, I don't believe these numbers. And the definition that the World Bank, that the food and agriculture organization is giving of hunger is bizarre, right? They look at dietary intake regardless of whether somebody has parasites or absorption problems or diseases as many, many people in the developing countries have. Dietary intake, only energy, they disregard lack of vitamins, minerals, proteins, anything else. If you have enough Coca-Cola, you are fine. You're well nourished. If it's the sugary type, not the no calorie type. So that's the first thing. The second thing is they say that you need enough calories for a sedentary lifestyle, minimal requirements for sedentary lifestyle. So if you happen to work in the developing countries, many, many people do, hard physical labor, that doesn't matter. You still get only the 1800 calories. And they say that it has to be more than a year that you are below that threshold in order for you to count, which again is insane because we all know that children, for example, suffer permanent health damage from much shorter periods of hunger. In any case, this is the new methodology of the FAO and they achieved its purpose. Namely, we can now say that we almost, not quite but almost achieved the hunger goal of the Millennium Development Goals. Next. Now, the thing then is we have global income polarization. We have the poor indeed benefiting some, but benefiting less than they would have benefited if they had participated proportionately in global economic growth. So that's the first thing. And the second thing is that the entire MDG exercise is misleading, is making us think that the morally crucial thing is the comparison with an earlier period. And that is the fundamental mistake. So whether they are right or not about the trend, the important thing is that we should compare the status quo with what would now be possible. So to make that vivid, think of slavery, let's say, and let's say somebody says in 1840 that slavery isn't such a big deal because it's gotten better and better, right? Since 1815, in the last 25 years, we've had a significant decline in whippings. Rape of girls, much less common now. The splitting apart of families with some being sold in one direction, some in the other. It doesn't happen as often anymore and they're actually also better fed. So what are you worried about slavery for, right? Our answer very reasonably would be it doesn't matter that it was even worse in 1815. Slavery is terrible and it can be abolished now and it should be abolished now. And I say no more and no less about poverty. It can be abolished now, it should be abolished now, regardless of whether it was even worse in 1990 or not. Next please. So looking at the history then, it is true as many people say poverty has always been with us and so on, there's always been a lot of poverty but there is something new and the new thing is that poverty today is avoidable and very easily avoidable. And so if you do want to make the historical comparison, I think you have to say that poverty today is much worse from a moral point of view because it is so easily avoidable. There's never been more avoidable poverty in the world and there's probably in terms of absolute magnitude never been more poverty in the world even if in percentage terms it may be less than it was before. Next please. Now what is the explanation? Why is that happening? Why is inequality increasing? I think there is one very simple explanation. That's not the whole explanation, it's all more complicated but one element in the explanation is something that we can broadly refer to as lobbying. This is a very obvious thing. Everybody knows that the rules of the game, the rules of a society, the rules of the global economy and so on have distributive effects depending on what the rules are. Some groups do better, other groups do worse. And anybody who knows that will say well maybe I can influence the rules a little bit in my own favor, right? That's a totally natural human instinct and so you try to influence the rules and with globalization upon us of course people have taken dramatic action to try to influence the rules including the global rules and big corporations, rich people, important governments and so on, they try very hard to make the rules favorable to themselves. Nobody hates the poor, there's no conspiracy or anything but people do love themselves and because they love themselves they try to make the rules more favorable to themselves and the foreseeable result of this sort of effort in lobbying is that those people who are in a position to lobby who can lobby effectively will tend to do better, will tend to increase their share of global income and global wealth and people who are in no position to lobby will correspondingly have less and so inequality increases as Piketty has notably observed in his latest book. Next please. Now one way in which you can influence the rules is in making them more favorable so that you pay less taxes for example and that's, I mean taxes are one motivator, one important motivator for these illicit financial flows and so this whole nexus of illicit financial flows that we will hear be discussing today and tomorrow is one example, one of many examples of rules that are both at the global level and at the national level that drive that inequality spiral that are beneficial to rich corporations and individuals and thereby allow them to increase their share of global income and wealth at the expense of ordinary people and especially the poor.  Can you go back one more time? Yeah, so we have just the basic magnitudes, we'll talk about that quite a bit. We have a trillion a year as was already pointed out, 6.6 trillion in the last decade that we have figures for and that's a very, very substantial proportion of the gross national products of developing countries in particular in Africa where it's 5.5%. This is not negligible, this is a massive amount of money and if you compare it with development eight, 0.127, $127 billion a year in the year 2012 which is the same year to which this one trillion figure belongs. Can you now go to the next? Yeah, and for individuals, individuals often store their money abroad, that's not a big problem in the United States. The United States people typically declare their income have relatively little money abroad. It's a much bigger problem in Europe with about 8% of private wealth lying abroad and often in other European countries such as Luxembourg or Liechtenstein or something but in Latin America, in Africa and the Middle East these are much, much larger amounts. So once again, virtually none of the people who have their money abroad pay taxes on that money and again, there is an enormous amount of revenues potentially that poor countries could harvest for the purpose of development or put it conversely because these revenues are lost to the treasuries, there is less development than there could be less poverty eradication than there could be last slide please. Yeah, so this one is the last slide and so this is just calculating the tax loss. So of that one trillion dollars in illicit financial outflows, they are flowing out of the economy which of course is harmful because if they remained all sorts of multiplier effects would kick in and the economy would thrive much more but there is an associated tax loss as well because as I said very often these illicit financial flows are tax motivated and Christian Aid estimates that the loss to the developing countries is in the order of 160 billion dollars a year in tax revenues and that if that money was available to allocate according to current spending patterns the amount going into health services could save the lives of 350,000 children under the age of five every year. So that's a very massive improvement and don't say that they will spend it on corruption and on cars and whatever because this is the existing spending pattern. So it is already taken account of the fact that resources in these countries are not always ideally allocated and of course we could do better and we should presser poor countries to do better in allocating their tax revenues but even with the existing allocation it would make an enormous difference. So the topic is important if human rights are important if the fact that poverty persists is important and I think nothing or very little can really compete in importance with the enormous problem of poverty that I've here displayed to you, thank you. Okay, I'm taking a few questions. Your presentation is magnificent, really appreciate it. I was wondering if the PowerPoint presentation can be made available on request. No secrets here. Okay, thank you. Back there. Yes, could you tell us what you know about how this money is moved out of the third world? The less developed countries to be deposited and hidden elsewhere and who these intermediaries are that move the money? Yeah, so there are many different pathways and with the expertise in the room you shouldn't really want a philosopher to explain this to you but there are many different ways but one very important way is through misinvoicing where you have trade taking place between two related parties, two parties that are friendly with each other. They're exchanging goods and money at a price that is not the world market price and then the side payment is made in some cases so I under invoice you, I send you something at a cheaper price and I say just put the rest into my Swiss account so that would be one way in which it's done. Another thing that's often done is use tax havens. So if you have trade between two entities that are affiliates of the same company instead of trading directly with each other they trade via a third entity that is located in a tax haven also affiliated with the same company and then they can do the same thing. They can essentially, country A, exports to the tax haven at a low price which means they make no profit or very little profit. Then from the tax haven it gets exported to the receiving country at a high price which means that the last country is buying at a high price and also making little profit and the profit then accumulates in the tax haven country where it attracts no taxes. So that's another way of, but there are countless different ways in which money flows and all of them of course, motivated by the desire to make a profit for oneself often to avoid taxes but we'll hear in the next two days we'll hear a lot more from more competent people about this topic. There was also one person next table. Yeah, it doesn't matter, the order doesn't matter. Just to keep it closer to the philosophical at this moment because I'm trying to combine what Raymond said in his earlier presentation about how one has to recalibrate the language from corruption to illegal to illicit because I almost hear a concession in what is being said that it may not be illegal although I think that it's unethical and there may be strong elements of immorality in what it is done. The question is, can you fight what is in the moral domain? And if so, from your philosophical point how do we take this fight forward if we are to indeed mitigate poverty in the way with the money that you have identified gets lost? I think those of us who are interested come from countries who suffer from it have very little grasp on it because the immoral has been made legal and it happens in a place like Washington at the hand of lobbyists and so forth. So would you say that what is needed in the world is a big moral movement against illicit financial flows? Do you think that there's enough tangibility to take it up at the level of legality? How do we fight this? Yeah, so first of all, you're completely right that this is not always illegal. It's often not illegal and of course people take care to change the laws, make the laws in such a way that these shenanigans are actually permissible and very often you can by bribing legislators in poor countries, for example, or presidents there you can make something legal that really shouldn't be legal. What is I think an important meaning element in the word illicit is that it's surreptitious, that it's under the table, it's not something that people want to know. So for example, we have in the moment when tax authorities look at the tax return of a big global company, they look at the consolidated return, they look at their profits and losses all over the world. There's no information about where exactly these profits and losses accrued. Now if we had that information, if companies were required to file this information, things would look very, very strange, right? You have 6,000 employees in Zambia, you have 60,000 employees in India, you have one employee in the Bahamas and 60% of your profit is in the Bahamas. That must be an incredible guy. How is he doing it? I want to hire him, you know? So that's the, if this were transparent, right? It would be very difficult to make it stand, to make it continue. And so transparency here is the first step in the moral campaign, make it transparent. And then when you say we need a big moral campaign, I think I heard a slight skepticism in your voice about whether moral campaigns can succeed, I'm skeptical too. What morality can do is it can highlight issues and it can look for potentially motivated allies. So what we have done, I think where GFI was really instrumental in the last 10 years, was in putting this issue on the table and also nagging a number of rich country governments about the money that they lose, right? For example, sort of tucking on the sleeves of the Germans and saying, you know, that you've got a lot of money sitting in Switzerland, which is not paying any taxes and is that really fair and so on? And if you make a bit of a stink about it, other Germans get upset and they say, well, why should my dentist not pay taxes on her money when I pay taxes and so forth? So now there is a movement that was partly created by GFI about getting more tax honesty going in the European Union in the rich countries. And that now is something that we can build on with regard to the developing countries as well, right? Obviously there's gonna be resistance because countries within Europe will be more willing to reciprocate with each other because if I stop covering your tax cheats, you will stop covering my tax cheats, but very few tax cheats of European countries have their money in Zambia, of course. And so Zambia cannot reciprocate a whole lot for favors done to them by the European Union. That's where morality comes in. That's where we have to say, if you do this, if you really want more transparency and more honest tax accounting of corporations and individuals, make sure that this is not confined just to the rich countries, the poor countries need it even more and they must be included in that. And that demand is difficult to resist. So I think we have a wedge with which we can actually make progress on that issue. So there's a gentleman there. Hello, good afternoon. My name is Frank Vogel. I just wanna go back a bit to the early part of what you were saying. I was under the impression, obviously false. That a lot of the improvement in the data on poverty and so on was due to the great success of China over the last 30 odd years. And you haven't mentioned China at all. And your Christian aid data did not include China. How does this distort the picture? We know very little, I think, relatively speaking, purely out of relative terms, about illicit flows from China or through China or around China. And how do you put what has been happening in China over those last 30 years, which I think is different to your general picture? And how do you put that in terms of the fundamental core issues of illicit flows that we're discussing here today? Good, thank you. So the first thing is China has indeed had a tremendous success in poverty eradication in the period, especially after Deng Xia Ping's reforms. So the late 80s and the 90s were fantastically successful. That led to something very interesting. In September 2000, all the governments of the world came together in New York for that Millennium General Assembly meeting, and they adopted the Millennium Declaration, where they said they would have poverty by 2015 and so on and so forth. At that time, as you can read in the Millennium Declaration, all the goals were formulated in terms of from now to 2015. But then when the Millennium Development Goals were published a few months later, suddenly it said 1990 is the baseline. They backdated the baseline to 1990, and that had two reasons. One reason was that you lengthened the period and because you're now defining it as a proportion, the proportion of hungry people, population growth has a longer time to act, and that will inflate the denominator and reduce the work that you need to do in the numerator. But the second thing is that people obviously said, why should China's success go to waste? These guys worked so hard. Let's include that in our goal. And then, but something really funny happened. Kofi Anan in 2001, he published his first report on how are we doing with the MDGs, and that went up to 1999, for which we had figures at that time. And he proudly announced that in the world's most populous region, East Asia and the Pacific, the poverty goal had already been achieved. In 1999, more than a year before it was even announced. So let no one say that we are not working hard. Now, the second thing is about the problem of illicit financial outflows from China. Again, there are others much better able to answer that question. But China is at the top of the list.  And people, officials, and people who are entrepreneurs with friendly ties to the government, they massively, massively got money out of the country and used the kind of trick, the one that I described in the answer to you under invoicing and then trying to get side payments into foreign accounts and so on. And as you may know, there's now with Xi Jinping in power, there's an enormous anti-corruption effort underway and people are trying to hunt down all the people who took enormous amounts of money out of the country. In China itself, I was just there over the summer several times, they have the wonderful phrase, the naked official. So a naked official is somebody who has already sent their entire family abroad. They're living abroad, have nice real estate and so on and so forth. And it's almost always a he. He is still at the trough, still trying to get some more money, but he has a suitcase packed and is sort of on the verge of leaving, could leave any time within five minutes if the situation requires. So that's the naked official. And there are a ton of those. And Xi Jinping is apparently making quite a serious effort to get people extradited and to get some of the money back. But I mean, experience teaches that the amount of money that you recover is a tiny fraction of what actually flowed out. Good. Any other? Yeah. Time for one. OK. I just got a 10 minute sign, so I think we have eight more minutes. Yeah, OK. Hi, thanks, Dr. Poghi. A question, I guess a historical or a philosophical question, I'm curious about your definition of avoidable poverty. What has changed? Why is it more avoidable now? Is it the technological advances? I wonder a little bit about, was it avoidable in feudal times just by the transfer of bread from the wealthy to the serfs? I guess I'm just curious, what is it about now that makes it more avoidable? Yeah, so I would say that if you take something like 1830, for example, it would have been very difficult, even with all the wealth in the world and all the income-generating capacity in the world. It would have been very, very difficult, first of all, logistically and administratively, to reach the far-flung corners of the earth, everywhere in Africa, everywhere in Asia, and so on, to actually reach poor people and improve their condition. And today, we have fantastic technological and administrative capabilities, just from computers, transportation, and so on and so forth. And so I would say that's one important way of talking about degrees of avoidability, which is what you're driving at, I think. I think the amount of poverty we could have avoided in 1830 would have been maybe half the poverty that existed then, whereas today we can pretty easily avoid pretty much all the poverty that is now in existence. There are obviously tiny exceptions, such as North Korea would be a clear-cut exception, where it's very difficult to get into the country and do something about it. You'd have to negotiate with the regime and so on. If the regime doesn't cooperate, it would be very difficult to do something about poverty there. But by and large, it would not only be possible with administrative, technological, and economic capacities, but it would be relatively cheap. So the political resistance would be relatively small. So we are doing things that pretty easily the American people can be won over to. So for example, we invaded Iraq at some point. And we went in there. This was a trillion-dollar thing. It was a pretty expensive thing. And the president said, this is a good idea. They bought some yellow cake from Niger or something, and so we better get in there. And so people said, yeah, yeah, that's a good idea. Let's just go. And so I think the president today could relatively easily, as an initiative, say, why don't we end hunger? Roosevelt promised it in the 1940s. Let's just do it. And with the same sort of effort that we made in Iraq or in Vietnam or something, we could make an effort to eradicate hunger and deprivation. And we could succeed. We could bring our allies on board. The Europeans would be happy companions if we took the initiative. So in that sense, it doesn't take a miracle, a political miracle. It just takes a little bit of political initiative and will. And we could do it. It doesn't have to come from above. It could also come from below. So if there were a substantial number of people in this country who wanted to do this and wanted to push for the reforms necessary to achieve it, including illicit financial flows reforms, I think politicians would easily be found who would then put themselves at the head of the movement and take that on as a responsibility. So in that sense, I think it is reasonably easily avoidable. It's really seriously possible, not just sort of theoretically possible. Thank you very much, Sotomayor. You touched briefly on the issue of lobbying, but didn't really elaborate on that very much. And obviously, it's what perpetuates the status quo in a way. I was wondering if you could give us some more thoughts on that and how it fits in your vision. It's something that you see as necessary, you will, or something that should be changed? Or if it has to be changed in what direction? Yeah, it should certainly be changed.  And we have now got an election campaign upon us, and we once again have politicians running around searching for money. And the money that they need is in the hundreds of millions of dollars for a presidential campaign, billions of dollars. The Koch brothers have said they would give $900 million. A conservative estimate of how much the next election will cost is in the $6 billion range, but it could easily be a little bit more than that. So these are very large amounts of money. And of course, the people who give the money in almost all cases give the money because they expect something for it in return. So just to give you maybe one example, which is quite interesting, the interesting example was analyzed quite carefully, and is related to our topic. And that's the American Job Creations Act of 2004, a wonderful example. And there we know which companies lobbied for the act because we have data from their annual reports about how much money they spent on trying to get that act passed. And the act, by the way, for those of you who don't know, was a tax holiday. So it was a tax holiday which allowed American companies for a limited period of time to bring money that they had accumulated in tax havens into the United States at a discount. The usual tax rate is 35%. And here, they could bring it in at five and a quarter, an 85% discount. And so a number of companies that had large amounts sitting in tax havens, they said, this is great. Why don't we have this tax holiday? And they called the American Jobs Creation Act and the act passed. And we know to the penny how much each of these companies brought in and how much money they saved. And to make a long story short, for every $1 that these companies invested in lobbying, they got $221 in tax savings. So I don't know how you invest your money, but for me, this would be a very, very lucrative return. So this is commonplace in the lobbying world, right? Because for the Congresspeople, this is not a big deal. It's not their money. It's the money of the taxpayers that they are giving away. And so they don't mind giving $221 of public money for $1 that they actually get into their own little hands, in which they can then spend on the next election campaign. Now, this happens, as I said, all the time. And one last thing that I want to say about it is that this was a domestic thing with international implications, because, of course, it creates and supports the incentive to get money out into tax havens if you can then, at a low rate, get it back into the United States. But what happened in the last 20 years was, of course, that globalization created a whole new supranational architecture of institutional arrangements that are tremendously important distributionally for everything that happens in the world today, that reaches deep into the inner lives of national societies. And this global institutional architecture was very, very heavily influenced by lobbying. Anybody who could lobby the US government, which is both the strongest and the most venal of all the major governments in the world, anybody who had an opportunity to lobby the US government had a say in how these institutional arrangements took shape and now benefits from it. And what we need to do is try to prevent that through more transparency, more democracy, and getting the ordinary citizens both of this country and other countries, giving them more of an understanding of what goes on and more of an opportunity to weigh in themselves, to have their voices and interests considered. OK, thank you. Thank you, Thomas, a sobering analysis to say the least. And apparently, there are no laurels for the international community to rest on. The SDGs are a new opportunity to do the hard and heavy lift that needs to get done. And I think Thomas' presentation sort of sets the context for the rest of our event, the rest of our agenda, and for our first panel. I'd like to introduce or call up to the podium John Kassara, Robert Sibersky, and Dr. Lester Meyers to talk about trade-based money laundering.


Hi I'm Ewan Ferguson, Chief Officer of CFA. We're a week out from Christmas now and the first really hot spell is coming up the next couple of days. Thursday this week they're forecasting many parts of the state will get up close or up to 40 degrees and then on Friday we'll also have a very hot day, probably 40 in some places up around Mildura and a fair bit of wind. So Thursday, Friday we're going to see a couple of days of elevated fire danger the first really significant days for this fire season. We need to remember that north of divide it's extremely dry it's been drying for the last 10 weeks fire restrictions are enforced in many places throughout Victoria and especially north of divide and in the Wimmera and parts of the the Grappins part of the state. We've seen the launch of the two air cranes, the two air cranes assigned to Victoria, Malcolm and Delilah. These air cranes each carry over 7,000 litres of water they'll be operational from tomorrow. They join a growing fleet of firefighting aircraft for this fire season there'll be 42 firefighting aircraft that's about 24 rotary wing and 18 fixed wing aircraft. We've seen a redistribution of aircraft and an additional fixed wing aircraft down the south west of the state and that's based on some analysis and feedback from last fire season. I want to reinforce that the aircraft are here to support our firefighters on the ground. Aircraft are great and a great help in putting out fires but it's firefighters on the ground who control fires and the aircraft are there to afford an element of safety and make them more effective. In effect a force multiplier. I also want to reinforce that for members of the public we're now entering into the summer period it's not too late to get out and to start your fire prevention activities cut that long grass make sure that firewood heaps are away from the house. If you've got firefighting equipment make sure it's serviceable and tested. Obviously on a total fire ban if you don't use chains force and you don't use angle grinders but at this time of year you should be making your final preparations for the summer season. There are many Victorians who are thinking about going away on holiday with their family and in many cases going away to the resorts along the coastal areas or around our many lakes and waterways and I urge you to take extreme caution when you go away because in some cases you're entering into an area which might have an inherently high bush fire risk. This includes areas around the coastal areas of the Mornington Peninsula and the Bellarine Peninsula and also the Surf Coast and the Otways but there are other areas which attract Victorians and in-state visitors that includes the waterways and areas such as Lake Yildon and many of our dams and waterways. So think about the fire risk when you're on holiday. Develop a plan of what you're going to do if we have severe or extreme or code red fire danger which is forecast. You need to think about it now so that when that day occurs it's automatic you know where to go you know what to do and what you're going to take with you. I think there are some similarities between this fire season and last fire season which was a long and busy fire season for firefighters both in forest and grassland areas. The warning is there there is a lot of grass which is in rural Victoria. Forests are drying very rapidly so I with the other fire service chiefs urge you to take heed of the bush fire warnings, monitor the CFA website, the emergency Vic website and the emergency Vic fire ready app. Know what your fire risk is be aware of what the fire danger is as it changes from day to day and act on your plan as the fire danger increases.


The U.S. base in Iraq was attacked by a drone. The Islamic Resistance in Iraq said its kamikaze drones attacked the U.S. base called Himo in northeastern Syria. Our fighters conducted this operation in support of the Palestinian people's resistance to the occupation forces that are carrying out massacres in the Gaza Strip, not sparing children, women, and the elderly. The group said on Telegram, Iran's Tasnim News Agency reported that the military facility that came under attack is controlled by a CIA-readenal unit. According to the report, the base previously employed 350 U.S. instructors to train fighters from a special unit of the Kurdish-Syrian Democratic forces. However, in recent days, most of the U.S. military were temporarily transferred to a neighboring base for security reasons. A spokesman for the Islamic Resistance in Iraq said the group's Shiite fighters will continue to attack U.S. sites in the region until the end of Israeli aggression in the Gaza Strip and southern Lebanon. Since the start of the military escalation in the Middle East in October 2023, there have been more than 180 attacks on U.S. bases in Iraq and Syria.


Hello. In this session, Alex will talk about challenges when Vector Smith virtualization. Okay, Alex, the stage is yours. Okay, thank you very much. Okay, well, I'll just start with a brief introduction. My name's Alex Benet. I work for a company called Linaro. So I'm a member of the virtualization team there. So as a result, I tend to work on projects like Quemu and KVM. And because Linaro is interested in the ARM ecosystem, ARM is basically what I do. So let's quickly introduce Quemu. So what is Quemu? According to its web page, it's a generic open source machine emulator and virtualizer. I think the queue originally stood for quick, but we like to think of it as pretty fast now. So Quemu supports two types of virtualization. The first is probably the most familiar to most of you. And that's when it's used to launch guests using the Linux kernel virtual machine. This requires support from the hardware and uses hardware features to accelerate the virtualization. The second mode is less well known. It uses a just-in-time recompilation engine called the tiny code generator or TCG. And this allows you to fully emulate a system of any supported architecture on any other machine with potentially different supported architecture. So let's have a closer look at the two in detail. So as I said, hardware-assisted virtualization is what most people are probably familiar with. This is the sort of high-performance virtualization that you see in the cloud or if you're doing old-fashioned things like server consolidation. So here Quemu is responsible for launching the virtual machine, but it hands most of the work off to the KVM subsystem inside Linux. And most of the work that it does is supported by the hardware. So the hypervisor only really gets involved when the guest access is something that's virtualized and the hypervisor needs to do something about it. Most of this is dealt with by KVM itself, but ultimately we can always go all the way back to Quemu for Quemu to deal with the access. So Quemu usually gets involved for older emulated hardware or also in various IO situations. Just a quick note, the EL modes here are ARM terminology, so they stand for execution level. So EL0 is user space, EL1 is kernel space, and in ARM we have a specific EL2 which is the hypervisor layer. So the second mode that we're talking about is full system emulation. So this is the sort of thing you'd see if you're running the Android emulator. Also it's quite heavily used in embedded development because it's often easier to debug stuff on an emulator than on the real hardware. And another use case for full system emulation is when you're bringing up new architectures. I think in fact RISC v, before the hardware came out, one of the fastest ways of running RISC v was under a Quemu branch. So in a TCG system the emulation looks quite different from KVM. Everything's run in a single user space process. Quemu allocates a block of memory to represent the guest system and then it dynamically recompiles the guest code to emulate the guest system in user space. It's quite slow because every guest instruction takes a good number of host instructions to emulate. And there's also a bit of a cost to emulating the memory management unit. This in case you're wondering is why the Quemu binaries are often called the Quemu soft MMU. But as far as the guest is concerned it's running on real hardware. There is actually a third mode that we use specifically for emulating Linux user space binaries. You tend to see this in situations where people are doing cross development. So cross tools or if they want to run stuff in a root FS. Another use case is if you've got a legacy binary for an old architecture that you can't rebuild for whatever reason. Now the mechanics of the JIT are mostly the same but it does run quite a bit faster because we're not emulating an MMU. It also only works for Linux binaries because Quemu is not emulating the kernel itself. It basically takes a system call from the guest, munges it a bit so it can be passed directly on to the host on the guest behalf. So now I've talked about Quemu. Let's talk a little bit about these vectors I'm discussing and what they're all about. So a lot of the activities that we take for granted in modern computing have been enabled by vector processing. So things like video playback, audio processing, 3D modelling all involve large amounts of data processing. And most of this data processing involves a thing called data parallelism and this is where vector processing really shines. Now here's a quick quiz question. Can anyone name this machine? Very good. Yeah, it's the Cray one. It's one of the very early supercomputers of its time. It was built a few years after I was born. Even though it only clocked in at 80 megahertz it could do 250 million floating point operations a second and this is in part due to its vector-based design. It had 8 vector registers each capable of holding 64 bit elements and this allowed it to execute the same floating point operation across multiple elements in the vector register. I don't know if anyone saw Liam's circuit less travel talk yesterday but as you can see, they did it first quite a long time ago. So while supercomputers were early users of vectors eventually it came to workstations and they started to use them as well. Spark was quite early on with its Viz or visual instruction set but most PC users will probably come across vectors the first time when Intel's MMX extensions were introduced. These are sometimes known as the multimedia extensions because media processing was one of the very first workloads which these extensions were designed to accelerate. Now the early workstations only supported integer operations but it didn't take too long before floating point became the Norman. AMD's 3D now I think was the first one to introduce it to the PC. So let's have a closer look at what a vector register looks like. So this is a wide register which contains multiple elements and these are usually referred to as lanes. So in this example we have a 128 bit wide vector and it holds 4 32 bit values. Now why is this useful? Let's look at an example vector operation. So this is a vectorized add. So with a single instruction we're adding the contents of the VM and the VM registers together but importantly each individual lane is processed separately. So this is why these instructions are often referred to as SIMD instructions which stands for single instruction multiple data. So by saving the cost of having to decode an instruction each time and also by having multiple arithmetic units in your CPU you get a simple parallelism in your processing. Now if you look at the history of these instructions on the PC you can see there's been a steady growth as they've tried to catch up with their supercomputer counterparts. The first expansion from MMX doubled the size of vector registers to 128 bits. The current iteration AVX 512 as was surprised no one is 512 bits wide. So as you can see for that you can do 8 double precision operations at a time or 16 single precision operations all the way down to 64 byte operations. Now ARM have taken this to its logical conclusion and they've introduced a thing called their scalable vector extensions. So this introduces vectors which can be up to 2 kilobits in length and also introduces some novel instructions that allow you to utilize these vectors without having to hard code assumptions about the number of lanes you have available to you. So the idea is you can write code that will run on your phone which might have a small vector length and without having to recompile it also run it on a supercomputer with a wide vector length and just get an automatic performance boost. Let's have a look at an example. So this is a classic C string copy function. I guess quite a number of you could probably come up with a simple assembler function to loop through reading a byte at a time and then storing the string at the destination. But how would we do this if we wanted to operate on an unknown number of bytes at a time in a vector register? So prepare yourself. Here's some assembly. You don't have to take this all in at once. I'm going to go through it bit by bit. But that is the complete string copy. So one of the keys to understanding how SVE works is the idea of the predicate register. So a number of operations either set the register or use the register to control the vector operations themselves. So if we look at our vectorized add from earlier it's now being controlled by this predicate register P. So in this example the predicate register only allows two of the lanes to be calculated and leaving the other values completely untouched. So let's look again at the assembler. So these first two instructions are setting this up for the copy. So the first instruction P true, sorry the P true P2 sets the predicate register P2 to all true. So we don't actually know how wide the register is but it's just saying use all the available registers when we're using this predicate register. So the next step is to load as much of our source string as possible into the Z register. But you can see there's actually two additional instructions around this, the set FFR and read FFR. And these are referring to a thing called the first fault register. Let's just have a quick look at that. So the first fault register solves one of the problems you have when you're dealing with large chunks of data of when you have to go over things like page boundaries. It might be our string finishes just before a page boundary but if we're reading things in big chunk at a time we'll run over the page boundary and generate a fault.  So what the first fault register allows us to do is speculatively load as much data that is possible. And then the first fault register will report how far we got afterwards. So here we go, we've got the set FFR sets the first fault register and says load as many bytes as we can based on our predicate register. Then finally we read the first fault register into P0. P0 is now set to the number of bytes that we actually read. So it's either the full vector length but if it faulted it might truncate to the end of the page. So the next thing we need to do is we need to test for a null termination. So again we're doing this across the whole vector register at once and this compare instruction basically sets the predicate register for every byte that has a terminating zero in it. The next instruction, the break A simply sets another predicate register P0 to be at the point of the first zero because we don't want to copy any zeros after our terminating the termination of the string. Finally we need to store the result back. So now we're using the P0 predicate register which is exactly the number of bytes that we need to do and we store that back into our destination. And finally we need to know how many bytes did we copy. So we increment X2 with the number of bytes that was involved in the operation. So all of this code doesn't actually have any knowledge of the size of the vector but it's still in copy as many bytes as possible at once. Now if you want to compare this to some other code you can go and dive into G-Lib C string copy functions. There's a directory called sys steps and you'll see that with some of the other vectorized support that you have to go through extraordinary lengths to make sure things are aligned to run over an edge and stuff like that. So before we move on to the next bit let's just recap. We've talked about virtualization. We've got many flavors software based and hardware based. Vectors have been around a long time but their usage is growing especially given all the data intensive processing we have to do and their key feature is their length which makes them very useful when the task exhibits data parallelism. So let's talk about the challenges that vectors present in pure software virtualization if we're using Chromium's tiny code generator. Now we have a problem. Chromium aims to be a flexible system so it operates on a large number of guest architectures. There's currently 20 but we're going to be 21 soon when the RISV stuff gets merged. The back end also supports most of the popular architectures. So we have to have a system that takes full advantage of the architectures that we're on but without being hard coded for any particular X to Y translation and this means we have to be more flexible than a lot of single purpose translators. Now why do we do code generation? Well interpreting instructions is going to be slow and all processors have common functionality. They all do logic arithmetic flow control. We should take advantage of the features of the host that we're running on. So you can think of code generation as simply a compiler but instead of working with source code we're working with the machine code of our guest. Now the process is fairly simple. On demand we take a block of machine code from the target. We convert it into an intermediate form from which the final jitter code is generated and we call this TCG Ops. So let's have a look at an example. So this is a fragment from a little benchmarking utility that I wrote to test out vectorizable kernels. It's a very simple one. It's simply going through an array of floating point numbers and multiplying them together. Let's look at the assembly just quickly step by step. Load the two values from our two pointers. We do a multiplication. You'll see here that the guest code that we're running is actually vectorized. So it's actually doing four multipliers at a time. And then finally we save the result. So let's have a look at how this is... Oh, sorry, and then we do our loop. So let's have a look at how this is broken down into TCG operations. So the first instruction, this is just the first instruction, LDRQ0X0X21. So we're loading 128 bits from the thing that's pointed at X21 indexed by a register X0. So first of all, we need to get the address of the load by adding X0 to X21. So that's three operations. The next thing we need to do is we need to do the load from memory into one of the temporary registers, which will end up being a host register. Now, as you can actually see, we're doing two loads because we're doing two 64-bit loads. So we do actually need to calculate the offset for the second part of the load. And then finally, we store the results into the register file. So this is QEMU's internal representation of the guest CPU state. Well, that's quite a lot of TCG ops just for our first instruction. Let's have a quick look at the calculation. So I'm not going to go through this in too much detail, but the key thing to take away from here is instead of actually generating code, we're calling a helper function. We're loading two values from registers this time. That's what these MVOS sets are. Call a helper function and then we store the result. But this is only doing one 32-bit operation. So we actually need to repeat that code another three times. So this isn't too bad if we're doing four multiplies, but it's soon going to add up if we do 16 multiplies on an AVX512 or 64 potential multiplies if we've got a full-width SVE register. And why are we going through all this marshalling process? Well, TCG only really understands two things. It understands 32-bit registers and 64-bit registers. The other two types are just aliases depending on the size of your guest and the size of your host. So clearly it's time for the TCG to move with the times and actually have first-class support for these vectors. But there are a couple of problems we need to get over first. So the first of all is there is an intrinsic link between TCG types and TCG operations. So this adi, so ad immediate, we have a 32-bit version and a 64-bit version. So with that in mind, how are we going to define our types of vectors? So one naive approach is we could just introduce a TCG type for each vector size we've got. So we could add 128-bit and 256-bit and 512-bit and actually it's going to go on quite a bit already. But that's not actually enough. We're actually doing operations on smaller chunks of those vectors. So for example, we might be operating on 264 operations at a time or 432-bit operations at a time. So maybe we need a type to represent each layer to the vector. But even that's not enough because most vector operations can also run on smaller than 32-bit size. One thing that's been introduced recently is half precision calculations, 16-bit values. So you end up with an exploding plethora of TCG types and that's a problem because for each TCG type we're introduced, we're introducing more TCG operations. So we need to go with something that's a little bit smarter. So we introduced a thing called TCG VEC. So this is a special type that represents a vector. We knew from the start that we needed to support multiple vector sizes. As I've pointed out, there's been a steady growth in the size of vectors and it's not a trend that's likely to stop. Even SVE with its 2-kilobit vector support leaves plenty of space in the architecture to have even bigger ones. So we need to do this in a way that doesn't explode the TCG ops space. Secondly, helpers are still going to dominate things like floating point and it's likely to do so for the foreseeable future. So we need an interface that's presented to our helper functions that should be as efficient as possible. So we don't want to end up doing lots of marshalling back and forth between registers. So we avoid the marshalling by passing pointers directly into our CPU environment. This does actually help the helpers as well. It means the compiler can vectorize the helper function and that's a bit of performance back. And finally, there are enough operations that can still be dealt with in generated codes. We need to maintain the ability to do that. And we need to ensure that there's enough information in each TCG operation that the back-end can make the most efficient use of the host processor that it's running on. So let's just have a quick look at the sort of TCG IR that we get with a TCG VET. So here we go. We have the guest instruction here with 128-bit XOR. It's working byte-wise, but it doesn't really matter because an XOR is an XOR. I don't care about each bit. But now you can see we've got quite a nice compact representation of that instruction. We still have to deal with loading the value from the register and storing it back. But you can see that the generated code now is a lot more compact. In fact, because we're running on a X86 that's got SSE, we can take full advantage of the SSE registers and do the operation 128 bits at a time. So we've got much closer mapping between the guest vector operation and the host vector operation. So this gives us better code generation, and it also gives us more efficient helpers for the times that we need it. So let's have a look at the blazing performance that we now have. Well, that's a little disappointing. So in most of the test cases we've got here, the TCG VET code is running a lot slower than our existing TCG code that does all the marshalling. There is one case, though, this bytewise bitfiddle that's running a bit faster. So let's just have a quick look at what this function's doing. So the main difference here is the bitfiddle is doing more logic operations per loop. In fact, this is exactly the reason Seymour Cray introduced vectors back in the 70s. His observation was although the process of loading stuff into a vector register was pretty expensive, when you chain operations together, staying in the registers, you could get that performance back. I say it might be clearer if we look at the guest assembly. Don't worry about understanding all that, but the key thing to see is he's actually doing a lot more calculations in each loop. So there are more operations in each translated block. So this makes sense, because the target workloads of SIMD instructions are aimed at processing large streams of data. So as a result, the CPU designers have sacrificed latency in favor of throughput. So executing a single SIMD instruction per loop is really the worst case you can possibly have. So is there a way we can test this? I should point out now that I'm a gentle user, so let's recompile all my benchmarks with fun roll loops. Now, for anyone who's not familiar with this compiler optimization, this basically tells the compiler to unroll its loop as much as it possibly can and use as many registers and do as many things at once. And now we can see our performance is getting a lot better. So although ChromeU has improved as well with this fun rolled code, we can see now two of our test cases beat it using the TCGVEC implementation. So, importantly, so we're getting closer, but there's a few more things that we need to look at. So there's some further work to do to look at handling of loads and stores. So this is the act of loading stuff into registers from memory and storing stuff out. That's currently not being converted to TCGVEC. The other thing that we need to look at is a thing called register liveliness. So when you're doing a compilation, you try and keep values in registers as long as possible. And although ChromeU has to make sure that it stores the values out to memory after each operation to make sure that we're always correct, we do a better job at reusing values in registers for the follow-on operation rather than loading them all back again. Right, now we've looked at TCG. It's time to look at what we can do with hardware. Surely hardware makes things a lot simpler, right? It's doing all the hard work for us. I should note, when I'm talking about KVM here, the same sort of considerations also need to be made for other hardware assisted options. So there's things like Zen hacks and HVM on MacOS. So let's have a look at the typical architecture of a virtualized machine. So here we have a single execution unit, the CPU. The hypervisor is a software layer, and its job is to deal with making sure the shared resource of the CPU is shared out between the host and the guest. And it can do that a number of ways. So as I say, it's a shared execution environment, but for the virtualized guest, there are two things we can do. We can trap and emulate. So trapping and emulate means any time the guest accesses a virtual resource, you trap into the hypervisor, and the hypervisor emulates the behavior and returns to the guest. Now this is fine if all you're doing is updating a TLB entry. It's a bit expensive, but you're soon going to get back to running code. So if you have to trap and emulate every time you access an SVE register, your performance is going to fall through the floor. So the next option is to do a context switch. So we need to copy out the state of the guest when we return back to the host and then copy it back at the end. Now this is nothing new. This is something that your host kernel does all the time. The kernel has to switch between different applications running, and as it does that, it copies their state onto the stack, switches to another state and goes back. The key thing is here, occupancy is actually quite important. So what the kernel tries to do is it tries to keep busy tasks on the same CPU for as long as possible, and if possible any other tasks that need to run on another CPU resource. So your occupancy is important. Let's just have a quick look at the size of these contexts though. An arm, for example, has 32-bit general-purpose registers. So you need to save all that state into memory before you switch states. That's 256 bytes of data. It's quite a lot, but it's not too bad. However, the SVE registers we have could be a lot bigger. That's 8K's worth of data. So if we suddenly start copying the whole of the SVE state every time we transition from the host to the kernel or from the kernel to the hypervisor, it's going to slow pretty quick. I mean, do we have to save this context every time? Certainly if you're going to switch to another user space process, it's highly likely it's going to access the vector registers. Even if the application itself hasn't been compiled as a dedicated vectorized workload, the chances are it's calling library functions that are likely to use the vector registers. So things like string copy, mem copy, and whatever will all have accelerated versions of what your library detects. And there's also the kernel. Now it used to be said that the kernel doesn't do floating point. That's not actually strictly true. So when it comes to SIMD registers, usually there's an aliasing between the floating point registers and the SIMD registers. And the kernels certainly take advantage of SIMD registers when they can. Things like in kernel crypto or doing RAID checksumming are all things where they use these registers. Hypervisors, less so. Hypervisors tend to be written to be very small and tight and minimal in what they do. So you're okay there. So how can we make this a little bit faster? Well the first thing we need to do is we need to detect usage. So what we do here is we disable access to the SIMD and FPU every time we enter the guest. Well not every time, but for the first time. And then the first time they access a SIMD resource that causes a trap to the kernel and at that point the kernel can then swap the context. Then it re-enables the SIMD or FPU processor. You return to the traction instruction and you'll use the space process to get on with its life. We need to do a little bit of bookkeeping for this though. So we need to keep track of whose SIMD state we have on each CPU. And we also need a per task variable where we can save the SIMD state when it's not being actively used. And now I'm going to introduce an additional flag here. This is just simply a state on the flag. So when the kernel knows when it switches to use the space it needs to enable trapping so it can pick up if the SIMD stuff is accessed. So that's what we do on a host kernel. Luckily for doing the VM this is going to be pretty much the same thing. Now the hypervisor has a slightly different mechanism for trapping its guest's access and of course the kernel inside the virtual machine will also be tracking its user space usage. But the ideal case then should be that if a VM has to exit for something unrelated as long as the host kernel doesn't schedule anything else onto the CPU and the VM gets back to running pretty quickly we don't need to save and restore our SVE state at all. Now this is an ARM-specific thing enabling SVE in ARM so the kernel already has support for SVE in 4.15 and this extended the deferred system which was already being used for the NEON and advanced SIMD which are sort of like earlier iterations of the SIMD instruction set. But currently in KVM you can't have any guests that access SVE registers. There's currently work underway to do this but it's certainly almost going to be ready before you actually get your hands on any hardware with SVE. So I'm expecting most open source developers will get their first experience of using these SVE registers on Kremu. So with that let me just summarize. Vectors are great, they really help us with heavy data processing workloads but vectors are large and this does mean that we have to add special handling in kernels, in hypervisors and emulators. So with that that's the end of my talk, I shall open the floor to any questions. So the question was can we use the same technique to trap access to vector registers on X86? You're asking the wrong person because I'm not very familiar with X86. So X86 does have some code to deal with this sort of thing so it actually actively tracks when the kernel wants to do something in user space. So I think it always swaps context if it swaps to a new task but if it's then wants to do something in the kernel for some crypto related function it will then save the state at that point trash over it in the kernel and then return. But for the details you'll have to ask someone who understands X86, sorry. Yeah. Yeah, so let me just see if I can find the example. Sorry, I'm looking at very small version on this. Right, there we go. Next. Right, yes. So the key is the TCG vector operation explicitly has an encoding of the size. So that one at the end is actually a logarithmic scale so we can pass the size as part of the TCG operation. Yeah. But we do end up still have to have, it doesn't matter for things like XOR but you still have to have a TCG op for each lane size that you're dealing with. So you end up with a sort of for example a vector multiply 32 vector multiply 64 for the size of your support. Anymore? Well, thank you very much.


So today we're setting up a defense to the west of our current position. We encountered American armored vehicles in our defensive position and we engaged and destroyed a good amount of the American armored forces. After seeing too many forces we moved back to our current position where more American armored forces are coming over the hilltop just for the rest of us and we're engaging them with our weapons systems that are on our vehicles. 1-6, 1-6. Okay, White 8. This is 1-6. Go ahead and break the position. Tell Red Duck to come back to the hill that he was at. Break. All savage elements be advised. After we set up our positions here more American armored forces continue pushing towards our position so we engage and destroy them. As of right now there's a limit and we're just waiting for the third to feed the American armored forces to come up to our position. Rod, in that case I just hold what you got.