Posts in Category "General"

November 14, 2011

Speaking this week at the SC11 conference in Seattle

I’m privileged to once again be speaking at the SC conference. For those who don’t know it; “SC is the International Conference for High Performance Computing, Networking, Storage and Analysis.” If you are attending, I’ll be on a panel entitled Parallelism, the Cloud, and the Tools of the Future for the next generation of practitioners. I’ll be joining some of my compatriots in the Educational Alliance for a Parallel Future to once again discuss the skill sets that collegiate computer science programs should (and mostly aren’t) imparting to their students in the areas of parallel programming.

The abstract for the panel is as follows:

Industry, academia and research communities face increasing workforce preparedness challenges in parallel (and distributed) computing, due to the onslaught of multi-/many-core and cloud computing platforms. What initiatives have begun to address those challenges? What changes to hardware platforms, languages and tools will be necessary? How will we train the next generation of engineers for ubiquitous parallel and distributed computing? Following on from the successful model used at SC10, the session will be highly interactive, combining aspects of BOF, workshop, and Panel discussions. An initial panel will lay out some of the core issues in this topic with experts from multiple areas in education and industry. Following this will be moderated breakouts, much like collective mini-BOFS, for further discussion and to gather ideas from participants about industry and research needs.

If this sounds similar to the session from the Intel Developer Forum in September, there is good reason. It was the second most popular session of that conference. The IDF panel and breakout sessions covered some really interesting ground, and I really liked the format. I felt like the discussions I had with the people in my subgroup at IDF were deeper, more specific and more productive than a traditional panel format would have been.

While the speakers in this panel are different than the one in September, I think we’ll still end up splitting on the axis of using abstractions to teach fundamentals vs teaching from the first principles up. Which camp you are in seems at least somewhat determined by the fact that a number of panelists produce abstractions over the low-level elements as part of their work. I am very much in the fundamentals camp as I think that understanding what the abstractions are built on is fundamental to choosing the right abstraction, much as artists tend to start with representative figure drawing. What will make an interesting difference from IDF is the number of audience members who come from outside of computer science (HPC is used more by scientists for whom the computation is only a means to the end of solving a problem in a non-computational discipline). Those audience members are less likely to understand the fundamentals, nor care. For them parallelism is just a tool to get their answer faster. This should really make for a lively debate!

My statement for the panel is as follows (yes, I did crib the last paragraph from my earlier position):
The team I manage is building a single, modern, software product. A few years ago, that would have meant a desktop application written primarily in C++, most likely single-threaded. Today, it means software that runs on the desktop, but also on mobile devices and in the cloud. Working in my organization are developers who write shaders for the GPU, developers who write SSE (both x86 and ARM), developers using distributed computing techniques on EC2 and threads everywhere throughout the clients and server code. We write code in C, C++, ObjC, assembly, Lua, Java, C#, Perl, Python, Ruby and GLSL. We leverage Grand Central Dispatch, pThreads, TBB and boost threads. How many of the technologies that we use today in professional software development existed when we went to school? Nearly none. How many will still be used in a few years from now? Who knows. The reason we can continue to work in the field is that our education was grounded not just in programming techniques for the technology of the time, but also in computer architecture, operating systems, and programming languages (high level, low level and domain-specific).

Learning GPGPU was much easier for me because I could understand the architecture of graphics processors. I was able to understand Java’s garbage collection because I understood how memory management worked in C. I chose TBB over Grand Central Dispatch to solve a specific threading problem because I could evaluate both technologies given my experience
with pThreads.

We’re doing students a disservice if we teach them the concepts using high-level abstractions or only teach them a single programming language. Having an understanding of computer architecture is also critical to a computer science education.

These fundamentals of computer science do not necessarily need to be broken out into their own classes. They can and should be integrated throughout the curriculum. Threading should be part of every course. It is a critical part of modern software development. Different courses should use different programming languages to give students exposure to different programming models.

If I was a Dean of Computer Science somewhere, I¹d look to creating a curriculum where parallel programming using higher-level abstractions was part of the introductory courses using something like C++11, OpenMP or TBB. Mid-level requirements would include some computer architecture instruction. Specifically, how computer architecture maps to the software that runs on top of it. This may also include some lower level instruction in things like pThreads, Race conditions, lock-free programming or even GPU or heterogenous programming techniques using OpenCL. In later courses focused more on software engineering, specific areas like graphics, or
larger projects: I¹d encourage the students to use whichever tools they found most appropriate to the tasks at hand. This might even include very high level proprietary abstractions like DirectCompute or C++AMP as long as the students could make the tradeoffs intelligently because of their understanding of the area from previous courses.

You can read the position statements from the rest of the panel here.

11:09 AM Permalink
June 14, 2011

looking for a black box tester for my new team

A new position with my new team has just been posted: Software Quality Engineer – Mobile Photography Products

Position Summary
A brand new product team in the Professional Digital Imaging group is looking for an experienced black box quality engineer.
Responsibilities
  • Ability to work in an agile development environment.
  • Work closely with developers and white-box quality engineers on the design and specification of features.
  • Perform hands-on testing of daily builds on actual devices.
  • Monitor customer feedback and ensure that reported issues are fed back to the team in the form of verified bug reports.
  • Critically think about how consumers will interact with the software being tested and turn those thoughts into bugs, action items, and avenues of discussion.
  • Work extremely well with others by both leading and following depending on the circumstance.
  • Continually research new mobile technologies and incorporate that new knowledge into your ongoing QA process.
  • Create and maintain a collection of test assets to thoroughly exercise the application.
  • Accurately file and verify comprehensive bug reports.
Requirements
  • Minimum of five years software Quality Engineering experience.
  • Passion for mobile devices and other gadgets.
  • Passion for photography.
  • Ability to achieve results with little supervision or direction.
  • Flexibility to move between tasks.
  • Ability to avoid distractions and deliver against deadlines.
  • Demonstrated knowledge of QE methodology, processes and tools.
  • Strong problem solving skills.
  • Excellent written and verbal communication skills.

Ideal

  • Experience testing on Mobile Operating Systems.
  • Understanding of UI Automation Test tools.
  • Experience with Agile development processes.

Sound interesting? Apply!

If you are a QE who can sling serious code, I still have two white box positions open:

Computer Scientist, Quality Engineering – Mobile Photography Products (08478)
Computer Scientist, Quality Engineering – Mobile Photography Products (08481)

1:33 AM Permalink
June 10, 2011

comments

I just approved and then changed my mind and un-approved a comment. The comment was a fair, if somewhat harsh, criticism of the Pixel Bender Toolkit. I originally decided to approve it because it was one person’s opinion and a response to something I wrote, and I don’t mind answering criticisms (even when they are worded less-than-delicately). However, I changed my mind because the writer decided not to include a valid name or e-mail to respond to.

So, that will be a rule I’m going to hold on to moving forward. If you want to post your honest opinion to something I write, I will always try to honor you and will post it; and respond. As long as your comments are:

  • honest
  • not advertising
  • not overt flame-bait
  • do not swear
  • are signed with your real name (or handle) AND e-mail address (which is not published, but lets me know that you are willing to put your name to something)

Hopefully, this should not strike anyone as draconian.

JJ, if you want to re-post with your real name and e-mail address, I will gladly approve your comment.

7:40 PM Permalink
May 17, 2011

Speaking on the “Teach Parallel” show on IntelTV tomorrow

Tomorrow morning, I’ll be speaking with Paul Steinberg of Intel and Tom Murphy of Contra Costa college about the criticality of understanding parallel programming techniques for industry.

In my previous role on the Adobe Image Foundation, it was an obvious requirement for our hiring candidates. We were building tools for a insanely parallel problem, image and video processing. Now that I’m working on a new product, it would maybe seem that it would not be as important. In fact, our threading models are even more complicated than in my previous group. My expectations around threading knowledge for incoming candidates are just as high.

Even the most modest mobile hardware is going (or has gone) parallel. In addition, the expectations from a user perspective around interactivity with their applications is never higher. A laggy touch interface is death to an application (or a platform). Going to get coffee while your image renders on a desktop is a thing of the past. User’s expectations of the software we write is higher than ever and it is nearly impossible to get this interactivity without taking advantage of multi-threading on today’s multi-core processors.

The tools continue to improve, but the threading models continue to evolve. A fundamental understanding of multi-threading is critical for anyone moving into Software Engineering or looking to stay current in their field.

I always enjoy talking with Paul and Tom, and expect that we’ll have a lively conversation.

Tune in live on May 17, 10:00 AM PDT

Here is Paul’s post on the subject.

12:51 AM Permalink
March 12, 2011

Looking for some experienced white-box quality engineers!

I’ve just posted two new job openings to the Adobe jobs website.

check ‘em out:
Computer Scientist, Quality Engineering – Mobile Photography Products (08478)
Computer Scientist, Quality Engineering – Mobile Photography Products (08481)

This is a really exciting opportunity to build something brand new! here is more info about the gig:

Computer Scientist, Quality Engineering – Mobile Photography Products

Position Summary

A brand new product team in the Professional Digital Imaging group is looking for experienced white box quality engineers with a passion for Photography to help us create an entirely new product family as part of one of the world’s most recognized brand names. Do you have good coding skills and a commitment to the art and science of producing quality products? If you enjoy working with advanced technologies, aren’t intimidated by aggressive goals, and have a proven commitment to delivering great software, this may be the role for you.

Responsibilities

* Ability to work in an agile development environment.
* Interest in developing test tools and infrastructure for new coding models and languages.
* Work closely with developers on the design and specification of features.
* Code and develop comprehensive test media that will test and emulate scenarios for existing and new API’s.
* Create and run automation.
* Perform hands on testing of daily builds on actual devices.
* Critically think about how consumers will interact with the software being tested and turn those thoughts into bugs, action items, and avenues of discussion.
* Work extremely well with others by both leading and following depending on the circumstance.
* Continually research new mobile technologies and incorporate that new knowledge into your ongoing QA process.
* Accurately file and verify comprehensive bug reports.

Requirements

* Minimum of five years software Quality Engineering experience.
* Proficiency writing code and developing test automation.
* Passion for mobile devices and other gadgets.
* Passion for photography.
* Ability to achieve results with little supervision or direction.
* Flexibility to move between tasks.
* Ability to avoid distractions and deliver against deadlines.
* Excellent written and verbal communication skills.
* BS or MS Computer Science degree or equivalent industry experience.

Ideal

* Professional on the job experience using C++, Objective C, Java, or Lua.
* Experience testing on Mobile Operating Systems.

[Updated 3/15/2010 to include direct links to the job postings]

3:42 AM Permalink
March 9, 2011

Looking for a graduating college senior or masters candidate for my new team

I’m looking for a graduating CS, EE or ECE major with an interest in Photography, mobile and good experience with C-based languages to work with my group. This position is for a new graduate only.

Go to Adobe Jobs website and search on job ID 05714.

1:24 AM Permalink
March 3, 2011

Moving on…

After many happy and productive years working on Pixel Bender and the Adobe Image Foundation, I’ve decided to take on some new challenges. I’m still at Adobe, but I’m now building a new team and launching a brand new product in the Photoshop family. I can’t say too much yet, but I will have news soon. I’ll still be posting about Pixel Bender stuff here (I’m still a very enthusiastic user!), but for the newest news, you should now also watch the official Pixel Bender blog.

5:52 PM Permalink

New Pixel Bender blog now live

The Pixel Bender team now has an official Pixel Bender blog. I’ll keep posting Pixel Bender stuff here, of course, but that will now be the official and primary location for Pixel Bender news.

5:47 PM Permalink
October 18, 2010

Come work for my team!

Are you graduating in the next year or have you graduated recently from a bachelor’s or master’s program? I’m looking for a new college hire for my team. Go to http://www.adobe.com/aboutadobe/careeropp/ and look in the North American jobs area for job #5543.

Here is the description:
Position Summary
The Adobe Image Foundation team is looking to hire a graduating bachelor’s or master’s degree student with in interest in creating new technology and services in the digital media arena. Candidate would work with existing high-powered team who have contributed to Photoshop, After Effects, Flash and other Adobe digital media authoring applications. The team has members in both Seattle, WA and San Jose, CA and the successful applicant would be able to work in either location.

Responsibilities

* Work with existing team members to extend existing software and tools and move into services realm.
* Help team extend existing GPGPU and multi-core algorithms to run efficiently within the server environment
* Help investigate ways of bringing High-Performance computing techniques to work within a data-center context and cost envelope.

Requirements

* Bachelor’s or Master’s degree in Computer Science, Electrical Engineering, Computer Engineering or related field
* Strong C++ language skills
* Experience doing some services development
* Interest and/or class work in some of the following areas computer graphics, multi-threading, computer vision, signal processing, distributed systems, real-time systems, High Performance Computing, or GPGPU.
* Desire to learn, grow and invent!

Please submit your resumes on-line. Thanks!

11:09 PM Permalink
September 28, 2010

Recordings from the Intel Developer Forum

Here is the recording from the panel I was on: Parallelism and Education: Navigating through a Sea of Cores with Dr. Daniel Ernst (University of Winsconsin-Eau Claire), Dr. Ryan Newton (Intel), Dr. Mathew Wold (Intel), Dr. Michael McCool (Intel), and Thomas Murphy (Contra Costa College)
http://intelstudios.edgesuite.net/idf/2010/sf/aep/ACAP001/ACAP001.html

After the Panel session, I was on an episode of Teach Parallel on Intel Software Network TV with Dr. McCool, Professor Murphy and Paul Steinberg.

There were a lot of other good panels on educating developers for the current parallel architectures that are archived on the Intel site.

10:21 PM Permalink