Skip to content

aNDREUET648/aa.aa_parallel

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

49 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

21741 - Arquitectures Avançades - Programación paralela

Introducción

aa.aa_parallel incluye una serie de actividades (cada una en un directorio diferente) de programación paralela que se corresponden con las actividades propuestas a lo largo del curso. En cada directorio se destacará el uso de las funciones principales de la biblioteca oneTBB.

Estructura

aa.aa_parallel
├── helloworld          Primera aplicación por excelencia siempre que se comienza (parallel_invoke)
├── parallel_for        Actividad 1. Sumar 1 a cada elemento de un vector (parallel_for)
├── parallel_reduce     Actividad 2. Sumar los 100 primeros números de 1 a 101 (parallel_reduce)
├── GetMax              Actividad 3. Obtener el valor máximo de un vector (parallel_reduce)
├── parallel_scan       Actividad 4. Filtrar un vector por un criterio determinado (MAP,SCAN & JOIN)
├── template            Plantilla necesaria para realizar las actividades (Ver Requisitos más abajo)
└── README.md           (este archivo)

Requisitos

Las actividades de programación paralela se realizarán en C++, apoyándome del uso de dos herramientas para facilitar la escritura de los programas:

  • La biblioteca OneAPI Threading Building Blocks (oneTBB) basada en plantillas para C++ desarrollada por Intel que explotan las capacidades de paralelismo de los procesadores con arquitectura multinúcleo.
  • La herramienta de software gratuita Bazel para la automatización de la construcción y pruebas de software similar Make, Maven, o Gradle.

Empleando oneTBB como una dependencia dentro de un proyecto Bazel

El enfoque estándar de Bazel para manejar las bibliotecas de terceros es el enlace estático. Por lo que los pasos a seguir son:

Definiremos una plantilla por defecto con esta estructura:

template
├── BUILD.bazel
├── main.cpp
└── WORKSPACE.bazel

Con el siguiente contenido en cada uno de los archivos

WORKSPACE.bazel: En este archivo el repositorio oneTBB de GitHub* es 'traido' (fetched)

load("@bazel_tools//tools/build_defs/repo:git.bzl", "git_repository")

git_repository(
    name = "oneTBB",
    branch = "master",
    remote = "https://github.com/oneapi-src/oneTBB/",
)

BUILD.bazel: Este archivo define un binario llamado Demo que tiene una dependencia con oneTBB.

cc_binary(
    name = "Demo",
    srcs = ["main.cpp"],
    deps = ["@oneTBB//:tbb"],
)

main.cpp: Aquí es donde escribiré mi programa principal.

#include "oneapi/tbb/parallel_invoke.h"
#include "oneapi/tbb/version.h"   // TBB_VERSION_MAJOR, MINOR & PATCH

#include <iostream>


int main(){
 oneapi::tbb::parallel_invoke(

   [](){std::cout << "TBB version" << std::endl;},
   [](){std::cout << TBB_VERSION_MAJOR << "."
                  << TBB_VERSION_MINOR << "."
                  << TBB_VERSION_PATCH
                  << "!" << std::endl;},
   [](){std::cout << "Hello World!!" << std::endl;},
 );
   return 0;
}

Vas al directorio con los archivos creados antes y ejecutas el binario con bazel run //:Demo. El resultado en este caso es el Hello World!! y la versión del TBB en uso (aunque no sé en que orden)

Bazel una vez construido el proyecto (compilado y linkado), lo ejecutará directamente.


aNDREUET648

About

Uso de TBB en programación paralela

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published