Wednesday, June 13, 2007

LabVIEW Performance, The Early Years

I started working at NI in 1988, when LabVIEW 1 was shipping. LabVIEW 1 was so cool. But once you got past the awesome (for the 1980's) graphics and graphical programming paradigm and started to use it for real work, you noticed that it was a tad slow.


We learned a lot doing LabVIEW 1. So much so that we decided to throw away the source code and start over with LabVIEW 2. While LabVIEW 1 was an interpreted language, LabVIEW 2 was built from the ground up to be compiled. And when it came out in 1990, LabVIEW 2.0 demonstrated much better performance. For some applications, it was an order of magnitude or more faster. (So fast, in fact, that we ran into problems talking to many GPIB instruments that couldn't keep up with commands we were sending.)


LabVIEW 3 released in late 1993, and was the first version of LabVIEW that unified our original Macintosh codebase with our PC and Sun versions. Soon after, I created the first presentation to customers about LabVIEW performance...



In May 1994, I was invited to Sweden to present "Tips & Techniques for Improving LabVIEW Performance". It discussed how to take advantage of the many performance optimizations available in LabVIEW, and also discussed patterns to avoid, such as local variables. (Don't worry, I'll cover these in subsequent postings.)


My presentation was based on some earlier technical notes, as well as an article by Monnie Anderson in the now defunct LabVIEW Technical Resource. (LabVIEW Memory Secrets, Volume 2, Number 1, Winter 1994)


Before I left for Stockholm, I practiced the presentation in front of the LabVIEW team. This turned out to be a great experience—I presented to the toughest audience first. It did yield one unexpected result: the LabVIEW development team did not agree on how LabVIEW worked!


More precisely, I had found a common situation where LabVIEW made an extra copy of data that unexpected and unnecessary. Within a few days, our compiler expert had a fix that later came out in LabVIEW 3.1.


Why am I telling you these stories? Even though the latest LabVIEW is many orders of magnitude faster than LabVIEW 1, and even though we can handle much more complicated applications than we could a couple of decades ago, we're not resting. We're still working on performance issues today.


For example, we've seen much growth in the use of multi-core processors in affordable PCs. While LabVIEW has been ahead of this curve and able to take advantages of multiple processors and cores since our 1998 release of LabVIEW 5.0, we're continuing to look at new ways to leverage all this computing power.


Another reason for these stories is to make it clear that performance issues are sometimes difficult to understand. And I'm hoping that my future blog posts will help clarify these for you.


Next up... The three kinds of data in LabVIEW.


5 comments:

Jim Kring said...

Hi Brian,

Thanks for the history lesson -- very interesting. It's exciting to know that NI's committed to making LabVIEW run ever-faster. And, I'm looking forward to your next post, three kinds of data in LabVIEW :-)

Cheers,

-Jim

Yen said...

Yeah, three kinds of data. That's boolean, numeric and string, right? (I'm probably gonna get stoned for this if I don't include a smiley - ;) ).

History is always good to learn. I'm personally interested in the history of the inplaceness algorithm and various other methods of reducing memory copies.

akamu said...

Is there a complete release history documented somewhere online for LabVIEW?

Leaving out minor releases and patches (ie; 6.1.1, 5.1f1), roughly, it looks like...
1986 LabVIEW 1.0
1990 LabVIEW 2.0
1993 LabVIEW 3.0
1994 LabVIEW 3.1
1996 LabVIEW 4.0
1998 LabVIEW 5.0
1999 LabVIEW 5.1
2000 LabVIEW 6.0
2002 LabVIEW 6.1
2003 LabVIEW 7.0
2004 LabVIEW 7.1
2006 LabVIEW 8.0
LabVIEW 8.1
LabVIEW 8.2
2007 LabVIEW 8.5

Brian Powell said...

I don't know if we have anything that's both official and that explicit. We do have a Company History web page that lists some of these events.

The dates you list are mostly right, but you left out a few releases that have historical significance.

LabVIEW 2.5 was the first release for Windows and Sun, and it came out in 1992.

3.0.1 was the first NT release in 1994.

3.1.1 was the first version to have the "application builder" capability, in 1995.

4.1 came out in 1997.

6.1 was right around the end of 2001, but I don't actually know if it shipped to customers in 2001 or 2002.

8.0 was another end-of-year release, and I think it went out before the end of 2005.

There was no 8.1, and 8.20 did go out in 2006.

akamu said...

Okay... thanks BP!
Updated with additions and corrections:

1986 LabVIEW 1.0
1990 LabVIEW 2.0
1992 LabVIEW 2.5
// first release for Windows and Sun
1993 LabVIEW 3.0
1994 LabVIEW 3.0.1
// first relase for Windows NT
1994 LabVIEW 3.1
1995 LabVIEW 3.1.1
// first release with "application builder" capability
1996 LabVIEW 4.0
1997 LabVIEW 4.1
1998 LabVIEW 5.0
1999 LabVIEW 5.1
2000 LabVIEW 6.0
2001 LabVIEW 6.1
2003 LabVIEW 7.0
2004 LabVIEW 7.1
2005 LabVIEW 8.0
2006 LabVIEW 8.2
2007 LabVIEW 8.5