Parallel sort

di il
6 risposte

Parallel sort

Salve a tutti, sono uno studente universitario (ingegneria) e da poco sto incominciando ad esercitarmi sullo svolgimento di alcune applicazioni.. sto cercando di eseguire la seguente applicazione: Parallel sort (scegliendo merge sort come algoritmo di ordinamento);
la traccia di questo esercizio mi chiede:
1- l’ordinamento è applicato ad un array di interi di dimensione N con valori generati casualmente
2- il numero di thread j è un parametro di ingresso da riga di comando
3- il numero di elementi dell’array N è un parametro di ingresso da riga di comando
4- l’applicazione ripete j cicli di ordinamento usando i=1,…,j thread ed al termine di ogni ciclo mostra il tempo totale di ordinamento ed il tempo medio di ordinamento per ciascun thread
5- all’inizio di ogni ciclo, l’array è inizializzato a valori casuali
Concettualmente ho capito cosa mi chiede la traccia, ma come potrei implementare al meglio tale esercizio?
Ps: devo implementare l'esercizio in C++ utilizzando std::thread

6 Risposte

  • Re: Parallel sort

    Il fine della domanda non è chiara ... hai scritto qualcosa o no?
  • Re: Parallel sort

    Dato che ci sono tantissimi esempi su internet riguardo al Parallel sort, in generale, sto cercando di trovare la strada migliore per implementare questo programma.. certo che ho scritto (per ora una 70ina di righe)
  • Re: Parallel sort

    E perché non partiamo da quelle?
  • Re: Parallel sort

    #include <iostream>
    #include <algorithm>
    #include <functional>
    #include <thread>



    int main(int argc, const char * argv[]) {

    unsigned int threads;
    unsigned int vectorSize;

    void mergesort(int[], int, int );
    void merge(int[], int, int, int );

    const int n = 8;
    int a[n] = {10, 3, 15, 2, 1, 4, 9, 0};
    int i;
    mergesort(a, 0, n-1);
    for(i=0; i<n; i++)
    {
    std::cout<< a;
    }
    return 0;
    }

    #include "Parallel.h"

    typedef int Item;

    void merge(int a[], int left, int right )
    {

    int center;
    if(left<right)
    {
    center= (left+right)/2;
    mergesort(a, left, center );
    mergesort(a, center+1, right );
    merge(a, left, center, right );

    }
    }

    void merge(int a[], int left, int center, int right)
    {
    int i, j, k;
    int b[8];
    i = left;
    j = center+1;
    k = 0;
    //fusione delle 2 meta'
    while ((i<=center) && (j<=right))
    {
    if (a <= a[j])
    {
    b[k] = a;
    i++;
    }
    else
    {
    b[k] = a[j];
    j++;
    }
    k++;
    }

    while (i<=center)
    {
    b[k] = a;
    i++;
    k++;
    }


    while (j<=right)
    {

    b[k] = a[j];
    j++;
    k++;
    }


    for (k=left; k<=right; k++)
    {
    a[k] = b[k-left];
    }
    }
  • Re: Parallel sort

    Sasà ha scritto:


    Dato che ci sono tantissimi esempi su internet riguardo al Parallel sort, in generale, sto cercando di trovare la strada migliore per implementare questo programma.. certo che ho scritto (per ora una 70ina di righe)
    Se posso permettermi... ecco un esempio di cosa NON fare.
    Lascia stare gli esempi su internet: se vuoi imparare a fare qualcosa (esempio: pensare con la tua testa) al massimo puoi dotarti di carta e lapis.
    Niente strumenti più avanzati, avrebbero l'effetto contrario.
  • Re: Parallel sort

    Va bene, grazie !
Devi accedere o registrarti per scrivere nel forum
6 risposte