openmp-parallel-matmul.ino

Módulo de IA AIWorld P1 para BPI-M2 Ultra y Berry · Archivo : openmp-parallel-matmul.ino · Lenguaje : c · Uso : Démontrer le calcul parallèle sur les cœurs ARM Cortex-A7 avec OpenMP.

Programa C que utiliza OpenMP para acelerar la multiplicación de matrices en los 4 núcleos del V40.

Compile con gcc -fopenmp -O2 matmul.c -o matmul. El Allwinner V40 tiene 4 núcleos Cortex-A7. OpenMP distribuye tareas entre estos núcleos. Compare el tiempo con y sin la directiva #pragma omp parallel for para medir la ganancia.

openmp-parallel-matmul.ino

#include <stdio.h>
#include <stdlib.h>
#include <omp.h>

#define N 1000

int main() {
    int i, j, k;
    double start_time, run_time;
    double *A, *B, *C;

    // Allocation mémoire
    A = (double*)malloc(N*N * sizeof(double));
    B = (double*)malloc(N*N * sizeof(double));
    C = (double*)malloc(N*N * sizeof(double));

    // Initialisation
    for(i=0; i<N*N; i++) {
        A[i] = 1.0;
        B[i] = 2.0;
        C[i] = 0.0;
    }

    start_time = omp_get_wtime();

    // Multiplication de matrices parallélisée
    #pragma omp parallel for shared(A,B,C) private(i,j,k) schedule(static)
    for(i=0; i<N; i++) {
        for(j=0; j<N; j++) {
            for(k=0; k<N; k++) {
                C[i*N + j] += A[i*N + k] * B[k*N + j];
            }
        }
    }

    run_time = omp_get_wtime() - start_time;
    printf("Temps d'exécution: %f secondes\n", run_time);
    printf("Résultat C[0][0]: %f\n", C[0]);

    free(A); free(B); free(C);
    return 0;
}

← Volver a la ficha