Mer 21 Agosto, 16:19:17 - 2019

Visualizza post

Questa sezione ti permette di visualizzare tutti i post inviati da questo utente. N.B: puoi vedere solo i post relativi alle aree dove hai l'accesso.


Post - Avelyne

Pagine: [1] 2 3 4
1
Programmazione Funzionale e Parallela / Re:Esercizio 8
« il: Mer 23 Gennaio, 15:13:52 - 2019 »
Codice: [Seleziona]
def isSorted(l:List[Int]) = {
l.sliding(2).map(x => x(0)<x(1)).reduce(_&&_)
}

2
Programmazione Funzionale e Parallela / Esercizio 4 Esercitazione6
« il: Mar 11 Dicembre, 23:54:51 - 2018 »
Codice: [Seleziona]
int count_occ(const char* v, int n, char x) {
    int i,j,cnt = 0;
    unsigned char mcnt[16];
    __m128i vone = _mm_set_epi8(1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1);
    __m128i vcnt = _mm_set_epi8(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
    __m128i res = _mm_setzero_si128();
    __m128i resv;
    __m128i xv = _mm_set1_epi8(x);
    for(i = 0; i+15<n; i+=16){
__m128i vv = _mm_loadu_si128((const __m128i*)(v+i));
resv = _mm_cmpeq_epi8(vv,xv);
resv = _mm_cmpeq_epi8(resv,res);
resv = _mm_add_epi8(resv,vone);
vcnt = _mm_add_epi8(vcnt,resv);
if (i % 2048 == 0) {
            _mm_storeu_si128((__m128i*)mcnt, vcnt);
            for (j=0; j<16; ++j) cnt += mcnt[j];
            vcnt = _mm_set_epi8(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
        }
}

for (; i<n; ++i) cnt += v[i] == x;
_mm_storeu_si128((__m128i*)mcnt, vcnt);
    for (j=0; j<16; ++j) cnt += mcnt[j];

    return cnt;
}
Se è giusto, è vero che la notte porta consiglio :D >:D

3
E' valido perché -1 è rappresentato in complemento a due con tutti i bit a 1 (0xFFFFFFFF essendo epi32). Quindi tutti i 128 bit del risultato della cmp saranno a 1 se e solo se i vettori di input sono uguali nella finestra dei quattro int che si stanno confrontando.

Giustamente.
Grazie!

4
Hai ragione Avelyne, avevo letto di fretta. Effettivamente nel codice di frank997 lo step dovrebbe essere di 4 non di 16 essendo array di int e non di char. E' sempre utile testare il codice con valgrind per isolare problemi di questo tipo.

La _mm_test_all_ones(x) restituisce 1 se e solo se tutti i bit di x sono posti a 1.

Per la mm_test noi gli diamo però un vettore che ha -1 nelle posizioni in cui gli altri vettori sono uguali, avendo fatto la cmpeq. Giusto?
Perchè il controllo è valido?

5
Ma in teoria lo step con m128i non dovrebbe essere di 4?
Sono registri da 128bit che possono quindi contenere 4 interi.

Inoltre non ho capito bene come funziona la test_ones.


6
Programmazione Funzionale e Parallela / Re:Esercizio 36 - PCoin (parallelismo)
« il: Dom 02 Dicembre, 17:31:24 - 2018 »
Codice: [Seleziona]
    def countChangePar(amount:Int, coins:List[Int], maxThreads:Int = Runtime.getRuntime().availableProcessors()):Int = {
if (amount == 0) 1
else if (coins.isEmpty || amount < 0) 0
else if (maxThreads < 2) countChange(amount,coins)
else{
val (ra,rb) = Par.par(countChangePar(amount - coins.head, coins.tail,maxThreads/2))(countChangePar(amount, coins.tail,maxThreads/2))
ra+rb
}

}

7
Programmazione Funzionale e Parallela / Re:Scala e Java
« il: Sab 17 Novembre, 15:22:18 - 2018 »
Sei su Ubuntu 18?

Dai un'occhiata a questo:
https://stackoverflow.com/questions/50567410/scala-repl-no-echo-on-input
Mi scuso per il ritardo nella risposta, ho seguito il procedimento all'interno del link e si è risolto il problema. Grazie mille. :D

8
Programmazione Funzionale e Parallela / Re:Esercizio 16
« il: Mar 06 Novembre, 11:48:23 - 2018 »
Codice: [Seleziona]
object E16Main extends App{
val l = List(10,22,12,1,5,6,-1,2,3,6,7,8,9)
println(E16.mediaVeicoli(l)) ///9.3


}

Codice: [Seleziona]
object E16{
def mediaVeicoli(l:List[Int]) = {
val v = (l.span(_>0))._1
v.reduce(_+_).toDouble/v.size


}

}

9
Programmazione Funzionale e Parallela / Re:Esercizio 15
« il: Mar 06 Novembre, 10:33:36 - 2018 »
Codice: [Seleziona]
object E15{
def minMax(l:List[Int]) = {
((l.reduce((x,y) => if(x>y) y else x)),(l.reduce((x,y) => if(x>y) x else y)))

}


}

Codice: [Seleziona]
object E15Main extends App{
println(E15.minMax(List(5,2,5,8,7,3,1)))
}

10
Programmazione Funzionale e Parallela / Re:Esercizio 14
« il: Mar 06 Novembre, 10:00:40 - 2018 »
Codice: [Seleziona]
object E14Main extends App{
val l = List(3,1,2,4,5)
val s = List("pfp","bdb","eoa17","pluto")
println((E14.mymap(l))(_+1)) // stampa 4,2,3,5,6
println((E14.mymap(s))(_+" uni"))
}

Codice: [Seleziona]
object E14{
def mymap[T,B](l:List[T])(f:T=>B):List[B] = l match {
case Nil => Nil
case h::Nil => List(f(h))
case h::t => f(h) :: mymap(t)(f)
}
}

11
Programmazione Funzionale e Parallela / Re:Scala e Java
« il: Mar 30 Ottobre, 11:28:14 - 2018 »
Si, ho provato anche così. Poichè all'inizio avevo installato Java e poi scala, mi andava in conflitto e scala mi dava un errore, che ora non ricordo. :-\

12
Programmazione Funzionale e Parallela / Re:Esercizio 11
« il: Mar 30 Ottobre, 11:20:52 - 2018 »
Non è il migliore, inoltre fa un mix e non una vera e propria unione. Ma senza sfruttare la funzione precedente sono riuscito a tirar fuori questo mostro:

Codice: [Seleziona]
object E11{
def  union[T](a:List[T], b:List[T]):List[T] = (a,b) match {
case (Nil,Nil) => Nil
case (Nil,h2::t2) if (t2.exists(x => (x==h2))) => union(a,t2)
case (Nil,h2::t2) => h2::union(a,t2)
case (h1::t1,Nil) if (t1.exists(x => (x==h1))) => union(t1,b)
case (h1::t1,Nil) => h1::union(t1,b)
case (h1::t1, h2::t2) if(t1.exists(x => (x==h1)) || t2.exists(x => (x==h1))) => union(t1,b)
case (h1::t1, h2::t2) if(t2.exists(x => (x==h2)) || t1.exists(x => (x==h2))) => union(a,t2)
case (h1::t1,h2::t2) => h1::h2::union(t1,t2)


}

}

Codice: [Seleziona]
object E11Main extends App{
val l = List(1,2,3,1,5,4,1,5,5,8,7,4,6)
val s = List("pfp","alem","eser","pfp","bdd","eoa","bdd","bdd")
val d = List(1.5,1.2,5.9,3.0,1.5,1.5,3.0,1.5)
val e = List()
val i = List(1,5,2,3,7,8,4,5,1,6,5,8,9,1,5)

println(E11.union(l,i))
println(E11.union(s,l))
println(E11.union(s,d))
println(E11.union(l,d))
println(E11.union(e,s))

}

13
Programmazione Funzionale e Parallela / Re:Esercizio 10
« il: Mar 30 Ottobre, 09:32:07 - 2018 »
Codice: [Seleziona]
object E10{
def removeDuplicates[T](l:List[T]):List[T] = l match{
case Nil => Nil
//case h::Nil => h::Nil
case h::t if (t.forall(_ != h)) => h :: removeDuplicates(t)
case h :: t => removeDuplicates(t)

}


}

Codice: [Seleziona]
object E10Main extends App{
val l = List(1,2,3,1,5,4,1,5,5,8,7,4,6)
val s = List("pfp","alem","eser","pfp","bdd","eoa","bdd","bdd")
val d = List(1.5,1.2,5.9,3.0,1.5,1.5,3.0,1.5)
val e = List()

println(E10.removeDuplicates(l))
println(E10.removeDuplicates(s))
println(E10.removeDuplicates(d))
println(E10.removeDuplicates(e))

}

14
Programmazione Funzionale e Parallela / Re:Esercizio 9
« il: Mar 30 Ottobre, 09:09:46 - 2018 »
Codice: [Seleziona]
object E9{
def consecutivi[T](l:List[T]):List[(T,T)] = l match {
case Nil => Nil
case h::Nil => Nil
case _ => l.sliding(2,1).map(x => (x(0),x(1))).toList
}
}

Codice: [Seleziona]
object E9Main extends App{
val l = List("pfp","bdd","lucidi","dispensa","eoa","pizza")
val u = List("esami")
val g = List(3,6,5,7)
val d = List(1)
val a = List(1.5,1.4,1.7,1.0,3.5)
val v = List()

println(E9.consecutivi(l))
println(E9.consecutivi(u))
println(E9.consecutivi(g))
println(E9.consecutivi(d))
println(E9.consecutivi(a))
println(E9.consecutivi(v))


}

15
Programmazione Funzionale e Parallela / Re:Esercizio 8
« il: Mar 30 Ottobre, 08:54:42 - 2018 »
Codice: [Seleziona]
def isSorted(l:List[Int]):Boolean = {
l.sliding(2).forall(x => (x(0) <= x(1)))

}

Quando faccio così, il forall controlla tutte le coppie? Oppure solo il primo elemento?
   

Pagine: [1] 2 3 4