KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
So scala 2.9 recently turned up in Debian testing, bringing the newfangled parallel collections with it. Suppose I have some code equivalent to def expensiveFunction(x:Int):Int = {...} def process(s:List[Int]):List[Int} = s.map(expensiveFunction) now from the teeny bit I'd gleaned about parallel collections before the docs actually turned up on my machine, I was expecting to parallelize this just by switching the List to a ParList ... but to my surprise, there isn't one! (Just ParVector , ParMap , ParSet ...). As a workround, this (or a one-line equivalent) seems to work well enough: def process(s:List[Int]):List[Int} = { val ps=scala.collection.parallel.immutable.ParVector()++s val pr=ps.map(expensiveFunction) List()++pr } yielding an approximately x3 performance improvement in my test code and achieving massively higher CPU usage (quad core plus hyperthreading i7). But it seems kind of clunky. My question is a sort of an aggregated: Why isn't there a ParList ? Given there isn't a ParList , is there a better pattern/idiom I should adopt so that I don't feel like they're missing ? Am I just "behind the times" using Lists a lot in my scala programs (like all the Scala books I bought back in the 2.7 days taught me) and I should actually be making more use of Vectors ? (I mean in C++ land I'd generally need a pretty good reason to use std::list over std::vector ).
Tags (comma-separated)
Save Edits
Cancel