Sobes.tech
Middle

Ar reikėtų naudoti asinchroninį skaičiavimą, kad būtų apskaičiuotas didelio masyvo, turinčio milijardą skaičių, elementų suma?

sobes.tech AI

Atsakymas iš AI

Taip, asinchronijos taikymas skaičiuojant didelio masyvo elementų sumą, kurio dydis yra milijardai skaičių, yra pagrįstas. Tokia užduotis gerai paralelizuojasi, nes suma yra asocijuota operacija.

Masyvą galima padalinti į kelias dalis ir skaičiuoti kiekvienos dalies sumą paraleliai, naudojant pavyzdžiui, Task arba Parallel.For C# kalboje:

using System;
using System.Threading.Tasks;

class Program
{
    static void Main()
    {
        long[] largeArray = new long[1_000_000_000];
        // Masivo inicializacija...

        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($"Bendra suma: {totalSum}");
    }
}

Šis požiūris žymiai pagreitins skaičiavimą, išnaudojant visus procesoriaus branduolius.