Autore Topic: Aiuto applicazione che utiizza tutti i core  (Letto 806 volte)

Offline curciolab

  • Nuovo arrivato
  • *
  • Post: 20
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Galaxy S2
  • Play Store ID:
    curciolab
  • Sistema operativo:
    Ubuntu 11.10
Aiuto applicazione che utiizza tutti i core
« il: 11 Maggio 2012, 12:16:50 CEST »
0
Ragazzi ho creato un benchmark per android ma nel mio Galaxy S2 non utilizza entrambi i core.. sono nuovo del mondo android riguardo la programmazione.. devo fare qualcosa di specifico per sfruttare entrambi i miei core? o cosa aiutatemi..

ps: nel mio Galaxy S2 utilizza il 50% del processore mentre in altri smartphone utilizza il 100% ma non dualcore.

Grazie anticipatamente, e se ho sbagliato thread scusatemi.

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Aiuto applicazione che utiizza tutti i core
« Risposta #1 il: 11 Maggio 2012, 12:29:18 CEST »
0
Non so come hai fatto il benchmark, ma per usarli entrambi devi quanto meno fare un benchmark con due thread. Se hai già implementato il benchmark in due thread e non sono distribuiti ugualmente su core distinti, non mi viene in mente niente.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline Gigiuz

  • Utente normale
  • ***
  • Post: 187
  • Respect: +23
    • Google+
    • gigiuzzo81
    • Gigiuz81
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Note III
  • Play Store ID:
    GGXSoft
  • Sistema operativo:
    Windows 7 64bit, OS X (virtualized), Ubuntu
Re:Aiuto applicazione che utiizza tutti i core
« Risposta #2 il: 11 Maggio 2012, 15:21:50 CEST »
0
[...] per usarli entrambi devi quanto meno fare un benchmark con due thread [...]

Leggendo in giro sembra che sia sufficiente avviare un nuovo thread per sfruttare entrambi i core. Importante invece è utilizzare la giusta versione di Android: l'architettura multi-core è ufficialmente supportata da Android 3.0 in poi.
Hai bisogno di implementare un sistema di "codici seriali di sblocco" nella tua applicazione? Dai un'occhiata alla mia libreria: RemoteUnlocker

Offline blackgin

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1387
  • Respect: +164
    • Google+
    • blackgins
    • blackginsoft
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Nexus
  • Sistema operativo:
    Mac OSX 10.8
Re:Aiuto applicazione che utiizza tutti i core
« Risposta #3 il: 11 Maggio 2012, 16:50:51 CEST »
0
Leggendo in giro sembra che sia sufficiente avviare un nuovo thread per sfruttare entrambi i core. Importante invece è utilizzare la giusta versione di Android: l'architettura multi-core è ufficialmente supportata da Android 3.0 in poi.
Un nuovo thread rispetto a quello UI, no?
Ma sarebbe preferibile non fare calcoli pesanti (come quelli che si presume faccia un benchmark) sul thread UI, quindi in teoria bisognerebbe avviarne almeno altri due.
Ovviamente, poi, é necessario testare su versioni di android che supportano i processori multicore.
Postate il LogCat LogCat LogCat LogCat LogCat

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Aiuto applicazione che utiizza tutti i core
« Risposta #4 il: 12 Maggio 2012, 09:07:41 CEST »
0
Quello che volevo dire è concettuale. Dato un certo lavoro (in questo caso calcoli di un benchmark), per usare esplicitamente dure (o più) core di una cpu, occorre che sia il programmatore a partizionare i calcoli stessi per essere parallelizzati. Se il lavoro è stato implementato su un singolo thread, verrà eseguito su un singolo core, anche se ce ne sono altri a disposizione, oppure verrà usato un po' un core e un po' un altro, ma mai contemporaneamente. Questo perchè il compilatore non è in grado di comprendere da solo la parallelizzabilità di un arbitrario algoritmo ed attuarla in modo autonomo. E' attualmente uno dei più grandi limiti dei compilatori e dei linguaggi: per sfruttare le cpu multi-core occorre che il software sia stato esplicitamente pensato per farlo.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline curciolab

  • Nuovo arrivato
  • *
  • Post: 20
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Galaxy S2
  • Play Store ID:
    curciolab
  • Sistema operativo:
    Ubuntu 11.10
Re:Aiuto applicazione che utiizza tutti i core
« Risposta #5 il: 12 Maggio 2012, 13:58:09 CEST »
0
Grazie ragazzi per le vostre risposte purtroppo sono fuori città fino a lunedì e non posso provare a concretizzare i vostri aiuti. Comunque vi do un paio di informazioni in più per quanto riguarda il mio benchmark :
Il benchmark si basa sul calcolo del pi greco sulla base dell'algoritmo di Gauss-Legendre. Il tutto è basato in un singolo thread e non ho mai creato un'applicazione multi-thread.. Il calcolo calcola (scusate il gioco di parole) il tempo di esecuzionedi questa stressante operazione.. Per quanto riguarda la versione di android utilizzerei nativamente le API 15 per Ics e creerei 2 thread aggiuntivi per non operare direttamente nel UI.. mi resta solo da capire come dividere e soprattutto parallelizare l'operazione :/ lunedì posto l'algoritmo aiutami :) grazie ancora..

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Aiuto applicazione che utiizza tutti i core
« Risposta #6 il: 12 Maggio 2012, 14:23:34 CEST »
0
Grazie ragazzi per le vostre risposte purtroppo sono fuori città fino a lunedì e non posso provare a concretizzare i vostri aiuti. Comunque vi do un paio di informazioni in più per quanto riguarda il mio benchmark :
Il benchmark si basa sul calcolo del pi greco sulla base dell'algoritmo di Gauss-Legendre. Il tutto è basato in un singolo thread e non ho mai creato un'applicazione multi-thread.. Il calcolo calcola (scusate il gioco di parole) il tempo di esecuzionedi questa stressante operazione.. Per quanto riguarda la versione di android utilizzerei nativamente le API 15 per Ics e creerei 2 thread aggiuntivi per non operare direttamente nel UI.. mi resta solo da capire come dividere e soprattutto parallelizare l'operazione :/ lunedì posto l'algoritmo aiutami :) grazie ancora..

A seconda della tipologia di benchmark che ti interessa, potrebbe anche bastare lanciare due istanze dell'algoritmo, ciascuno in un thread.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline curciolab

  • Nuovo arrivato
  • *
  • Post: 20
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Galaxy S2
  • Play Store ID:
    curciolab
  • Sistema operativo:
    Ubuntu 11.10
Re:Aiuto applicazione che utiizza tutti i core
« Risposta #7 il: 12 Maggio 2012, 15:22:23 CEST »
0
Siccome il calcolo si basa in cicli ricorsivi annidati non saprei come dividerli.. Naturalmente finché non posterò il codice non capirete di cosa parlo :) lunedì vi farò vedere..

Offline blackgin

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1387
  • Respect: +164
    • Google+
    • blackgins
    • blackginsoft
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Nexus
  • Sistema operativo:
    Mac OSX 10.8
Re:Aiuto applicazione che utiizza tutti i core
« Risposta #8 il: 12 Maggio 2012, 16:31:48 CEST »
0
Siccome il calcolo si basa in cicli ricorsivi annidati non saprei come dividerli.. Naturalmente finché non posterò il codice non capirete di cosa parlo :) lunedì vi farò vedere..
Non ti basta calcolare il Pi due volte in due thread diversi?
Postate il LogCat LogCat LogCat LogCat LogCat

Offline curciolab

  • Nuovo arrivato
  • *
  • Post: 20
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Galaxy S2
  • Play Store ID:
    curciolab
  • Sistema operativo:
    Ubuntu 11.10
Re:Aiuto applicazione che utiizza tutti i core
« Risposta #9 il: 12 Maggio 2012, 20:45:30 CEST »
0
Il risultato è in secondi perché conta i secondi dall'avvio del calcolo fino alla conclusione. Facendo il calcolo identico in due thread non otterei solo 2 risultati? Come potrei fare a ridurre questo tempo di calcolo?

Ragazzi finalmente posso postarvi il codice (sono tornato in città in anticipo) :

int i = 0;
                       TEMPO = System.nanoTime();
                       BigDecimal a = UNO;
                       BigDecimal b = UNO.divide(sqrt(DUE, COMPUTATION_SCALE), COMPUTATION_SCALE, 4);
                       BigDecimal t = UNO.divide(QUATTRO, COMPUTATION_SCALE, 4);
                       BigDecimal p = UNO;
                       for(; !a.equals(b); )
                       {
                           BigDecimal a1 = a;
                           a = a.add(b).divide(DUE, COMPUTATION_SCALE, 4);
                           b = sqrt(a1.multiply(b), COMPUTATION_SCALE);
                           t = t.subtract(p.multiply(a1.subtract(a).multiply(a1.subtract(a))));
                           p = p.multiply(DUE);
                           i++;
                           Testo.setText(Testo.getText()+"\n"+(new StringBuilder("loop ")).append(i).append(" :: ").append((double)(System.nanoTime() -TEMPO)/(double)DIVISORE_TEMPO).append(" sec").toString());
                       }

dove COMPUTATION_SCALE è un valore che posso decire io, corrisponde al numero di iterazioni ( numero maggiore = calcolo molto più lungo )
« Ultima modifica: 13 Maggio 2012, 14:57:47 CEST da curciolab »

Offline curciolab

  • Nuovo arrivato
  • *
  • Post: 20
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Galaxy S2
  • Play Store ID:
    curciolab
  • Sistema operativo:
    Ubuntu 11.10
Re:Aiuto applicazione che utiizza tutti i core
« Risposta #10 il: 20 Maggio 2012, 01:39:38 CEST »
0
Ragazzi grazie mille per i vostri aiuti. :) sono riuscito a creare sia i thread che il parallelismo segnalo il topic come risolto.
 PS: ho utilizzato le AsyncTask :)