Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Melakukan Pengurangan Array dalam OpenMP?

Bagaimana untuk Melakukan Pengurangan Array dalam OpenMP?

Susan Sarandon
Lepaskan: 2024-12-02 18:13:12
asal
697 orang telah melayarinya

How to Perform Array Reduction in OpenMP?

Pengurangan tatasusunan dalam OpenMP

Soalan:

Cara melaksanakannya dalam OpenMP untuk tatasusunan Operasi pengurangan?

Jawapan:

OpenMP menyokong pengurangan tatasusunan. Terdapat dua cara untuk melakukan ini:

Kaedah 1: Gunakan pembolehubah "peribadi"

untuk mencipta salinan peribadi S bagi setiap urutan, isikannya secara selari, dan kemudian Cantumkannya menjadi S dalam kawasan:

int A[] = {84, 30, 95, 94, 36, 73, 52, 23, 2, 13};
int S[10] = {0};
#pragma omp parallel
{
    int S_private[10] = {0};
    #pragma omp for
    for (int n = 0; n < 10; ++n)
    {
        for (int m = 0; m <= n; ++m)
        {
            S_private[n] += A[m];
        }
    }
    #pragma omp critical
    {
        for (int n = 0; n < 10; ++n)
        {
            S[n] += S_private[n];
        }
    }
}
Salin selepas log masuk

kaedah 2: Buat tatasusunan dimensi 10*benang menggunakan tatasusunan berbilang dimensi

, isikannya secara selari, dan kemudian gabungkannya ke dalam S tanpa bahagian kritikal:

int A[] = {84, 30, 95, 94, 36, 73, 52, 23, 2, 13};
int S[10] = {0};
int *S_private;
#pragma omp parallel
{
    const int nthreads = omp_get_num_threads();
    const int ithread = omp_get_thread_num();

    #pragma omp single
    {
        S_private = new int[10 * nthreads];
        for (int i = 0; i < (10 * nthreads); i++)
            S_private[i] = 0;
    }
    #pragma omp for
    for (int n = 0; n < 10; ++n)
    {
        for (int m = 0; m <= n; ++m)
        {
            S_private[ithread * 10 + n] += A[m];
        }
    }
    #pragma omp for
    for (int i = 0; i < 10; i++)
    {
        for (int t = 0; t < nthreads; t++)
        {
            S[i] += S_private[10 * t + i];
        }
    }
}
delete[] S_private;
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk Melakukan Pengurangan Array dalam OpenMP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan