martes, 12 de junio de 2018

Algoritmos paralelos

El uso de procesadores multinucleo se ha vuelto estandar y pero la mayoria de los programadores no sacan provecho de este hardware.

A continuacion vamos a ver una comparacion del algoritmo sort de la biblioteca estandar de C++ y la version paralela de GCC, usando el siguiente codigo:

Para compilar ejecuta el siguiente comando.
/**************************************
Nombre: parallel.cpp
Autor: Gabriel Espinoza
Fecha: 12-Jun-2018
License: MIT
Desc: hace una comparacion del algoritmo sort
estandar y su version paralela
**************************************/
#include <vector>
#include <parallel/algorithm>
#include <algorithm>
#include <chrono>
#include <iostream>
using namespace std::chrono;
using namespace std;
int main()
{
std::vector<int> vector1(1e7);
auto start_t = steady_clock::now();
std::sort(vector1.begin(), vector1.end());
auto end_t = steady_clock::now();
cout << "std::sort " <<duration_cast<milliseconds>(end_t - start_t).count() << " milliseconds\n";
start_t = steady_clock::now();
__gnu_parallel::sort(vector1.begin(), vector1.end());
end_t = steady_clock::now();
cout << "__gnu_parallel::sort " <<duration_cast<milliseconds>(end_t - start_t).count() << " milliseconds\n";
return 0;
}
view raw parallel.cpp hosted with ❤ by GitHub

g++ parallel.cpp -o parallel -std=c++11 -fopenmp

Seguido por:

./parallel

En mi caso obtuve estos resultados:

std::sort 5265 milliseconds
__gnu_parallel::sort 1552 milliseconds