Internship at NVIDIA 2014

I spent summer of 2014 as an intern at the NVIDIA. That was quite different experience than the last year in the Google. This article describes all the aspects of being an intern in the Silicon Valley including tips how to prepare for such adventure. A big part of the summer was a road trip from Indiana to California and back and I will talk about it as well. After I returned everybody keep asking me: What is better, NVIDIA or Google? You can find out my personal opinion in the post!

My way to NVIDIA

The story of my internship at NVIDIA starts completely differently than the last year. I was not really planning to go to an internship for the summer 2014 so I did not apply anywhere. I wanted to either have a free summer or return back to the Google. I was in contact with my recruiter at Google and I knew I have doors open there.

Note: This article describes all aspects of being an intern at NVIDIA or other Silicon Valley companies. I am intentionally describing all the details such as apartment search, furnishing etc. This is meant to help and possibly encourage people who are thinking about applying but may be worried of all the unknowns in the process.

Career fair

The point where NVIDIA came into play was a large carrier fair at Purdue University. All friends from my lab went there and they persuaded me to go as well. At the carrier fair I saw only one interesting company — SpaceX. I went to talk to them but after 30 seconds they mentioned that only US citizens may apply. My English accent probably betrayed me but hey — I got some SpaceX stickers!

Out of curiosity I was checking big companies but there was like 30 minutes wait for Microsoft and Intel, even more for Apple. Google was not there at all. NVIDIA booth earned my attention because they were asking applicants to fill out some quizzes. I thought that might be fun to solve some simple problems so I came there to just try it.

I was speaking with Harold who is software engineer and manager in NVIDIA. First we were chatting about my background and skills but then we came to the quiz. The problem was that I had like 5 minutes until my class. Harold said: "That's not a problem Marek; I will keep your resume and just come talk to me after your class."

Cool, I went to my class and after two hours I returned back and without waiting in the line again I approached to Harold and he just looked me and said:

Oh, Marek, Right? I should have your resume somewhere here.

I was completely blown away. This guy heard my non-English name once and it was nearly two hours ago. And he remembers me perfectly. That really impressed me because I am really bad in remembering names. Anyways, I took the quiz which contained four questions about some basic stuff and algorithms. I also saw an electrical engineering student drawing some crazy electric circuit so I think they had many versions for different majors.

Then we discussed the quiz and that was it. I was not really expecting anything out of it but I had a good time in NVIDIA's booth (unlike in SpaceX's).

Interviews

Around a week later I received an e-mail from NVIDIA's recruiter about scheduling a phone interview — that was fast. I was still not in a mindset that going to NVIDIA over the summer is my goal but one interview could not hurt, right? I also sent thank-you email to Harold from the carrier fair and guess what — he remembered me again.

My first interview was with software engineer Mark and since I was not expecting much I did not prepare for it in any way. About 5 minutes before the interview I realized that the only conference room in our department is already taken and I have no place to go. I ended up going to a silent part of the building and I was having interview while standing in the corridor looking out of windows. If you think this is not a good way how to have an interview then wait for the second one.

The interview itself went fine. After a usual initial discussion Mark was asking me quite general questions like reversing a linked list. I have to say that having an interview while standing on the corridor is not optimal but fortunately I had no big need to sketch anything on paper otherwise I would have a problem.

Another week later the second interview came around. Again, I spaced-out and I did not book a room for it. This time I knew that corridor was not very good idea so I decided to go to a small place in between buildings. I knew there is a table with chair there and I rarely saw anybody there.

This time I was talking with software engineer Robert and his interview was more about C (not C++). My experience with C was very limited so I did not know answers to around half of his questions (like static or intrinsic functions in C). The funny part was when Robert asked me:

Wait, do I hear a plane?

Yeah, this time my location was even worse than before. I did not realize that there were so many planes flying around Purdue and the worst thing was that my spot was in between two tall buildings where the sound resonated and was very loud. The lesson learned is that I should prepare for interviews longer than 5 minutes before. At least find a quiet room.

Even though I was struggling with C stuff the interview overall was great and I had a good feeling about it.

Offer

After the interviews I exchanged a few emails about my internship availability and sooner than I realized that this is real thing I received a physical mail with an offer letter. First, I did not expect this coming. Last year I did not receive any physical offer from Google, everything was online.

Around that time I was in contact with my Google recruiter and I also had an offer from Google. So now I had to decide between NVIDIA, Google, or nothing.

As you know from title of this blog post I decided to join NVIDIA because of one simple reason:

Internship is about the experience!

Being able to try to work in a company for three months without any obligations is really unique opportunity and it is beneficial for both me and the company. I already experienced Google last year so this year it's time to experience something else — NVIDIA.

Getting ready

Internship at NVIDIA was different than Google's one. Last year Google provided everything from a flight ticket to providing a nice place to live. All you had to do is just to show up with your luggage. NVIDIA was quite the opposite: arrange everything by yourself and we will reimburse you later. This was on one hand less convenient but on the other hand it gave me more real experience of the whole process.

Actually, two of my lab mates from Purdue University also got an intern position at NVIDIA. I ended up living with one of them.

This chapter describes all the aspects of being an intern in the Silicon Valley including details like finding and furnishing my apartment, getting a bike, etc.

Finding a place to live in California

I started to search for a place to live around two months before internship started. NVIDIA headquarters is located in Santa Clara in California. As you can imagine finding an apartment in the center of Silicon Valley is not easy. Even NVIDIA recruiter warned me about it and she suggested to start searching early, and that's what I did.

First, I was aiming for one bedroom apartment somewhat close to work for maximum $1000 per month (and that's already a lot I thought). That turned out to be very unrealistic goal. After a week of searching there was nothing in this prize range. I thought ok, $1000 is probably not enough but for $1500 there has to be something! There was, but none of them were offering lease duration less than a year.

The lease duration turned out to be the biggest problem because the most places were offering minimum one year leases. After seeing the prices for one bedroom apartments me and my friend who was also going to NVIDIA decided to look for two bedroom apartments. That was much easier goal and there were plenty of places. The primary search tool was Craigslist. We tried to google other web sites but none of them worked for us.

On average I was sending one e-mail a day. The strategy is to go to Craigslist every other day and check last two days of listings. All older listings are likely already taken and are not worth of your time. My primary filters were prize around $2000 per month and distance max 30 minutes biking from NVIDIA.

I spent around three weeks doing this routine before I received one positive response! It was actually quite stressful experience. I did not have much experience in renting an apartment and there were some weak moments. For example, on Craigslist you have to be very careful about scam. People may charge you and when you arrive at the address there is no house.

I was e-mailing about the apartment with the representative and after I provided them all the needed data she asked me to pay a security deposit of $600 to secure our apartment, so I did. Right after that I told this with joy to my friend:

Hey man! We have an apartment secured, I just paid the security deposit!

And he looked at me and said:

Cool, but did you actually talk to that person? How much was it?

I said: "Well, no, but we exchanged a few e-mails, it was $600." He responded: "Nice, so we just lost $600 to a scam, right?" :D :D Anyway, it turned out to be OK so we were happy.

The apartment we found was for $2100 per month plus utilities around $100 per month. It was 6.7 km (4.2 mi) far from NVIDIA which is around 20 minutes on bike or 10 minutes by car.

Relocation to California

NVIDIA offers two options for relocation: airplane or car. My friend had a car and it is very, very convenient to have a car so we decided to drive it (and us) there. We study at Purdue University in Indiana which is around 4000 km (2500 mi) from NVIDIA. Yeah, like five days of driving or so.

The bad part about driving for five days is that your butt hurts. The good part is that you have a great opportunity to see a piece of beautiful world!

... and also that NVIDIA pays for the fuel, food, and hotels. We planned the route around some national parks so we get to see some beauty of USA. Trip there (and back) was really great experience. It was so nice that I have dedicated whole chapter to it: section Traveling around California.

On the side note: NVIDIA do not reimburse other means of transport like a train or one way airplane tickets.

Emergency motel for the first week

The bad part about our lease was that it was starting a week after our internship. To overcome the first week we spent it in one of the cheapest motels nearby. The motel was around $70 per night and it was alright but some cockroaches were kind of ruining the experience. Also, never trust "High-speed Wi-Fi" at cheap motels! We paid for it and it was soooo slooow.

My friend was leaving money as a tip for cleaning every day but first few days they did not take it. They were probably not used to tips in this motel level. Eventually they took it maybe because of the message he included with the tip.

Furnishing of apartment

Finally, after a week in motel we moved in to our new apartment. Believe it or not but we did not know if it is furnished of not. I was hoping that there will be at least a bed or something to sleep on like a sofa. Well, it was not furnished. There was nothing there, not even lights. The apartment had just two bedrooms, living room, kitchen, and bathroom.

Seeing the emptiness of our place we went shopping immediately. Our first bet was furniture rental. We thought that it has to be way cheaper and more convenient to rent two beds and two tables than to buy them. After a quick online search we found some places so we went there. We visited around three places and our assumption about price turned out that we were very wrong.

Rental of furniture for bedroom and study room was around $400 per month.

That was not acceptable for us so we went to Target. We wanted to buy a bed, table and chair. Actual beds are expensive so we were thinking to buy just a mattress and put it on the ground, not optimal solution but good enough for three months. However, mattress turned out to be expensive as well and we would not be able to bring it home in our car. Finally, one my friend suggested me to buy an inflatable bed and that actually worked out very well for us. In Target we also bought first round of supplies as well as kitchen stuff such as pan and pot.

Shopping list
Bedroom
Table $20
Office chair $60
Inflatable bed (queen size)$60
Blanket $40
Pillow $10
Mattress pad $40
Kitchen
Pan $20
Pot $30
Cleaning supplies $20
Plate + silverware $15
Trash + bags $20
Bathroom
Shower curtain $15
Toilet paper $10

Total:$360
Figure 1: Shopping list

For table and chair we went to the IKEA store. For those of you who do not know IKEA, it is a furniture store that sells everything in small pieces and you have to assemble it at home. For example if you want to buy a table you go to a show room and choose table top and then legs. You have to write down a part number for both parts and then you go to a big warehouse where you find your parts and put them on your cart. The good part is that stuff there is cheap and small — perfect for us! We bought nice and relatively cheap tables, chairs, and some other little stuff there.

For complete shopping list with prices see Figure 1. The point is that I have bought everything and I spent amount of money equal to one month of furniture rental.

Figure 2: Photos from furnishing the apartment.

Internship at NVIDIA

Internship at NVIDIA was new experience for me in two ways. First, I had to arrange housing and traveling all by myself. Second, I was writing a code for non-PC device that comes with some surprises. This chapter describes how an internship at NVIDIA might feel like.

First day at NVIDIA

The first day started with usual welcome presentation explaining what NVIDIA is and how the basics work. Then there was a row of semi-boring but informative presentations about all the legal stuff, insurance, stock, etc.

The cool part was that in the middle of the program the NVIDIA CEO Jen-Hsun Huang himself came to welcome us. As far as I know we were the only group of interns to have the honor to be welcomed by CEO. That was pretty cool but a few moments of his speech seemed to be a little too much "business talk".

After all the presentations interns were picked up by their mentors or managers. Every intern had a manager and a mentor. The manager was usually manager of whole team where you were interning and the mentor was a software engineer.

I was working in NVIDIA Tegra team (mobile GPUs). First, my manager introduced me to all people in the team. Then I came to my cubical where was a windows computer prepared for me. The funny part was when my mentor said:

Here in the mobile team we work only on Linux. Here is a flash drive with Ubuntu.

So my first task was to format the computer and install Ubuntu. Later I learned that the whole NVIDIA is using windows and mobile division is the only one who uses Linux. The reason for Linux comes from need of compilation of Android OS and other embedded systems based on UNIX.

The second big task was to compile the OpenGL driver locally and push it to a test device. The catch here was similar to Windows/Linux problem. The whole NVIDIA uses Perforce for version control but Android is under GIT. This means that the mobile team is somewhat in the middle using both at the same time.

Initial sync of the repository took more than 3 hours and I left compilation running over the night (it took more than 5 hours or so). It took so long because I was compiling whole Android image that I had to flash on my device. Incremental build of the OpenGL driver took just a few minutes.

First week at NVIDIA

Next day my mentor explained me everything about the NVIDIA's code base, how branches work, and how mobile chips evolved over time. That was very interesting and important because without this overview I would be completely lost. I also met with my manager and we discussed my project and what is expected from me. My first project was to fix "simple" low-priority bugs in the OpenGL driver and in their testing framework. This helped me to understand the driver and the work flow.

Some of those "simple" bugs actually turned out to be very difficult for me. I was fixing a unit test but the driver was throwing a GL error. However, according to the OpenGL specs everything seemed to be just OK. I was thinking, could it be a bug in driver itself? That sounded very unlikely. So I asked my mentor and he said:

Oh yes, an old GPU architecture XXYY does not support this feature.

All the tests are run on all versions of GPUs on many operating systems. It turned out that one old GPU does not support certain feature but all others do. I just put an alternative path for that old generation and test was fixed. The scary part is that if you do not have this knowledge you could never solve this issue. This experience taught me that just understand OpenGL is not enough. The needed knowledge has to be much deeper than that. My mentor and co-workers always amazed me be their knowledge of all the details.

I spent the rest of the first week by working closely with my mentor on understanding how everything works and I was continuing fixing some bugs assigned to me.

Coding at NVIDIA

After a few weeks I have been given a real project for the rest of my internship. It was quite complicated change of the OpenGL driver and it took me around two months to complete it. The final change was around 6000 lines (added, changed, and deleted).

I was coding in Qt Creator IDE. It was suggested to me by my mentor and it is actually quite similar to the Visual Studio. Of course there were some guys coding in Vim or similar console text editors. I used the Qt Creator only as a clever text editor. All the other tasks such as compilation or execution were done in a console.

Since I was developing mobile OpenGL driver I had a testing device. It was a bunch of circuit boards with Tegra SOC mounted on a transparent acrylic glass with a touchscreen connected by a cable. It looked like a little messier Jetson TK1 board but there was an engraved NVIDIA claw logo in the glass that looked really cool. When I was running tests on it you could hear funny sounds of different frequencies. There was also a cooler mounted on top of the Tegra chip and I saw that some guys were even using external fans to "keep it cool" in case of some extensive testing.

Developing a driver for non-PC device was completely new experience for me. It comes with a few aspects that make it really different than just software coding. For example the test device was running some customized NVIDIA version of Android OS which had to be compiled and flashed there first. Sometimes when I was messing with the driver I managed to crash the OS or at least freeze it. The funny part is that if I tried to force-restart the device the boot failed since the driver was "broken". The only way how to fix it was to re-flash the OS.

Another unique aspect of coding the OpenGL driver is the portability. The most students in schools usually do not pay attention to portability aspects of their C/C++ code at all which is quite shame (I would totally try to compile code of my students on all platforms if I would be their C++ teacher! :). Anyways, I was not really well experienced in writing portable code and as you can imagine the driver has to be portable across all operating systems and all platforms you can possibly imagine. This includes all versions of Windows, the most Linux distributions, Mac OSX, and some embedded systems like QNX that are used in automotive sector. The problem is that you possibly cannot test your code locally on all platforms. Once I had a test failure and it turned out that the only failing system was Windows 2000.

The hard part of developing for so many platforms is that sometimes you have to "guess" what is wrong. Such guessing requires a lot of experience. One of those "guessing" problems involved pointer alignment. Some tests were just crashing without any errors. All I did was fixing some allocations/deallocations. Later I had to ask my mentor and after a while we realized that the alignment of the new allocations routines may not be same as before so I fixed the alignment and it worked. The problem was that the original allocations were not explicitly aligned — they just happened to be fine.

Another funny story from coding at NVIDIA is about "monster" files: files that are just crazy. For example I was using "Go to definition" command in my IDE very often and once I pressed the key and the IDE froze. It was some macro definition so I jumped to my web browser and tried to search the definition on the web source search tool and the Chrome web browser froze as well. In the meantime my IDE loaded up the file and it was a header file with more than 70 000 lines of code! Then I searched the whole driver source on my drive and I found that the longest file was more than 100 000 lines (35 MB)! Those files were usually generated but there were also very long files that were not generated or the specifications file that was used for generation was even longer.

Sometimes I was able to find some funny comments in the code. The best one was probably: "// WTF is this?". I also saw a little conversation in the code like this:
"// We don't need this anymore
// Actually we still need this because of XXYY..."

I also found a macro called TRACE_QUAKE in the driver. I am not sure what was the purpose of it but maybe there is a built-in Quake in the driver. You just have to find a correct sequence of driver commands to run it :D

In the middle of my internship I was presenting some of my findings in the team meeting but I was not presenting at the end. The end of my internship came so soon but I kind-of finished my main task.

Meeting "famous" people

In the middle of my project and I was having a conversation with some NVIDIA employees and I noticed that they have quite strong opinion about certain things. Just out of my curiosity I searched their names. The first thing that came out was a Wikipedia page. I thought that is probably somebody else with the same name but the first line on the wiki was: "a graphics software engineer working at NVIDIA". And then I realized that it's actually him.

For anybody who is aware of computer graphics field I was talking with Mark Kilgard, the author of GLUT and lead author of NVIDIA's path rendering library. I was ashamed that I did not realize who he was right away. Another quite "famous" person I had a chance to work with was Gregory Roth. You can see his name on some OpenGL and GLSL specs.

NVIDIA is relatively old company; it has been around since first GPUs. You probably would not be surprised that there are some famous people from area of computer graphics still working there. I just did not realize this fact (and I am really bad in remembering names).

All-hands meetings

A great part of my internship were so called All-hands meetings. Those meetings are company-wide monthly meetings where you get to know road maps, what are people working on, what is coming and much more. Every team has its own so there were Tegra all-hands, desktop all-hands, etc. For non-NVIDIA people like me it's like a little window to the future. For example, I learned about (and saw) new Maxwell-based GPUs months before they were actually released. A demo with four 4K screens connected to a single GPU was really impressive.

NVIDIA works closely with other companies that are directly and indirectly dealing with their products. Once they were presenting highly confidential information about Windows Threshold, a "Windows 9" release that will have some cool features that depends on the driver.

Benefits and fun at NVIDIA

NVIDIA provides some nice benefits, perks, and rich program for their interns over the summer. Some of the regular employees may envy some stuff available for interns and not for them.

Benefits

The first great benefit was reimbursement of relocation and living costs. NVIDIA pays a flat amount for housing and reimburses the relocation costs. In my case it covered nearly the whole rent.

On top of that NVIDIA offers $200 transportation bonus that can be claimed by submitting gas receipts, public transport tickets or even a bike. So I bought a bike for $215 from craigslist including a helmet and a lock — that was a good deal.

All employees have some yearly credit for NVIDIA gear store so I bought a couple of T-shirts. Every employee also have one-time $200 subsidy for any Tegra-based device. This includes tablets, phones, or shield devices. I bought a Shield tablet that was for $400 so I paid only half. Some interns were asking if the Tegra subsidy is available for the Tesla Model S since there is Tegra processor inside, that's how much we earn here! (just kidding :). The best case for Tegra subsidy was suggested by another intern: The Dragon v.2 space capsule that has also multiple Tegra processors inside!

Another great benefit was a health insurance. It may sound useless but NVIDIA's health insurance is really cheap and the benefits are great. For example I broke my glasses during the internship. Because I paid extra few cents per month for vision plan I was able to buy new prescription glasses for 20% of their original price. And if you have troubles with teeth the dental plan is also great.

There are more convenient services at NVIDIA such as on-size hair cuts or car inspections.

Food

Having a good place to eat near your work place is really important. NVIDIA has three cafeterias where they serve breakfast, lunch, and dinner. The food is not free as in Google but average lunch was $6 flat. There was $5 discount for dinners so I ended up having free dinners.

The food in the main cafeteria was usually very good, freshly cooked in front of your eyes. The only bad part was that my team was working across the road from the main building and getting there and back was quite a waste of time. There was a closer place on our side of the road but the choices there were substantially limited.

Figure 3: Some dishes from NVIDIA cafeterias.

I was coming to work around 10 am. By that time breakfast was already over so I usually brought a sandwich from home. Around 12:30 pm our team had a lunch together. It does not sound special but a lunch with whole team was one of the best parts of my internship. Many other interns were eating with each other or even alone which really takes the whole social aspect away.

Thanks to the common lunches I get to know all my team members quite well. It is nice to know people around you. The work place feels suddenly much closer to you.

We were always discussing some stuff over the lunch. Sometimes it was work related and sometimes it was not. The lunch was a great opportunity to ask about minor problems about my project without explicitly bothering anybody in the office.

Intern events

NVIDIA organized several events for interns over the summer. I would categorize the events into two categories: "fun" and "educational".

The two major fun events were paintball and scavenger hunt in San Jose downtown. It was fun end events were well organized. There were also some minor events like trivia night or even lan-party organized by interns.

There was also one charity event were interns volunteered to assemble bikes for kids. That was a nice opportunity to give back to community.

The educational events were presentations from VPs (Vice Presidents) from across the NVIDIA. We have enjoyed speakers from CUDA division, Research organization, GPU road map, SHIELD, and Software. I have to say that those presentations were really awesome! It was really cool to hear how NVIDIA works from inside and what is coming in near future. I think that many of regular employees actually do not have the chance to hear what we interns heard.

Out of all the presentations I would like to mention one from co-founder of NVIDIA Chris Malachowsky. He started with standard explanation of NVIDIA products but then he basically told the whole story of NVIDIA. The story was told from the very beginning where he and his friends left their work to create a new company that will produce the best GPUs in the world.

The series of talks was finished by talk of NVIDIA's CEO Jen-Hsun. He did not prepared any slides because he was answering questions from interns for an hour. His stories were also really interesting. At the end he invited all interns to his house for a party!

Figure 4: Paintball event organized by NVIDIA.

Party at Jen-Hsun's

Ok, so in case you still did not get it: CEO of NVIDIA invited all interns for a party to his own house. How awesome is that? Jen-Hsun was so kind with his invitation and he even opened doors to all rooms in his house so we could see them. It is very unusual feeling when a "celebrity" like him is suddenly standing next to you with a beer in his hand and talks with you like everybody else.

Next to his house was really nice garden with a pool and grill. There was food and drinks prepared for all interns and later some deserts were served as well.

My friend was really curious about Jen-Hsun's car but we could not find it. We approached to him and asked about his car. He said:

Oh yeah, my car is in the garage, please feel free to go there and check it out. Or you know what? Let me show it to you!

So we went with him to his garage, he opened it and said:

Right, I know why you did not find it. The car is in the second floor.

Yeah, his garage has second floor. He made joke that he needs to store his cars somewhere and one floor was not enough. Then he lowered the second floor. There it was. Bright red Ferrari covered by red silk sheet. He uncovered if and jumped in and started it up! Just awesome! Then he offered one female intern to go inside and try it so she did. She seemed quite nervous (and who wouldn't be :).

Later in the evening Jen-Hsun was just talking with the interns in the garden. One intern asked him how did he got people at the beginning of NVIDIA. His answer was that he was just calling to people he knew. He told us that one of his friends wanted to come but his wife did not allowed it because in that time NVIDIA had no health insurance plan. He joined later on though.

I have to say that this event was way above my expectations from the internship at NVIDIA.

Traveling around California

A big part of this internship was traveling. This was mostly because me and my friend went by car from Indiana to California and back. If you are on internship in California I highly recommend you to visit some of the national parks there. I have to admit that I was really surprised by the beauty of the national parks. Pictures cannot capture the scale and depth of the real experience.

In this chapter I go over all the places I have visited during my internship. You can take this as a travel advisory or just bunch of nice pictures.

Arches National Park

Arches National Park is located in eastern Utah and it is known for containing over 2000 natural sandstone arches. The lucky composition of materials and erosion gave birth to all the amazing arches. The erosion process is still happening and it is possible that there might be no arches left in a thousand years, so remember to take pictures! :)

Red Canyon

Red Canyon is on the way to Bryce Canyon. This place is very interesting because there is sudden change of land from green to red. We stopped there just for 15 minutes but the view was amazing.

Bryce Canyon National Park

Bryce Canyon National Park is located in southwestern Utah. The beauty of this park is that it is very unexpected. Unlike Arches, Bryce Canyon is somewhat hidden. You do not know what to expect until you get out of car and walk to the cliff. Unfortunately there was no time to hike there but you can actually go down to the canyon.

Las Vegas

I know that Las Vegas is not national park but it is worth visiting if you are going around. I am personally not very much into crazy partying and drinking but Las Vegas has something for everybody!

Me and my friends stayed in hotel called Stratosphere that has 350 m (1150 ft.) tall tower which is actually the tallest point is Las Vegas. On top of the tower there are some crazy thrill rides and of course a bar.

Joshua Tree National Park

Joshua Tree National Park is located in southeastern California. It is named after the Joshua trees that are very distinct and grow in high concentration through the park. One thing that amazed me about Joshua trees is that they are somewhat hybrid between traditional trees and palm trees. As you may know, traditional trees grow wood and form tree rings in the wood and branches rapidly. On the other hand palm trees have no tree rings and they do not branch at all. Joshua trees grow like palm trees but they actually branch.

Hoover Dam

Hoover Dam is located southeast of Las Vegas on the border of Nevada and Arizona. This marvelous piece of engineering was built in 1936 and its installed capacity of 2 GW is equal to a nuclear power plant. Nowadays, the water level is relatively low and you can clearly see where the water used to be because the rock turned white.

Death Valley National Park

Death Valley is a desert valley located in Eastern California. It is the lowest, driest, and hottest area in North America (hence the name). It was so hot there that our car was not able to cool down the air in the car so we were sweating all the way. The fact that there is actually water is quite interesting to me.

Crowley Lake

Crowley Lake was created in 1941 by the building of the Long Valley Dam by as storage for the Los Angeles Aqueduct and for flood control.

Yosemite National Park

Yosemite National Park is located in eastern portion of state California. Yosemite is really spectacular place! You can find there Yosemite Falls, the highest waterfall in North America with height 739 m (2425 ft.). The park also has ancient Giant Sequoia trees which are one of the tallest and longest-lived tree species. Yosemite has an elevation range from 648 to 3997 m (2127 to 13114 ft.). Definitely a place to visit at least for a whole weekend!

Lake Tahoe

Lake Tahoe is located along the border between California and Nevada. It has surface elevation of 1897 m (6225 ft.) and it was formed about 2 million years ago. It is known for the clarity of its water which is unfortunately decreasing at an average rate of 0.25 meters per year. Lake Tahoe is very nice area for camping, hiking or even skiing but I disliked the amount of tourists there.

Yellowstone National Park

Yellowstone National Park is located in northwestern part of Wyoming. Half of the world's geothermal features are in Yellowstone, fueled from underground by the largest super-volcano on the continent centered over the Yellowstone Caldera. Yellowstone also has one of the most famous and most predictable geysers Old Faithful. Definitely another place to visit over a weekend!

Mount Rushmore National Memorial

The Mount Rushmore National Memorial is located in southwestern part of South Dakota. You might know it as "president heads in a rock" because that's what it is. In case you want to be smart and know the names (left to right): George Washington, Thomas Jefferson, Theodore Roosevelt and Abraham Lincoln.

Other places worth visiting

Following places were on my list but I had no time to visit them:

Conclusion

In conclusion the summer internship at NVIDIA was really great experience! I had a chance to meet and work with some "big names" in computer graphics field as well as talented people in my team. Now I am looking forward for releases of all the cool GPUs I have learned about.

Thank you for reading all the way here. I hope that the information here will encourage some of you to apply to NVIDIA or other similar company in the Silicon Valley.

To conclude this article I will answer the number one question everybody asks me:

What was better? Google or NVIDIA?

A short answer is in the next few paragraphs.

NVIDIA vs. Google

First let me say that this answer is very biased. The experience depends on many factors like the team, project, location, friends, and many more.

Anyway, overall I feel that my Google internship experience was better than NVIDIA's. It was better especially in the coding aspect. I liked the coding infrastructure at Google better. All the tools were working together beautifully, code review process was straight forward, testing was seamless.

At NVIDIA I was sometimes waiting a day for some test results that told me that my code just crashed. My problem with NVIDIA might be caused by the Linux/Windows split between "mobile" and "the rest" parties. There were some incompatibilities that were causing non-smooth coding. Also, NVIDIA produces hardware which makes the code more low-level and heavy on various macros.

However, I have to say that the coding situation in NVIDIA is changing and improving rapidly. Many services are getting web-based interfaces and the whole OS dependency is getting thinner. Only for the time I was in NVIDIA there were several tools developed to address the issues.

There were also things that I enjoyed more in NVIDIA than in Google. Everyday lunch with all team members was really great experience. And yes, the party at Jen-Hsun Huang's house was just incredible! Thank you for the experience of a lifetime!

This post is licensed under CC BY 4.0 by the author.

© Marek Fiser. Content license: CC BY 4.0

Built with a home-grown static site generator.