Nonblocking Algorithms and Scalable Multicore Programming
queue.acm.org
queue.acm.org
A few years ago, I had to help our EEs write some testing software in LabVIEW. I was blow away by how elegantly it solves concurrency and fault tolerance to bad data. It took no extra design to utilize multiprocessing and multithreading hardware. All of the deadlock and race conditions problems that threads introduce were a thing of the past.
Has anyone else had a similar experience? Why don't more people use LabVIEW or languages like it outside of data acquisition?
The following year we switched to C++, which compiled in <10s on the same machine. Supposedly LabVIEW got some performance tweaks, but we didn't bother to check back with it.
So while I never used the multithreading aspects of it (And I can see how they would work, variables are passed in such a way to explicitly lay out what modifies them), I can easily see people having issues with LabVIEW.
My experience was very different from yours. I couldn't believe how simple it was to add an additional test in parallel. It was just a copy/paste, update the functions, test parameters, and I/O. If only writing multithreaded code was that simple. After my experience, I could see how LV could be a good fit for computer vision apps running on highly parallel architectures.
It's too bad there aren't any other modern, open dataflow languages out there. I wonder how much research academia has put into dataflow concurrency.
I wouldn't call LabVIEW open, though - isn't a retail copy close to $3000? (might be another reason it isn't as commonly used)
Me too! Anybody here know about this?
It's an elegant abstraction but by no means is it unique. Haskell springs to mind as another language with a similarly elegant abstraction for parallelism. I'm necessarily generalizing a bit but I would say that all these "automagical parallelizing" systems suffer from the problem of not working very well unless the granularity of parallelism the runtime was designed for matches the granularity of parallelism that your program has.
For FPGA programming it worked great. LabView by design is fully parallel, which is exactly what you want in this case: it's like having 1000s of small, independent CPUs. With VHDL it took an order of magnitude more time to achieve the same. Also it was easy with LV to tweak the low level details until everything fits in the 3M or so gates available.
Other use case would be when the customers of your app are only engineers who know LabView. They (might) accept the limitations in exchange of quick tweaking here or there.
For anything else I would avoid LV. Larger projects are very hard to maintain, the declarative programming will scare most of the developers away and I could not find any advantage over mainstream programming languages.