I'm using the below code to get an array of elements from list that sum to value. However, it only using 1 CPU. My PC has 64 cores so I want to use 100% CPU to speed up the process, so could you please help me update the code to use Parallel.ForEach (multiple threads)?
using System;
using System.Collections.Generic;
using System.Linq;
IEnumerable<List<int>> subset_sum(IEnumerable<int> numbers, int target,
IEnumerable<int> partial = null, int partial_sum = 0)
{
partial ??= Enumerable.Empty<int>();
if (partial_sum == target) yield return partial.ToList();
if (partial_sum >= target) yield break;
foreach (var (n, i) in numbers.Select((n, i) => (n, i)))
{
var remaining = numbers.Skip(i + 1);
foreach (var subset in subset_sum(
remaining, target, partial.Append(n), partial_sum + n))
yield return subset;
}
}
var numbers = new List<int> { 3, 9, 8, 4, 5, 7, 10 };
var target = 15;
foreach (var subset in subset_sum(numbers, target))
Console.WriteLine($"[{string.Join(", ", subset)}] = {subset.Sum()}");