Sobes.tech
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}");
    }
}

Այս մոտեցումը զգալիորեն արագացնում է հաշվարկը՝ օգտագործելով բոլոր հասանելի միջուկները։