Welcome to episode #7 of Visualize this! where we talk about topics relating to Visual Computing.
Our topic today is the Kaboom project, and the new whitepaper multi threaded fluid simulation for games. Joining us today are Jeff Freeman and Quentin Froemke . Jeff and Quentin are software engineers in the Visual computing software division at Intel.
Mark Randel President and CTO of Terminal Reality started a blog series on the Highlights and Challenges during the development of Ghostbusters. You can read the fascinating journey at http://software.intel.com/en-us/blogs/author/mark-randel/
Thread like wildfire continues : send in your entries by the last day of the month and be entered to win 1 of the 5 game stop gift certificates. More details can be found at http:///www.intel.com/software/thread-like-wildfire
Jeff and Quentin talked to the below questions:
1. This year at GDC San Francisco you spoke about the Kaboom project and recently released the source code and white paper on it. Can you speak to what is the goal behind this project?
2. You mentioned that this project shows how to add real-time 3D smoke, fog and other fluid simulations to your game. How is this different from traditional methods of rendering smoke and fog?
3. Tell us how you were able to use the Navier-Stokes equations in this project?
4. You based this paper and work on Mick West's paper "Practical Fluid Dynamics". How did you use this?
5. What kind of hardware are you using for this project and what kind of frame rates are you seeing?
6. Are there other Intel tools used?
7. The message you have with this demo is proper threading for multi core architectures will help you reach the full potential of your games. What have you included in the source code that helps a developer do this?
8. Where can we go for more information : http://software.intel.com/en-us/articles/multi-threaded-flui.....for-games/
Join me in 2 weeks for another episode of Visualize this!
You need to add parallelism to your application... Where do you start? How do you determine that adding parallelism and working through data sharing problems is worth the effort?
If you have ever parallelized a serial program, you know how tricky it can be to answer these questions! With the move to multi-core processors, the need to parallelize software is becoming somewhat inevitable. Those who chose to continue to ship serial code are potentially exposing themselves to obsolescence. Parallelization is becoming essential for survival in this tough marketplace.
Moving from an existing serial code base to efficient and correct parallel code is often difficult, error prone and expensive. Using intuition to identify the parallelization opportunities and then ascertaining that the parallelization was done correctly can be hit-or-miss. The whole experience can be improved using a tool like Intel® Parallel Advisor Lite ? which has been built for this exact problem.
Parallel Advisor Lite is a parallel modeler for your serial application ? you would use this tool to explore or model parallel possibilities while keeping your application serial. This is important because a parallel modeler lets you continue to use your existing test system and debugging methods as you modify your application to resolve data access issues.
The Parallel Advisor Lite workflow guides you through the process of
1. identifying performance ?hotspots? in your application; those regions where your program spends most of its time
2. inserting Parallel Advisor Lite annotations to model your parallel experiments
3. verifying the performance benefit
4. having Parallel Advisor Lite Correctness Modeling verify data accesses that occur within your annotated sites/tasks
5. resolving the data conflicts that were identified by Parallel Advisor Lite?s Correctness Modeling ? by either modeling locks or refactoring your serial application
6. testing your source changes by running your existing test system ? this is possible because your application is still serial
Tell us what you think of Parallel Advisor Lite - we appreciate your feedback! Did it lessen a pain or solve a problem you encountered on the road to effective parallelization? How can it be improved?
p.s. Did you know that Parallel Advisor Lite is not tied to a threading paradigm? Or that you can build with either the Microsoft® VC++ compiler or the Intel® C++ compiler?
As my son and I stood in our yard last night watching the International Space Station pass overhead it amazed me just how small the world seems to be getting and also how connected we are! We have quick and easy access to an amazing wealth of information!
This link brings up a site where you can get information on viewing the International Space Station along with the Space Shuttle when it?s flying too. Currently they are separating and thus will soon be visible as 2 separate objects (they are brighter when together).
Perhaps it?s the nerdy engineer in me but watching that fly by many times now and knowing there are 13 people up there is an amazing thing. If you can take some time and take a peek, you?ll be surprised at just how large it is, and far brighter than any star in the sky!
I wonder if there?s a way to find out how many Intel processors are used on the Space Shuttle and International Space Station?
My guess is that along with live audio and video feeds, eventually we'll also be able to follow the Astronauts working in the Space Station via social networks!
With Windows Server 2008 R2 installed and configured with the Hyper-V role you'll need to open the Hyper-V Manager which will initially have no virtual machines as shown here.
Select the Import Virtual Machine option within the actions pane and then navigate to where the exported virtual machine resides upon the file system. It is a good idea to copy the virtual machine which will create a new unique virtual machine ID and select the option to duplicate the files which will allow the virtual machine to be imported again.
If you then click the Import button the virtual machine will be copied to the virtual hard drive folder defined for your Hyper-V environment. Within Windows Server 2008 R2 the default location is:
C:\Users\Public\Documents\Hyper-V\Virtual hard disks\
It can take some time to import the virtual machine and so it might be a good time to get some coffee while the virtual hard drive is copied.
Once the virtual machine has been imported you should verify the settings for the virtual machine as there may be some issues that need to be resolved before the virtual machine can be started. In this example the virtual machine was moved from a desktop workstation with 8Gb of memory to a mobile workstation with 4Gb of memory. On the desktop workstation the virtual machine was given 4Gb of memory which is out of bounds on the mobile workstation so this will need to be reduced.
Once the startup memory has been changed to 2Gb the virtual machine can be started within the new environment.
Given that the virtual machine was imported from Windows Server 2008 to Windows Server 2008 R2 you'll also have to update the integration services within the virtual machine. You can do this simply by selecting the Insert Integration Services Setup Disk option within the Hyper-V Virtual Machine Connection.
I noticed this evening that the Consolas font that has become popular among developers using Visual Studio is now an option within the Windows 7 and Windows Server 2008 R2 command prompts.
Setting the Consolas font as the default command prompt font is done within the Font tab of the command prompt properties Window, shown here.
Once set, the Consolas font is a welcome improvement to the command prompt which unfortunately is unable to use other true type fonts that may be installed upon the system.
Unfortunately the Windows command prompt hasn't changed significantly over the years even through many advanced Windows users find themselves using it on a daily basis. It would be nice if the Windows team was to bring some other capabilities to the command prompt in Windows 8 such as opacity settings although until such time the Consolas font is a welcome start.
Smartphones, Mobile Internet Devices (MIDs) and netbooks sit in that interesting space somewhere above what we historically thought of as a "phone", but slightly below a full-sized laptop / notebook computer. With a smartphone that can do most of what I need, I find myself lugging the laptop to fewer places around town. I haven't made the leap into a netbook yet, but I have several friends that have recently replaced their laptops with netbooks to take advantage of the increased battery life, lower cost, smaller form factors, and lighter weight.
These related markets (smartphones, MIDs and netbooks) have been a sweet spot for open source software. Sam Dean from GigaOM says that "open source operating systems are suddenly flourishing, especially in the growing netbook and smartphone arenas, and it looks like significant competition between them will lead to much innovation."
Juniper Research is currently forecasting an increase from 106 million this year to 223 million by 2014 for smartphones running open source operating systems. Juniper also sees open source operating system-based smartphones as an additional outlet for contributions from Linux and open source developers.
Jay Lyman from The 451 Group sees Moblin as the middle man: "I see all of this headed to a place where Moblin rests below a variety of other software that is more specialized to the particular device, whether it is a smartphone, a netbook, a tablet PC or something else." Dirk Hohndeltalked about netbooks and the Moblin project as part of his session on Intel and open source software at OSCON.
Regardless of what you call this segment or where you draw the line between these markets, open source is playing a role. It is impacting innovation, developer communities and more. While these markets have existed for a while, they are now starting to become more mainstream with smart phones and netbooks moving out of the realm of early adopter geeks and into wider usage. Open source isn't the only choice in these markets, but it is becoming an increasingly important part of the solution.
What do you envision as the future of open source in smartphones, Mobile Internet Devices (MIDs) and netbooks?
One of the basic tools that a programmer has in multi-core programming and parallel computing is the state maintainability. A serial application has only one flow and therefore the Call-Stack (list of nested function calls) is in a way the application's state. In a parallel environment this is clearly not the case because there are many threads with many Call-Stacks at the same time. For example taking a snap shot of a parallel system in order to reproduce a bug requires the states of all running threads, sometimes processes, and sometimes even the operating system. The operating system behaves differently when it has enough memory than when it is out of memory. We need a complete system snap-shot in order to reproduce and solve bugs. You can read more about this in my previous post here: Stateful Programming - a key element.
There are three basic types of Runtime States that we consider:
1. First is the state of the operation I am working on right now: this thread, this object, this task, etc.
2. There is the collection of states of all other operations currently running in the system: other threads, other objects, other processes, etc.
3. There is also the state of the entire system: out of memory, flooded disk queue, with garbage collection in the background, etc.
When a program is running and I don't know its state I have no way of knowing what went wrong. The more stateful the application the more I know what is going on with it. Knowing the current state of operation can help me in two ways:
1. My current state: meaning know what is the last thing my application has performed and how well it is performing, and
2. Overall state: meaning learn the state of the system around me by the way my code is operating. For example if I try to allocate memory and get a response of 'out of memory' then it is probable that my other module had crashed because one of the ActiveX controls it was operating crashed because the system is out of memory.
There is a class of students that I am teaching these days. It is a 3 months programming course and they start with C, go over C++ and then C#. In the way they are taught the many concepts of programming such as parallel computing, embedded CE and VX Works, system design, etc.
My part started last week with a course about software debugging and bug prevention. This monday we start parallel computing. This is before they know Object Oriented and C++ programming and it is for a very good reason. We want to see if it helps to understand the parallel system flow before the mind is sealed with objects and the methodology around it.
This time when I went over the debugging slides in class I deviated at times. The goal was to focus on debugging techniques that would be also helpful in the parallel world. This worked like magic. It so seem that the techniques of the parallel world reduced debugging complexity for a serial application as well.
My focus here is on the stateful programming aspect of debugging. Far too often the only way to find a flow-bug in a parallel system is to look it up in the application's design. For this reason Stateful Programming has to do with design as much as it has to do with programming. We take a simple application that opens a file appends "1234" to it and closes the file. The file name is provided by the user. Here is the stateful analysis of the application:
Generally speaking we say that every time a decision is made in the code we change state. For example if I try to open a file and the file is opened then the applciation moved from a state of "need to open file" to "file is ready for work". If file opening failed then the application moved from "need to open a file" to "the file cannot be opened" which means that the overall operation fails. This means that whenever there is an 'if' statement we change a state. We then add that when ever there is a function call that can return a value other than success this function call is a state shifter. The API call to open a file can return either the file is opened or not so this call is supposed to change the state of the application.
This is generally speaking. More practically speaking we say that everytime there is an error it has to be made noticable either by breaking the application or posting a message to a log, to the user, or any other method. We also say thet there are hirarchies for states so unless I am trying to debug the user input loop (asking for a file name) I don't really care whether it failed and is asking the user again for the input, all I care is the final output of this loop: either we got the input or we don't.
We can of course specify macro flags to enable and disable message for internal states (to be tested using #ifdef). The power of logging states is that when an application crashes or has some race condition we can determin what happened because we have a good snapshot of the application and what it was doing. It is possible for example to see in the log that one thread was working with a file at the same time that another thread already was.
Stateful Programming comes from the design and we need at least part of the Flow Diagram for our system. The best way to follow this through is to have a Flow Diagram followed by an Object Block Diagram, followed by level 2 Flow Diagram for internal followed by an Object Block Diagram and so on...
See the following diagram:
(Stateful Programming)
Here is a list of states according to this diagram:
* Starting
* Getting User Input
* Exiting: User Request
* Opening File "C:\my file"
* Writing To File 4 bytes to "C:\my file"
* Notifying User Of Error in File Write
* Closing File
* Process Completed Successfully
Here is a list of error states according to the diagram:
* Error Getting User Input
* Error Opening File "C:\my file"
* Error Writing To File: 4 bytes to "C:\my file"
Some of the state notifications could be hidden unless activated. The user input loop can also have a few internal states activated on demand.
When we have several threads and processes running in parallel it is relatively simple to track down flow bugs in the system. On any given time the collection of states of all threads is the state of the appliation. Now flow control bugs (A.K.A. "Random Bugs") are very predictable.
This is also compatible with sequence diagrams in visual studio 2010.
I gave a chalk talk yesterday on Moblin at OSCON 2009, the Open Source Convention in San Jose. This was a no slides white-board chat about what's cool in Moblin, where is the future going, and what are the ways people can collaborate and participate.
I touched on some of the high points of what makes Moblin great as an OS design *for* netbooks, rather than adapted to them as an afterthought. I had one heckler yell at me from a neighboring booth (more on this later) and shared my little epiphany about Web 2.0 and Moblin.
Fast boot - Moblin in its current form has a goal to boot in 8 seconds from when the BIOS finishes its work to the moment the CPU and Disk are truly idle and able to do useful work. I talked about some of the really hard work and some tricks we use to achieve this.
Fast shutdown - I commented on how quick Moblin is to shut down, just hit the power switch and it's off within a few seconds. I mentioned that when you want to turn off your cell phone, TV, whatever, you hit the power switch, and it's the same with netbooks on Moblin.
User Experience - I refered to the great work that the guys at Opened Hand have done to make an amazing user experience.
Web 2.0 - it's built in, in fact it's a fundamental part of the OS experience.
The heckling came when I mentioned fast shutdown. You see Moblin doesn't have a shutdown "button" or anything in the OS. We just use the power button from the netbook itself. I began kidding around and saying, "I remember one particular OS, which will remain nameless, in which you had to hit the 'Start' button to 'Stop' the computer."
From the next booth, I hear a call, "Hey! We're listening here!". Yes, the booth next door was the Microsoft booth. Hey, I didn't mention the OS, did I? Guess they're just sensitive.
But the epiphany I shared on Web 2.0 was three or four years ago when I sent an email to one of my teen-age daughters, and then asked her a few days later if she had seen it.
"No, Dad; I don't look at my email every day!"
What? How can this be? A technologically plugged-in student who isn't addicted to mail? But then I realized that for the generation after mine that email is really dead as a communication tool. Blogs and IM have taken its place.
Fast forward to today, and blogs are just about dead too - Twitter, Flickr and Facebook have taken their place of prominence because of their immediacy.
And Moblin 2.0 is designed with social media as a core and foundational part of the experience of the OS. It's been years since browsing alone was the core of the operating system. I'm amused to see that even today, there are OS's announced which a little more than a browser on a simple OS, and this creates all kinds of excitement. In fact, having social media integrated at a fundamental level is what makes me so excited about Moblin.
Cloud computing is a hot topic right now with more and more services moving into the cloud every day. Open source has already been playing a role in cloud computing, but there is quite a bit of speculation about the role that open source will play in the future as the cloud computing industry matures. The economic conditions are part of the reason for the use of open source in cloud computing, but flexibility, avoiding vendor lock-in, and access to the source code are other reasons for choosing to use open source as part of a cloud solution.
"Linux has emerged as a key component of many of today's available cloud infrastructures, providing both the base technology for cloud providers and an operating environment for customers that wish to access Linux operating system and Linux services that are hosted in a cloud."
"Linux has gained traction among cloud providers due to its low cost and customizability. Cloud providers are building cutting-edge, highly complex services and often require source code access and the ability to modify the base code to their highly specific needs."
On the one hand, open source technologies are being used extensively as part of the infrastructure behind many of the cloud solutions being offered by companies like Amazon and Google. However, the cloud platforms being developing by the big providers include a stack of proprietary code on top of the open source infrastructure. Some people express concern that the cloud will make open source software less relevant as these companies develop proprietary solutions for the cloud that run on top of this open source infrastructure. Tim O'Reilly talked about this idea a year ago, and he framed the discussion with a couple of questions:
"What good are free and open source licenses, all based on the act of software distribution, when software is no longer distributed but merely performed on the global network stage? How can we preserve freedom to innovate when the competitive advantage of online players comes from massive databases created via user contribution, which literally get better the more people use them, raising seemingly insuperable barriers to new competition?"
While open source in the cloud has some challenges, O'Reilly was fairly optimistic about the possibilities for the future of open source and cloud computing. He provided plenty of advice sprinkled throughout the article about using federated services rather than centralized ones, sticking to open standards and protocols, focusing on reusable components, and more.
Other recent articles aren't quite as optimistic. Stephen O'Grady from Red Monk talks about whether or not open source software can provide a viable complete alternative to cloud offerings from companies like Amazon. The idea is to take open source past the infrastructure layer and use open source to provide the entire cloud platform, which O'Grady says would be particularly useful for companies wanting to avoid lock-in or create private clouds that run within an organization's infrastructure. With the popularity of the proprietary cloud platforms, developing a complete open source alternative could be nearly impossible for a single company, so O'Grady sees partnerships as a difficult, but possible alternative solution. Matt Asay comments on O'Grady's points by saying, "don't expect open source to 'win' in the cloud. ... Rather, look to open source to influence, to shape the cloud."
There are already a number of open source cloud resources in various states of completeness, including Eucalyptus, Nimbus and more. People have been talking about open source software at recent cloud conferences, like Structure 09, as a way to help address some of the issues associated with cloud computing. While I don't necessarily see open source as becoming the solution for cloud computing, I do see it playing a role as one of the many possible cloud solutions providing end users with an alternative that they can choose.
What do you see as the future of open source in cloud computing?
I?m currently on the second leg of grueling plane ride home from Bangalore and reflecting back on the highlight of the trip which was definitely the opportunity to spend time with a few visionaries in India academia - Vice Chancellor H.P. Khincha, Dr. H.S Jamadagni and Dr. K. Rajanikanth. On Saturday, together we inaugurated a new Parallel Programming Center of Excellence at the MS Ramaiah Institute of Technology in Bangalore. The center will be used to train 250 faculty from VTU affiliate and autonomous institutes on new parallel programming curriculum. Vice Chan Kincha opened up the event by sharing his vision on keeping abreast of technology and the urgency behind updating curriculum for multi-core. Professor Jamadagni officially handed over a new set of parallel programming curriculum which he developed and is making available to this group and to faculty around the world to use. He noted that unfortunately our brains do not follow Moore?s law - with the number of neurons reducing instead of doubling every two years. So we have to be selective in what we teach students and be careful not to get caught up in the technology hype curve. He also discussed the need for more of a community approach to driving curriculum changes where the teacher, learner, employer, philosopher, politician and researcher all collaborate in its development. Prof. MSRIT, then spoke on how center would be used to train some 300-500 faculty from VTU affiliate and autonomous institutes using a train the trainer approach with master faculty trainers. It was amazing to see the level of enthusiasm and proactiveness around updating curriculum which often can be a quite slow moving machine.
A few photos below of the event. Thank you Vice Chancellor Khincha, Dr. Jamadagni and Dr. Rajanikanth for a strong partnership between academia and industry!
É com prazer que trazemos para a comunidade de usuários do CACIC, a versão 2.4 com suporte ao Intel vPro. Esta é uma importante etapa que atingimos neste momento. Obviamente ainda existe muito trabalho a ser feito. Existe muito espaço para melhorar a documentação, pois a que está disponível no momento assume que o usuário do CACIC conhece bem os mecanismos de funcionamento do vPro.
Apesar de o desenvolvimento ter sido feito usando o Ubuntu 9.04, nesta etapa vamos testar a aderência e procedimentos de instalação para outras versões, dentre elas:
- Fedora
- OpenSuse
- Madriva;
- Debian;
- FreeBSD (é... eu tenho simpatia por este, é pessoal)
Bem, para começar a usar…
basta fazer o download no Portal do Software Público e instala-lo como normalmente você instalaria o CACIC, porém você irá verificar que agora há um arquivo neste pacote chamado vproterm.tar.bz, que deverá ser extraído e instalado da seguinte forma:
Instalação do vproterm:
sudo tar -x -C / -f vproterm.tar.bz
Execução:
sudo /etc/init.d/vproterm start
Pré requisito:
Porta 27437 liberada no firewall.
Além do CACIC, é necessário preparar as máquinas Intel vPro, e para isso há um servidor especifico para realizar o provisionamento, e pode ser feito o download dele e da sua documentação no seguinte site.
Espero nos próximos posts ter mais novidades para contar, especialmente uma documentação mais completa.
This is another follow up to my previous post asking media developers for input. Last time I asked about the importance of HW accelerated video decode, but actually encode acceleration would be a far better place to drive performance for video editing or transcoding. The challenges I've heard from developers has been the lack of a standardized interface to do so. Yes decode interface exists in DXVA, but not for encode. I'm curious how much of an issue is this for developers? If a standard API existed that offered simple access to HW accelerated encode across a broad range of hardware, would developers be interested? What considerations or capabilities (like pre-processing for example) should be supported? Let me know your thoughts.
Intel turned 41 this month. The company isn’t visibly celebrating, but I know the spirit of our 40th anniversary programs live on and are being deepened. As I visit Intel sites around the globe, I’m struck by the depth of commitment of our employees who are applying their professional skills to community needs and really taking the spirit of volunteerism to a more impactful and sustainable level. I love the idea that Intel groups do a volunteer event for their quarterlies, or that individuals commit to work with a non profit or school a few times a year, but let me share a few examples I’ve witnessed where employee’s Intel professional skills are making a huge impact - we call this skills-based volunteering.
An Arizona CQN employee worked with the Arizona Quality Alliance, a non-profit, to assess a local college’s operational effectiveness. He also helped lead some sessions for the admissions department saving them $20K so far this year.
Fab 28 volunteers created training classes at a rehabilitation center for recovering drug addicts by providing internet courses to more than 60 students. The courses are helping recovering addicts land jobs, and be successful in life.
In Intel India, a group of volunteers saw that the UN had a problem coordinating relief aid after the Bihar floods. The problem was coordinating phone calls for more than 80 workers across multiple relief camps. The team created a SMS-based communication application (called Relief Communication Management System), where workers can send SMS messages to a particular helpline number and all their requests get published online on a webpage, making it easier for workers to communicate after disasters.
This video also captures the spirit of how applying professional skills and employee passion can have a huge impact to individuals, schools or nonprofit organizations.
These are just a few examples of what Intel employees are doing around the world. I’d also love to hear from you - what are you doing that applies your work skills to the community? Be a ROCK STAR in your community!
Comments (2)
23/07/2009 12:57 PM
Não confunda o Original com cópias. Aqui seu anúncio é tratado com seriedade.
Site 100% Compativel com o Google Chrome - Versão Oficial 1583 v0.2.149.27 ou superior, Firefox 1.5 ou Superior e Safari 3 ou Superior.