Middle
Արդյո՞ք պետք է օգտագործել ասինխրոնություն՝ մեծ զանգվածի տարրերի գումարը հաշվելու համար, որը պարունակում է միլիարդ թվեր։
sobes.tech AI
Պատասխան AI-ից
Այո, մեծ զանգվածի տարրերի գումարը հաշվելու համար ասինխրոնության կիրառումը արդարացված է: Այդպիսի առաջադրանքը լավ է պառալելիզացվում, քանի որ գումարը միացյալ գործողություն է:
Մասիվը կարելի է բաժանել մի քանի մասի և հաշվել յուրաքանչյուր մասի գումարը միաժամանակ, օրինակ՝ օգտագործելով Task կամ Parallel.For C#-ում:
using System;
using System.Threading.Tasks;
class Program
{
static void Main()
{
long[] largeArray = new long[1_000_000_000];
// Մասիվի ինիցիալիզացիա...
int processorCount = Environment.ProcessorCount;
long[] partialSums = new long[processorCount];
Parallel.For(0, processorCount, i =>
{
int start = i * largeArray.Length / processorCount;
int end = (i + 1) * largeArray.Length / processorCount;
long sum = 0;
for (int j = start; j < end; j++)
sum += largeArray[j];
partialSums[i] = sum;
});
long totalSum = 0;
foreach (var sum in partialSums)
totalSum += sum;
Console.WriteLine($"Ընդհանուր գումարը՝ {totalSum}");
}
}
Այս մոտեցումը զգալիորեն արագացնում է հաշվարկը՝ օգտագործելով բոլոր հասանելի միջուկները։