Non sono del tutto sicuro su cosa rispondere a questa domanda, ma mi vengono in mente due possibilità immediate:
Scala
Dato che stai già descrivendo il problema in modo funzionale e dichiari esplicitamente che non hai uno stato condiviso, l'API di raccolta parallela di Scala sembra una soluzione perfetta per il problema. Tuttavia, potrebbe non fornire le massime prestazioni (vedere sotto per quello), ma richiederà certamente solo un piccolo sforzo per l'installazione. Qualcosa di simile al seguente è tutto ciò che serve davvero:
myList.par.filter(goodBadCondition)
Il .par
trasforma qualsiasi raccolta in una parallelizzata, che esegue operazioni come filter
in parallelo usando il fork / join-support di JVM. Si noti che le operazioni di raccolta parallela sono stabili, ovvero l'ordine degli elementi della lista originale rimane lo stesso nel risultato (per quegli elementi che hanno superato la condizione).
basato su GPU
Se vuoi davvero spremere il massimo delle prestazioni, lasciare che la GPU esegua il filtraggio sembra la soluzione perfetta. In questo caso, la maggior parte della perdita di velocità deriva dal dover inviare dati alla / dalla GPU. Mentre l'operazione che si desidera eseguire è perfetta per qualcosa come Cuda, non sono del tutto sicuro che valga la pena. Ad esempio, se la tua condizione è molto semplice ed estremamente veloce da controllare, allora il sovraccarico di dover trasferire l'intera lista alla GPU potrebbe non ripagare su una CPU quad core che può elaborare l'intera lista nella sua memoria.
D'altra parte, se le condizioni del filtro sono costose da controllare, è possibile controllare più elementi contemporaneamente rispetto a una CPU. A seconda della carta che utilizzi, puoi eseguire decine di centinaia di core GPU per eseguire il lavoro.
Tuttavia, lo sforzo di implementazione di questo approccio è molto più alto di quello sopra. Devi anche avere molta più conoscenza sulla programmazione della GPU e avrai bisogno di molto codice per un compito apparentemente banale (i nuovi framework per semplificare questo stanno cominciando ad apparire però).