A ANÁLISE DO DESEMPENHO DA MEMÓRIA CACHE NA CONVERSÃO DE IMAGENS EM ESCALA CINZA
Por: Alex Vieira • 20/3/2022 • Artigo • 3.999 Palavras (16 Páginas) • 144 Visualizações
AUTHOR: TITLE
ANÁLISE DO DESEMPENHO DA MEMÓRIA CACHE NA CONVERSÃO DE IMAGENS EM ESCALA CINZA
—————————— ◆ ——————————
1 Introdução
A idéia de memória infinitamente grande e de acesso rápido não é um desejo exclusivo dos desenvolvedores da atualidade. A.W.Burks, H.H.Goldstine e J. Von Neumann já compartilhavam desse ideal, assim como já pensavam no conceito de hierarquia de memória:
“...Somos forçados a reconhecer a possibilidade de construir um sistema de memória estruturado herarquicamente, no qual cada um dos componentes da hierarquia tenha mais capacidade de armazenamento e um tempo de acesso maior do que aqueles que o precedem.”
A.W.Burks , H.H.Goldstine e J. Von Neumann Diniz e Barros(1).
Para o entendimento do comportamento da memória cache em relação a convesão de imagens em escala cinza é necessario o entendimento do conceito de hierarquia de memória. A hierarquia de memória pode ser composta de vários níveis, porém os dados devem ser uma cópia exata de seus níveis adjacentes Patterson e Hennessy(2). A figura 1 exemplifica de forma simples a hierarquia de memória:
[pic 1][pic 2]
Outra caracteristica na hierarquia de memória é que quanto mais próxima ao processador menor e mais rápida é a memória(aqui entra a memória cache), e de forma contrária, os níveis mais abaixo do processador tem maior capacidade de armazenamento e consequentemente, menor velocidade de resposta. Justamente a memória cache vem para reduzir esse gap criado entre o processador e a memória principal Monteiro(3). Não obstante, a hierarquia de memória faz o processador exergar o tempo de acesso como se toda a hierarquia fosse capaz de responde-lo na velocidade do nível 1. Observando a figura 2 pode-se ver o tempo de acesso gasto diretamente a memória principal :
[pic 3][pic 4]
Outra forma de melhorar a velocidade de acesso a cache é através do princípio de localidade espacial, uma vez que os dados na cache são carregados em e não um por vez é possível otimizar a velocidade de acesso. Esse método do carregamento em blocos reduz a quantidade de acesso à memória principal, uma vez sendo o principio de localidade definido da seguinte forma: Se certo dado foi acessado provavelmente seus dados adjacentes serão os próximos Patterson e Hennessy (2).
Com base nos conceitos apresentados, esse trabalho terá o intuito de avaliar o desempenho da memória cache em função do processamento de grandes volumes de dados, simulando o processo de conversão de imagnes para a escala cinza.
2 Metodologia
Os algorimos utilizados para realizar os experimentos foram os mesmos propostos no enunciado do trabalho (Primeiro programa de teste, Segundo programa de teste), porém os mesmos foram adaptados para trabalhar em conjunto, ou seja, um após o outro para um mesmo valor aleatório de interações. Para a realização dos testes, foi utilizado um laço externo, dessa forma o programa foi executado 200 vezes. As 200 interações foram escolhidas para que se obtivesse uma quantia razoável de dados, assim minimizando possíveis erros, além de que a representação grafica dos dados se mostrou bem distribuída para tais valores como será visto na sessão de resultados. Em seu trabalho Vital e col.(4) discorrem sobre o erro amostral e o tamanho da amostra, salientando que o tamanho da amostra e a incidência do erro são inversamente proprocionais. A figura 3 mostra a relação entre tamanho da amostra e erro amostral, assim deixando o conceito mais claro.
[pic 5][pic 6]
Depois da escolha do tamanho da amostra, os testes no algoritmo foram realizados de forma automática, como descrita a seguir;
Em cada laço um valor aleatório era fornecido pela função Rand da linguagem C, esse valor era trabalhado pelos laços internos (primeiro programa fornecendo valor para a matriz IxJ e o segundo programa fornecendo valor para a Matriz JxI), sendo que após o término de cada laço os valores referentes ao numeros de interações e tempo gasto eram salvos em um arquivo .txt. No primeiro teste, a medição do tempo foi realizada em segundos, o tempo inicial e o tempo final de cada execução eram obtidos através da função time (), a qual pertence à biblioteca time.h, o valor da execução era obtido pela linha de código tempo_total=(tempof-tempoi);. Porém tais resultados não foram satisfatórios, uma vez que para apresentação gráfica a escala de segundo não se mostrou eficiente, pois para valores pequenos incidência de 0 segundo era muito alta, e diferença entre intervalos era evidente apenas para valores mais altos. A tabela 1 mostra o trecho até o vigésimo valor já ordenado.
Matriz IxJ | Matriz JxI | |||
Interações | Segundos | Interações | Segundos | |
38 | 0 | 38 | 0 | |
42 | 0 | 42 | 0 | |
54 | 0 | 54 | 0 | |
107 | 0 | 107 | 0 | |
154 | 0 | 154 | 0 | |
192 | 0 | 192 | 0 | |
289 | 0 | 289 | 0 | |
292 | 0 | 292 | 0 | |
293 | 0 | 293 | 0 | |
334 | 0 | 334 | 0 | |
384 | 0 | 384 | 0 | |
468 | 0 | 468 | 0 | |
492 | 0 | 492 | 0 | |
538 | 0 | 538 | 0 | |
779 | 0 | 779 | 0 | |
837 | 0 | 837 | 0 | |
901 | 0 | 901 | 0 | |
1021 | 0 | 1021 | 0 | |
1102 | 0 | 1102 | 0 | |
1108 | 0 | 1108 | 0 | |
1116 | 0 | 1116 | 0 | |
1151 | 0 | 1151 | 0 | |
1323 | 0 | 1323 | 0 |
Tabela 1: Resultados das interações em segundos
Fonte: Autoria própria
Para os próximos testes foi utilizado um trecho de código diferente para extrair o tempo em milisegundos, tempo_total=(tempof-tempoi)*1000/CLOCKS_PER_SEC, obtendo dessa vez resultados satisfatórios para análise e posterior entendimento da memória cache no processamento das matrizes de dados. Foram utilizadas mais formas de extrair os tempos dos ciclos, como a função Difftime, e os resultados foram bem semelhantes, assim confirmando a elegibiliadade dos dados em relação à saída dos mesmos no código, além das sucessivas repetições do experimento fornecer dados muito próximos ao do primeiro experimento. Levando em conta que foram realizados 5 experimentos, os quais cada um realizava 200 interações, interações essas as quais passavam pelos laços internos variando de acordo com a contagem de 1 até 10000, e, na situação com menor quantidade de interações foram realizadas 200x42x2= 16800 interações.
...