A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Caracterização de uma Biblioteca de Software para Sistemas Embarcados Programa de Pós-Graduação em Computação Instituto de Informática Universidade Federal.

Apresentações semelhantes


Apresentação em tema: "Caracterização de uma Biblioteca de Software para Sistemas Embarcados Programa de Pós-Graduação em Computação Instituto de Informática Universidade Federal."— Transcrição da apresentação:

1 Caracterização de uma Biblioteca de Software para Sistemas Embarcados Programa de Pós-Graduação em Computação Instituto de Informática Universidade Federal do Rio Grande do Sul Porto Alegre - RS - Brasil Júlio Carlos Balzano de Mattos Disciplina de Sistemas Embarcados Profs. Flavio Wagner e Luigi Carro

2 1Introdução Objetivos Pesquisar formas de desenvolvimento de software embarcado que permitam ao projetista, em alto nível, associar no momento do desenvolvimento do software compromissos como área de memória, desempenho, potência, etc. Como Através da caracterização de uma biblioteca de software Biblioteca de SW Biblioteca de SW Composta de um conjunto de algoritmos (utilizados em diferentes domínios de aplicação) determinar mais de uma forma de solução para o mesmo problema Itens avaliados: tamanho de memória (programa e dados), desempenho e potência

3 2Introdução Algoritmos selecionados Cálculo do Seno Algoritmos de Ordenação Busca em Tabela Raiz Quadrada Ferramentas utilizadas Sashimi Simulador FemtoJava (CAD – Caco Aided Design)

4 3 Cálculo do Seno Estratégias Busca em Tabela Algortimo CORDIC Por Tabela Os valores do Senos são calculados previamente e armazenados em uma tabela static int[] tabelaSenos = { 0, /* sin 0 */ , /* sin 45 = 0,7071 */ 23170, /* sin 45 = 0,7071 */ /* sin 90 = 1 */ /* sin 90 = 1 */ }; /* tabela dos senos */ }; /* tabela dos senos */

5 4 Cálculo do Seno Por Tabela Para determinar o seno de um ângulo deve apenas realizar uma busca na tabela public static int senoTab(int grau) { public static int senoTab(int grau) { seno = tabelaSenos[grau]; return seno; }

6 5 Cálculo do Seno Por CORDIC Algoritmo CORDIC (Coordinate Rotation Digital Computer) Algoritmo iterativo simples para calcular funções trigonométricas public static void algoritmoCordic(int grau) { public static void algoritmoCordic(int grau) { while (count < 12) { if (v >= 0) { if (v >= 0) { x = x - y0; y = y + x0; v = v - atansTable[indiceAtans]; indiceAtans++; } else { } else { x = x + y0; y = y - x0; v = v + atansTable[indiceAtans]; indiceAtans++; } count++; count++; x0 = x; x0 = x; x0 = x0 >> count; x0 = x0 >> count; y0 = y; y0 = y; y0 = y0 >> count; y0 = y0 >> count; }......}

7 6 Cálculo do Seno Resultados App Seno Cordic Seno Tab (1) Seno Tab (0,5) Seno Tab (0,1) Prg Mem (bytes) Data Mem (Bytes) Instr Perfor. (Cycles) App Seno Cordic Seno Tab Power ROM Power RAM Power CPU Power (CGs) Power TOTAL

8 7 Cálculo do Seno Conclusões Cálculo por Tabela é excelente para pequenas resoluções (desempenho, potência e área de memória) Problema: com a necessidade de aumento da resolução ocorre o aumento da tabela (maior necessidade de memória) Cálculo pelo CORDIC: possui desempenho bem pior que o cálculo por tabela, porém com o aumento da resolução os parâmetros (desempenho, potência e área de memória) não se alteram Bons para exploração do espaço de projeto

9 8 Pesquisa em Tabela Estratégias Pesquisa seqüencial em tabela não ordenada Método simples e intuitivo Pesquisa seqüencial em tabela ordenada Método simples e intuitivo Pesquisa Binária Método aplica a tabelas ordenadas que consiste na comparação do argumento de pesquisa com a chave de entrada localizada no endereço médio da tabelaHashing Método de cálculo de endereço

10 9 Pesquisa em Tabela Pesquisa Seqüencial em tabela não ordenada Realiza uma busca burra, porém o processo de inserção é facilitado Busca é realizada através de um laço (for): public static int busca(int arg) { int i, n, e; int i, n, e; n = tamTAB; e = 0; for (i=0; i<=n-1; i++) { if (tabela[i] == arg) { if (tabela[i] == arg) { e = i; e = i; } } } return e; }

11 10 Pesquisa em Tabela Pesquisa Seqüencial em tabela não ordenada Para um novo elemento deve-se inclui-lo no final da tabela public static int insere(int arg) { int dev; int dev; if (ultimoElemento < tamTAB) { if (ultimoElemento < tamTAB) { // insere // insere tabela[ultimoElemento] = arg; tabela[ultimoElemento] = arg; ultimoElemento++; ultimoElemento++; dev = 0; dev = 0; } else { // tabela cheia // tabela cheia dev = 1; dev = 1;} return dev; }

12 11 Pesquisa em Tabela Pesquisa Seqüencial em tabela ordenada Busca é realizada através de um laço (while): public static int busca(int arg) { public static int busca(int arg) { int i, n, e; int i, n, e; n = tamTAB-1; e = 0; i = 0; while ((tabela[i] < arg) && (i < n)) { i++; i++;} if (tabela[i] == arg) { e = i; e = i;} return e; }

13 12 Pesquisa em Tabela Pesquisa Seqüencial em tabela ordenada Um novo elemento deve ser inserido na posição correta da tabela public static int insere(int arg) { public static int insere(int arg) { int dev, n, i, temp, temp2; int dev, n, i, temp, temp2; n = tamTAB-1; i = 0; if (ultimoElemento < tamTAB) { if (ultimoElemento < tamTAB) { while ((tabela[i] < arg) && (i < n)) { while ((tabela[i] < arg) && (i < n)) { i++; i++; } temp2 = arg; temp2 = arg; while (i < n) { while (i < n) { temp = tabela[i]; temp = tabela[i]; tabela[i] = temp2; tabela[i] = temp2; temp2 = temp; temp2 = temp; i++; i++; } tabela[i] = temp2; tabela[i] = temp2; ultimoElemento++; ultimoElemento++; }...

14 13 Pesquisa em Tabela Pesquisa Binária Busca é relativamente simples e rápida public static int busca(int arg) { public static int busca(int arg) { int i, n, e, inf, sup, med; int i, n, e, inf, sup, med;... while ((inf <= sup) && (e==0)) { med = (inf + sup) >> 1; // (inf + sup) DIV 2 if (arg == tabela[med]) { e = med; e = med; } else { if (arg > tabela[med]) { inf = med + 1; } else { sup = med - 1; }}} return e; }

15 14 Pesquisa em Tabela Pesquisa Binária A inserção é mais lenta pois deve-se inserir o elemento na posição correta e depois reordenar os demais elementos public static int insere(int arg) { int i, n, e, inf, sup, med;... if (ultimoElemento < tamTAB) { while ((inf <= sup) && (e==0)) { med = (inf + sup) >> 1; // (inf + sup) DIV 2 if (arg > tabela[med]) { inf = med + 1; } else { sup = med - 1; }}... while (i < tamTAB-1) { temp = tabela[i]; tabela[i] = temp2; temp2 = temp; i++;}...

16 15 Pesquisa em Tabela Hashing Função de cálculo de endereço (simples): f(C)=(C mod N)+1, onde C é a chave e N é o número de entradas da tabela f(C)=(C mod N)+1, onde C é a chave e N é o número de entradas da tabela Problema: Colisões Sem o tratamento de colisões o método é excelente ! Tratamento de Colisões: uso de endereçamento aberto com busca linear

17 16 Pesquisa em Tabela Hashing Busca com tratamento de colisões: maior complexidade no código e aumento na memória de dados (tabelas auxiliares: ocupado e usado) public static int busca(int arg) {... do { if (tabUsado[endl] == 1) { if (tabUsado[endl] == 1) { if ((tabOcupado[endl] == 1) && (tabela[endl] == arg)) { e = endl; e = endl; } else { if (endl == n) { if (endl == n) { endl = 1; endl = 1; } else { } else { endl++; endl++;} }......

18 17 Pesquisa em Tabela Hashing Inserção com tratamento de colisões: também maior complexidade no código e maior memória de dados public static int insere(int arg) { do { do { if (tabUsado[endl] == 1) { if (tabOcupado[endl] == 1) { if (tabOcupado[endl] == 1) { if (tabela[endl] == arg) { if (tabela[endl] == arg) { e = endl; } else { } else {endl++; } if (marca == 0) { if (marca == 0) { marca = endl; endl++; }......

19 18 Pesquisa em Tabela Resultados (32 entradas) OBS: Valores médios de desempenho, área e potência. App Prg. Mem. (bytes) Data Mem. (bytes) Seq Seq Binary Hashing Search Insert Perfom. (cycles) Search Insert Power (CGs) Search Insert Instructions

20 19 Pesquisa em Tabela Resultados para Hashing (32 entradas) trabalhando com Strings Utilizando o código ASCII com compressão de chave alfanumérica agrupando de 2 em 2 bytes Ex: BRASIL BR AS XOR IL = f(C)=(C mod N)+1 = (16978 mod 32)+1 = 14

21 20 Pesquisa em Tabela App Prg. Mem. (bytes) Data Mem. (bytes) Hashing Search Insert Perfom. (cycles) Search Insert Power (CGs) Search Insert Instructions 29 Hashing c/ String Resultados para Hashing (32 entradas) trabalhando com Strings

22 21 Pesquisa em Tabela Resultados (128 entradas) OBS: Valores médios de desempenho, área e potência. App Prg. Mem. (bytes) Data Mem. (bytes) Seq Seq Binary Hashing Search Insert Perfom. (cycles) Search Insert Power (CGs) Search Insert Instructions

23 22 Algoritmos de Ordenação Estratégias Bubble Sort Insert Sort Select Sort Quick Sort Resultados Esperados Associados com a complexidade de cada algoritmo

24 23 Algoritmos de Ordenação Bubble Sort public static int[] sort(int[] estrut, int maxnos) { public static int[] sort(int[] estrut, int maxnos) { int i,j; int i,j; int temp; for (i=0; ii; j--) { for (j=maxnos-1; j>i; j--) { if (estrut[j]

25 24 Algoritmos de Ordenação Insert Sort public static int[] sort(int[] estrut, int maxnos) { public static int[] sort(int[] estrut, int maxnos) { int i,j; int i,j; int temp; for (i=1; i

26 25 Algoritmos de Ordenação Select Sort public static int[] sort(int[] estrut, int maxnos) { public static int[] sort(int[] estrut, int maxnos) { int i,j; int i,j; int temp, menor; for (i=1;iestrut[j]) { if (estrut[menor]>estrut[j]) { menor=j; menor=j; } j++; j++; } temp=estrut[i-1]; temp=estrut[i-1]; estrut[i-1]=estrut[menor]; estrut[i-1]=estrut[menor]; estrut[menor]=temp; estrut[menor]=temp;} return estrut; }

27 26 Algoritmos de Ordenação Quick Sort public static int[] sort(int l, int r) { public static int[] sort(int l, int r) {... i = l; j = r; temp = (l+r) >> 1; // (l+r) DIV 2 x = estrut[temp]; do { do { while (estrut[i] < x) { i++; } while (estrut[i] < x) { i++; } while (x < estrut[j]) { j--;} while (x < estrut[j]) { j--;} if (i <= j) { if (i <= j) { y = estrut[i]; y = estrut[i]; estrut[i] = estrut[j]; estrut[j] = y; i++; i++; j--; } } } while (i <= j); } while (i <= j); if (l < j) { sort(l, j); } if (l < j) { sort(l, j); } if (i < r) { sort(i, r); } if (i < r) { sort(i, r); } return estrut; }

28 27 Algoritmos de Ordenação Resultados (10 elementos) App Sort Bubble Sort Insert Sort Select Sort Quick Prg Mem (bytes) Data Mem (Bytes) Instr Perfor. (Cycles) Power (CGs)

29 28 Algoritmos de Ordenação Resultados (100 elementos) App Sort Bubble Sort Insert Sort Select Sort Quick Prg Mem (bytes) Data Mem (Bytes) Instr Perfor. (Cycles) Power (CGs)

30 29 Raiz Quadrada Utiliza dois Métodos propostos por Ramamoorthy Dois métodos muito similares O desempenho está relacionado a rapidez da convergência das funções Resultados: App Square 1 Square 2 Prg Mem (bytes) Data Mem (Bytes) 82 Instr Perfor. (Cycles) 5335 Power (CGs)

31 30Conclusões Cálculo do Seno Permite uma boa exploração do espaço de projeto Pesquisa em Tabela O melhor algoritmos dependerá muito da aplicação, mas também pode-se explorar o espaço de projeto Algoritmos de Ordenação Não permitem explorar o espaço de projeto (contra- exemplo) Raiz Quadrada Dados muitos incipientes

32 31 Trabalhos Futuros Expandir a biblioteca com outros algoritmos Algoritmos aritméticos Algortimos maiores (DCT, etc...) Avaliar o impacto dos algoritmos em problemas maiores Algortimos de Huffman MP3 Player etc...


Carregar ppt "Caracterização de uma Biblioteca de Software para Sistemas Embarcados Programa de Pós-Graduação em Computação Instituto de Informática Universidade Federal."

Apresentações semelhantes


Anúncios Google