Vous êtes sur la page 1sur 32

Trabalho de Conclusao˜

de Curso

Implanta¸c˜ao de uma grade BOINC no CEC com aplica¸c˜oes para codifica¸c˜ao de v´ıdeos

Aluno:

Alexandre Ouno Atoji

Orientador:

Roberto Hirata Jr.

4 de fevereiro de 2011

Sum´ario

1 Introdu¸c˜ao

3

2 Bases Tecnol´ogicas

4

2.1 Computa¸c˜ao Distribu´ıda

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

4

2.2 Computa¸c˜ao Volunt´aria

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

4

2.3 Codec

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

5

2.4 Speed-up .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

5

2.5 Python .

2.5.1

. Linguagem Multiplataforma

.

.

.

.

.

.

.

.

.

.

.

.

.

.

2.6 PyMW .

2.7 FFmpeg

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

3 BOINC

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

6

6

. .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

7

7

8

3.1 Arquitetura e Funcionamento

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

8

3.1.1 O servidor

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

8

3.1.2 Os volunt´arios .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

8

3.1.3 Cria¸c˜ao e Distribui¸c˜ao de Tarefas

.

.

.

.

.

.

.

.

.

.

.

.

9

3.1.4 Gerenciamento de Tarefas e Limpeza de Disco

 

.

.

9

3.1.5 Integra¸c˜ao do BOINC com o Python

.

.

.

.

.

.

.

.

.

.

10

3.2 Requisitos M´ınimos

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

10

4 Atividades realizadas

11

5 Resultados Obtidos

13

5.1 Implementa¸c˜ao

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

13

5.1.1 Instala¸c˜ao do PyMW .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

13

5.1.2 Cria¸c˜ao de programas

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

14

5.1.3 Enviando o interpretador Python para as workunits

 

16

5.1.4 Outros tipos de argumentos

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

16

5.1.5 Enviando e Recebendo arquivos como resultado

.

.

.

.

16

5.1.6 Processando v´ıdeos

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

17

5.2 Implanta¸c˜ao

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

17

Testes

5.3 .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

17

5.3.1

Ambiente de Teste

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

17

5.3.2

Procedimento

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

18

5.3.3

Teste com v´ıdeo pequeno

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

18

5.3.4

Teste com v´ıdeo de 12 minutos

.

.

.

.

.

.

.

.

.

.

.

.

.

18

5.3.5

Teste com v´ıdeo de 50 minutos

.

.

.

.

.

.

.

.

.

.

.

.

.

19

5.3.6

Teste com v´ıdeo de 1 hora e 41minutos

.

.

.

.

.

.

.

.

.

21

1

5.4 Um caso de uso: compress˜ao de dados recebidos de cˆameras

.

23

5.5 Vantagens e Desvantagens no uso do BOINC e Python

.

.

.

.

23

5.5.1 Vantagens

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

23

5.5.2 Desvantagens

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

24

6 Conclus˜ao

26

7 Desafios e frustra¸c˜oes encontradas durante o curso

 

28

8 Disciplinas relevantes para o trabalho

 

28

8.1 MAC0122 - Princ´ıpios de Desenvolvimento de Algoritmos

 

29

8.2 MAC0211 - Laborat´orio de Programa¸c˜ao I

.

.

.

.

.

.

.

.

.

.

.

29

8.3 MAC0323 - Estruturas de Dados

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

29

8.4 MAC0417 Vis˜ao e Processamento de Imagens + MAC0338 -

 

An´alise de Algoritmos

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

29

8.5 MAC0422 - Sistemas Operacionais

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

29

8.6 MAC0438 - Programa¸c˜ao Concorrente

.

.

.

.

.

.

.

.

.

.

.

.

.

30

9 Conceitos Aplicados

30

10 Continua¸c˜ao do trabalho

 

30

11 Agradecimentos

31

2

Parte I - Objetiva

1

Introdu¸c˜ao

O

processamento de v´ıdeo ´e, mesmo com o aumento do poder computacional

do computador pessoal, uma tarefa muito custosa pois nela ´e processada um

grande volume de dados. Atualmente os v´ıdeos possuem maior resolu¸c˜ao, melhor qualidade de audio.´ Ao mesmo tempo que queremos assistir v´ıdeos em telas com resolu¸c˜oes maiores, tamb´em queremos assisti-los em celulares, aparelhos mp4, iPods,

video-game port´atil. Para isso precisamos converter esses v´ıdeos em v´arios formatos. Tarefas simples como convers˜ao de formato ou redimensionamento de v´ıdeo costumam demorar um tempo consider´avel e por muitas vezes ´e um fator suficiente para desmotivar a realiza¸c˜ao da tarefa. Pode-se pensar em diversos sistemas que recebem grande volumes de v´ı- deos como entrada diariamente e que necessitam de convers˜ao. Um exemplo

´e de um sistema de cˆameras de vigilˆancia que recebe como entrada v´ıdeos 24

horas por dia e 7 dias por semana. Guardar esses v´ıdeos sem nenhum tipo de compress˜ao gera um grande problema pois necessita de grande quantidade de espa¸co para armazenar esses v´ıdeos. Uma abordagem recente para mitigar esta tarefa ´e realiz´a-la numa GPU (Graphics Processing Unit). A quantidade de n´ucleos de uma GPU recente pode chegar a 512, o que tem motivado muitos desenvolvedores a migrar suas aplica¸c˜oes para aproveitar esse grande poder de processamento. Uma outra abordagem ´e oferecida por empresas de servi¸cos de codifica¸c˜ao de v´ıdeos por internet. Um exemplo ´e o da pandastream.com que oferece um servi¸co web de convers˜ao de v´ıdeo que se utiliza de uma grade com m´aquinas virtuais da Amazon EC2. Neste trabalho por´em foi realizada uma abordagem diferente: utilizare- mos uma grade computacional oportunista. Para construir esta grade oportunista utilizamos o middleware BOINC

que ´e uma solu¸c˜ao de c´odigo livre. Constru´ımos o programa para ser execu- tado na grade com a linguagem Python com o m´odulo PyMW para realizar

a comunica¸c˜ao com o BOINC e o FFMpeg para a convers˜ao do v´ıdeo. E por

fim, analisamos os resultados obtidos e conclu´ımos que a solu¸c˜ao ´e vi´avel.

Al´em dessas aplica¸c˜oes, existem outras ´areas de pesquisa que possuem um grande volume de dados para serem processados, mas que nem sempre tem

a disposi¸c˜ao super computadores para realizar tal processamento. Utilizar

computadores ociosos ´e uma forma barata de utilizar recursos j´a existentes para criar uma grade computacional de processamento.

3

2 Bases Tecnol´ogicas

Neste cap´ıtulo faremos um levantamento dos conceitos e tecnologias estuda- das para o desenvolvimento deste trabalho.

2.1 Computa¸c˜ao Distribu´ıda

Programa¸c˜ao distribu´ıda ´e uma forma de realizar processamento simultane- amente, utilizando m´ultiplos computadores autˆonomos que se comunicam entre si atrav´es de uma rede para atingir um objetivo em comum [And00]. Em sistemas distribu´ıdos geralmente s˜ao utilizados clusters, que s˜ao con- juntos de m´aquinas que trabalham como se fosse um s´o computador, em v´arios aspectos e se comunicam por uma rede. Um tipo de cluster ´e a Grade, que difere um pouco dos tradicionais clusters de alta performance pelo fato das m´aquinas conectadas serem heterogˆeneas e distribu´ıdas geograficamente [GJG + 05]. Um exemplo famoso ´e o projeto Beowulf, no qual s˜ao utilizados compu- tadores de baixo custo para formar uma grade dedicada agindo como um unico´ supercomputador. Segundo o projeto, uma grade deste tipo provˆe um recurso computacional equivalente a um supercomputador por um ter¸co do pre¸co [Flo10]. Na listagem do TOP500 de novembro de 2010, 83% dos computadores mais r´apidos do mundo s˜ao clusters [TOP]. Uma caracter´ıstica de sistemas distribu´ıdos ´e que eles possuem alta dis- ponibilidade, s˜ao tolerantes a` falhas de m´aquinas individuais e expandir um sistema distribu´ıdo ´e relativamente simples. Os algoritmos desenvolvidos para serem executados em sistemas distribu´ı- dos s˜ao diferentes dos programas executados em um unico´ processador. Eles devem se preocupar com a sincroniza¸c˜ao de tarefas evitando que ocorram deadlocks, condi¸c˜ao de corrida, etc.

2.2 Computa¸c˜ao Volunt´aria

Computa¸c˜ao volunt´aria [BOI10] ´e um tipo de computa¸c˜ao no qual as pes- soas(volunt´arios) disponibilizam recursos computacionais para projetos que utilizam para fazer computa¸c˜ao ou armazenamento distribu´ıdo. Esses proje- tos geralmente s˜ao acadˆemicos, como o GIMPS 1 e o distributed.net 2 Os projetos s˜ao de diversas areas´ do conhecimento humano, desde busca de curas de doen¸cas at´e a busca de formas extra-terrestres de vida. Os computadores volunt´arios inscritos em um projeto doam os seus ciclos de processamento n˜ao utilizados, ou quando est˜ao realizando tarefas que n˜ao

4

utilizam todo o poder computacional do computador ou quando o computa- dor est´a totalmente ocioso. Existe um grande n´umero de computadores no mundo e esse n´umero vem aumentando com o passar do tempo. Boa parte destes recursos n˜ao utiliza todo seu poder na maior parte do tempo.

2.3 Codec

Codec ´e um software respons´avel por codificar e decodificar os dados de ´audio e v´ıdeo [Cod10]. Codecs podem ser separados em duas categorias em rela¸c˜ao `a qualidade da compress˜ao:

Com perdas: S˜ao codecs que conseguem comprimir os dados, mas ocorre perda de informa¸c˜ao em sua decodifica¸c˜ao. Essa perda geral- mente ´e ajustada para que haja a menor percep¸c˜ao por parte do usu´a- rio final. Eles s˜ao populares por oferecerem uma taxa de compress˜ao bem alta em rela¸c˜ao ao arquivo original.

Sem perdas: S˜ao codecs que comprimem os dados, mas em sua decodi- fica¸c˜ao n˜ao h´a perda de informa¸c˜ao. Eles s˜ao populares por preservar a qualidade do v´ıdeo.

2.4 Speed-up

Em computa¸c˜ao paralela, speed-up ´e uma medida para indicar o quanto um programa paralelo ´e mais r´apido que o programa sequencial. Seu c´alculo ´e dado por:

Onde:

S p = T 1

T p

(1)

T 1 ´e o tempo de execu¸c˜ao do algoritmo sequencial

T p ´e o tempo de execu¸c˜ao do algoritmo paralelo com p processadores

2

2

http://www.mersenne.org/

http://www.distributed.net/

5

2.5

Python

A Linguagem Python ´e uma linguagem dinˆamica amplamente utilizada em v´arios dom´ınios de aplica¸c˜ao.[Pyt10b].

A linguagem ´e de tipagem dinˆamica e forte considerada como de alt´ıs-

simo n´ıvel, pois ´e multi paradigma, isto ´e, pode ser programada de forma,

imperativa, orientada a objetos, etc. Prioriza a legibilidade de c´odigo sobre

a expressividade.

E conside-

rada uma linguagem bem est´avel e tem lan¸camentos de vers˜oes principais

em per´ıodos de 18 meses em m´edia. Devido suas caracter´ısticas, o Python

´e bastante indicado para programadores iniciantes e vem sendo utilizado em cursos introdut´orios de diversas faculdades no mundo [Pyt10a].

O Python ´e uma linguagem amplamente utilizada em v´arias aplica¸c˜oes ci-

ent´ıficas (mesmo n˜ao possuindo uma performance compar´avel ao C ou C++)

e possui uma grande quantidade de bibliotecas especializadas em diversos

´

Foi criada por Guido van Rossum em 1991.

´

dom´ınios como Processamento de Imagens 3 , Vis˜ao Computacional 4 , Algebra Linear 5 , entre outros. Al´em de possuir essa grande quantidade de bibliote- cas nativas, ela ´e facilmente integrada com objetos COM, .NET, CORBA e bibliotecas Java. Exemplos de casos de sucesso de projetos utilizando esta linguagem po- dem ser encontrados no site: http://www.python.org/about/success/ Outro campo que vem se utilizando amplamente o Python ´e no desenvol- vimento web, com frameworks famosos como o Django 6 e o Pylons 7 .

2.5.1 Linguagem Multiplataforma

Outro fator importante ´e que programas feitos em Python podem ser execu- tados em diversos sistemas operacionais como Windows, Unix, Linux, Ma- cOS/X, Amiga e sistemas de port´ateis como Symbian, Windows Mobile, iOS

e Android [Pyt10b]. Este foi um fator determinante para a escolha da linguagem para a rea- liza¸c˜ao do projeto pois como o BOINC distribui tarefas para qualquer com- putador anexado no projeto, ´e de extrema importˆancia que o programa rode em uma boa quantidade de sistemas operacionais. Com linguagens compi- ladas como C ´e poss´ıvel compilar um execut´avel para cada sistema e enviar para o volunt´ario o execut´avel espec´ıfico do seu SO, mas o problema ´e que vocˆe precisa recompilar para todos os sistemas a cada mudan¸ca do c´odigo,

3 PIL - http://www.pythonware.com/products/pil/ 4 PyOpenCV - http://code.google.com/p/pyopencv/ 5 NumPy - http://numpy.scipy.org/ 6 Django - http://www.djangoproject.com/ 7 Pylons - http://pylonshq.com/

6

e compilar para diversos sistemas s˜ao necess´arios cross-compilers ou possuir m´aquinas com esse sistema operacional.

2.6 PyMW

O PyMW ´e um m´odulo Python que possibilita a computa¸c˜ao paralela no es-

tilo Mestre-Escravo em diversos ambientes como Condor 8 e BOINC [PyM10].

Ele ´e indicado no site do BOINC como sendo o m´odulo que deve-se utilizar ao fazer um programa em Python para o BOINC. Parte de seu c´odigo foi desenvolvido durante o Google Summer of Code.

O PyMW foi criado por Eric Heien e a interface com o BOINC foi desen-

volvida por Adam Kornafeld e Jeremy Cowles. Ambos s˜ao muito atenciosos e sempre respondem as perguntas relacionadas ao projeto muito rapidamente. Por ser um projeto recente, ainda n˜ao existem projetos grandes utilizando-

se do PyMW, apenas pequenos programas de exemplo criados pelos desenvol- vedores do PyMW, como por exemplo, um programa que estima o PI atrav´es de Monte Carlo [HTHK09].

2.7 FFmpeg

O FFmpeg ´e um projeto opensource e multiplataforma que produz bibliote-

cas e programas que lidam com v´ıdeo e ´audio. Suas partes mais not´aveis s˜ao

o libavcodec, libavformat e o programa de linha de comando com o mesmo

nome do projeto [FFM10], sendo este ultimo´ utilizado no trabalho para re- alizar opera¸c˜oes sobre os v´ıdeos que s˜ao dados como entrada. O Projeto FFmpeg suporta umas dezenas de codecs e formatos de audio´ e v´ıdeo. Uma vantagem do FFmpeg ´e que, assim como o Python, ele ´e multipla-

taforma, possibilitando a sua execu¸c˜ao em diversos sistemas operacionais.

O FFmpeg est´a sob a licen¸ca LGPL ou GPL dependendo da escolha de

configura¸c˜oes. Suas bibliotecas s˜ao utilizadas por diversos softwares que processam v´ı-

deos, e em muitos casos ´e quebrada sua licen¸ca. O projeto FFmpeg mant´em uma listagem dos softwares comerciais que quebraram sua licen¸ca em uma p´agina chamada ”Hall of Shame 9 ”e desencoraja a compra desses softwares.

8 http://www.cs.wisc.edu/condor/

9 http://www.ffmpeg.org/shame.html

7

3

BOINC

O

Berkeley Open Infrastructure for Network Computing (BOINC) ´e um

sistema middleware n˜ao comercial desenvolvido para computa¸c˜ao volunt´a- ria e em grade [And]. Ele foi inicialmente desenvolvido para o projeto SETI@home, que tem como objetivo buscar vida extra-terrestre, e depois

acabou virando uma plataforma para aplica¸c˜oes distribu´ıdas de diversas areas´

do conhecimento. Uma listagem de projetos ativos utilizando o BOINC pode

ser encontrada em: http://boincstats.com/.

O BOINC ´e um software livre e est´a sob a licen¸ca LGPL.

3.1 Arquitetura e Funcionamento

O BOINC inicialmente foi desenvolvido para projetos que se utilizam de

computa¸c˜ao volunt´aria, mas tamb´em pode ser utilizado como uma grade dedicada apenas alterando algumas configura¸c˜oes do servidor. Em uma grade BOINC h´a dois tipos de m´aquinas: o servidor e os volun- t´arios.

3.1.1 O servidor

Est´a ´e a m´aquina respons´avel por hospedar e distribuir tarefas para os com- putadores volunt´arios. O servidor tamb´em ´e respons´avel por gerenciar as respostas retornadas pelos volunt´arios, chegar a coerˆencia da resposta para produzir o resultado final. Periodicamente o servidor realiza tarefas de ma- nuten¸c˜ao e limpeza dos dados do projeto. Todas essas tarefas s˜ao feitas atrav´es de daemons que ficam sempre em execu¸c˜ao no servidor.

A figura 1 apresenta um esquema do funcionamento do servidor e como

ele se comunica com os clientes.

3.1.2 Os volunt´arios

Os volunt´arios s˜ao m´aquinas que se conectam ao projeto hospedado pelo servidor. Elas podem doar somente o processamento quando est˜ao ociosas

ou podem ser dedicadas.

O computador volunt´ario pode disponibilizar v´arios recursos para um

projeto, como por exemplo: CPU, GPU, mem´oria RAM e armazenamento.

A figura 1 tamb´em apresenta o funcionamento interno de um cliente e

como se comunica com o servidor.

8

Voluntário Servidor Requisita Tarefas Cria Tarefas Processa Tarefa Envia Resultado Assimila Resultados Resultado
Voluntário
Servidor
Requisita Tarefas
Cria Tarefas
Processa Tarefa
Envia Resultado
Assimila Resultados
Resultado Final

Figura 1: O funcionamento do BOINC

3.1.3 Cria¸c˜ao e Distribui¸c˜ao de Tarefas

Para cria¸c˜ao de tarefas, o projeto deve estar com o c´odigo preparado para a

cria¸c˜ao de tarefas. H´a dispon´ıvel bibliotecas para a escrita de c´odigo nativo em linguagens como C/C++, Python, Java e Fortran. Projetos que necessitam de alguma linguagem que n˜ao tenha suporte nativo ou que utilizam execut´aveis legados podem se utilizar do chamado Wrapper [Flo10] do BOINC, que ´e um programa escrito utilizando as biblio- tecas nativas permitindo que esses projetos sejam enviados para as m´aquinas volunt´arias. Com o c´odigo preparado, o servidor gera as tarefas que s˜ao pequenos programas. Esses programas s˜ao empacotados pelo servidor e armazenados, esperando a requisi¸c˜ao por parte de um computador volunt´ario. Quando um computador volunt´ario envia um sinal dizendo que est´a requisitando tarefas,

o servidor envia uma quantidade estipulada de tarefas para essa m´aquina.

Essa m´aquina processa as tarefas recebidas e retorna o resultado obtido para

o servidor.

3.1.4 Gerenciamento de Tarefas e Limpeza de Disco

Com os resultados recebidos, o servidor, verifica se eles s˜ao v´alidos e se n˜ao houve m´a inten¸c˜ao de algum volunt´ario em mandar um resultado incorreto. Para isso existem algumas t´ecnicas para contornar esse problema como cripto- grafia de resultado e enviar a mesma tarefa para v´arios volunt´arios diferentes para comparar seus resultados. Ap´os a verifica¸c˜ao dos resultados, caso sejam v´alidos, ´e executado um programa gerenciador, que pega os resultados dos diversos volunt´arios e processa-os gerando um resultado final.

9

Ap´os obter um resultado final, s˜ao apagados os arquivos que n˜ao s˜ao mais necess´arios.

3.1.5 Integra¸c˜ao do BOINC com o Python

Utilizamos o PyMW, que ´e um m´odulo que possibilita a computa¸c˜ao mestre- escravo escrevendo c´odigo Python no BOINC. O PyMW provˆe uma API que possui funcionalidades comuns para diversos ambientes de computa¸c˜ao em grade, um deles ´e o BOINC. A figura 2 mostra as camadas de um programa escrito com o PyMW.

Servidor BOINC

Servidor BOINC
PyMW Programa em Python
PyMW
Programa em Python

Cliente BOINC

Cliente BOINC
API Python do BOINC PyMW Programa em Python
API Python do BOINC
PyMW
Programa em Python

Figura 2: Integra¸c˜ao do cliente e do servidor BOINC com o PyMW

3.2 Requisitos M´ınimos

Necessita-se de uma m´aquina com PHP, Apache e Mysql instalados para criar um servidor BOINC, al´em de bibliotecas e compiladores necess´arios para a compila¸c˜ao do c´odigo-fonte do servidor BOINC. Recomenda-se instalar no sistema operacional Linux. Para os clientes os requisitos variam de projeto para projeto. Alguns projetos exigem um m´ınimo de mem´oria RAM, outros exigem que tenha interpretador de alguma linguagem instalada na m´aquina. Projetos tamb´em podem restringir sistemas operacionais.

10

4

Atividades realizadas

O

trabalho teve in´ıcio em meados de fevereiro de 2010 quando foi decidido,

junto com o professor Roberto Hirata Jr. o tema do trabalho de conclus˜ao de curso. Inicialmente cogitou-se em fazer um software para codifica¸c˜ao de v´ıdeo utilizando processamento em GPU, mas com o passar da discuss˜ao chegamos em um consenso de fazer o uso do BOINC para testar a sua viabilidade e performance para processamento de v´ıdeo e programas em Python. Al´em disso, um fator que proporcionou a escolha desse tema foi o fato do IME j´a ter uma grade BOINC instalada no CEC no qual foi utilizado pelo Rodrigo Flores no ano anterior em seu trabalho de conclus˜ao de curso, dando em partes, uma continua¸c˜ao de seu projeto. Ap´os a escolha do tema come¸cou o trabalho de aprender como era o funcionamento do BOINC. Primeiramente foi instalado o cliente BOINC em m´aquinas locais e virtuais (cada uma n˜ao conectada com outra) e instalado projetos BOINC j´a existentes. Em seguida foi criada e testada uma rede local entre esses computadores, e criado um servidor BOINC em uma m´aquina virtual. Com o ambiente j´a inicialmente preparado e testado, foi iniciado o estudo

das bibliotecas e softwares a serem utilizados. Assim come¸cou o estudo da uti- liza¸c˜ao do PyMW e do FFmpeg. Ap´os um tempo de estudo, foi desenvolvido uma biblioteca auxiliar que permitia a divis˜ao dos v´ıdeos em diversas partes

e a uni˜ao desses v´ıdeos. Ent˜ao foi iniciado o desenvolvimento de programas

simples que j´a utilizavam o PyMW para enviar tarefas ao mesmo computa- dor de forma concorrente. Depois foi desenvolvido a vers˜ao desses programas

que utilizavam a grade BOINC local para a realiza¸c˜ao de tarefas. Nesta fase percebeu-se que o PyMW apresentava problemas ao codificar e decodificar

os arquivos para serem transmitidos na rede BOINC, para isso entrou-se em

contato com os criadores da biblioteca, e ap´os algumas conversas e pesquisas, foi descoberta uma solu¸c˜ao para tal problema. J´a com os programas prontos e funcionando na grade BOINC local, che-

gou a hora de partir para o ambiente real, ou seja, a grade BOINC instalada no CEC, pois na grade BOINC local havia todo o controle sobre todas as m´aquinas e servidor. Primeiramente, para configurar o ambiente real foi necess´ario configurar

o servidor da grade que est´a localizado na rede Vision. Aparentemente j´a

estava tudo configurado e funcionando, bastava criar o projeto dentro dele

e fazer a implanta¸c˜ao da aplica¸c˜ao. Mas logo ao colocar a aplica¸c˜ao no ar,

notou-se que a vers˜ao do servidor (que era do ano passado) n˜ao era compat´ıvel

com o PyMW sendo necess´aria a reinstala¸c˜ao e reconfigura¸c˜ao do mesmo. Ap´os a reinstala¸c˜ao do servidor, surgiu-se outro problema: a vers˜ao dos

11

clientes BOINC era incompat´ıvel com a vers˜ao do servidor. A vers˜ao do cliente ´e uma vers˜ao antiga, presente no Debian Lenny (a vers˜ao atualmente est´avel), e como era invi´avel a instala¸c˜ao de uma vers˜ao mais atual (por causa da pol´ıtica do CEC) precisou-se obter uma outra solu¸c˜ao. Para conseguir esta solu¸c˜ao, foram testadas diversas vers˜oes de servidor at´e obter uma que era compat´ıvel com o PyMW e os clientes do CEC ao mesmo tempo. Com o ambiente real funcionando come¸cou a realiza¸c˜ao dos testes. Pri- meiro um teste com um v´ıdeo pequeno e com o passar do tempo, com entradas cada vez maiores.

12

5

Resultados Obtidos

O

trabalho tem como objetivo o teste de viabilidade de uma aplica¸c˜ao de

codifica¸c˜ao de v´ıdeo utilizando Python em uma grade BOINC.

5.1

Implementa¸c˜ao

Para desenvolver o trabalho foi necess´aria a utiliza¸c˜ao do PyMW para li-

dar com a cria¸c˜ao e distribui¸c˜ao de tarefas, conforme descrito no cap´ıtulo 3 destinada ao PyMW.

O programa recebe um v´ıdeo como entrada, quebra-o v´ıdeo em diversas

partes menores e envia pela rede aos computadores localizados no CEC. Cada

computador volunt´ario, converte o v´ıdeo para MPEG e redimensiona para

a resolu¸c˜ao HVGA. Ao terminar o processamento, o computador volunt´ario

retorna esse v´ıdeo processado para o servidor. Quando o servidor recebe todas

as respostas, ele junta esses peda¸cos em um unico´ v´ıdeo, que ´e o resultado final.

A aplica¸c˜ao, ent˜ao, ´e composta somente de um programa para a distri-

bui¸c˜ao na grade. Isso ocorreu pelo fato do PyMW + PyBOINC encapsular

o interpretador Python junto com os arquivos que s˜ao enviados para os vo- lunt´arios.

´

E

necess´ario que a m´aquina do volunt´ario possua o FFmpeg instalado,

pois o programa realiza chamadas ao FFmpeg para realizar algumas opera- ¸c˜oes sobre o v´ıdeo.

5.1.1 Instala¸c˜ao do PyMW

A instala¸c˜ao do PyMW ´e bastante simples, segue o padr˜ao de instala¸c˜ao de

outras bibliotecas Python.

Basta fazer o download do projeto em http://pymw.sourceforge.net/

Descompactar o arquivo em alguma pasta, como por exemplo execu- tando tar -xzvf pymw-0.x.tar.gz

Entrar na pasta

E executar o comando python setup.py install

O PyMW necessita que o Python instalado tenha vers˜ao maior do que a

2.6

13

5.1.2 Cria¸c˜ao de programas

Para a cria¸c˜ao de um programa que utilize o PyMW necessita-se que o m´odulo pymw esteja importado no programa.

from

pymw

import

pymw

Com o m´odulo importado, precisa-se criar a fun¸c˜ao que ser´a o c´odigo a ser executado nas m´aquinas volunt´arias:

def

work ( name ,

uma

video ) :

””” R e ali z a

sim pl e s

ope r ac a o

com o

ffmpeg .

”””

f

= open ( name ,

wb )

f

. write ( video )

f

. close ()

subprocess . call ( [

] ) to_send = open ( t o s e n d . mpg , rb )

video =

to_send . close ()

return video

to_send . read ()

ffmpeg ,

i

,

name ,

s

,

480 x320 ,

t o

s e n d . mpg

Ap´os a cria¸c˜ao do c´odigo para ser executado, precisa-se criar o programa principal que ficar´a no servidor e que se encarregar´a de criar e enviar tarefas. Este programa principal deve:

Definir qual ser´a o grid no qual o programa ser´a enviado (BOINC,

Condor, MPI

)

Criar o objeto PyMW Master

Submeter tarefas

Receber resultados e trat´a-los

Para definir qual ser´a o ambiente no qual ser´a enviado o programa, deve-se criar um objeto interface e ´e comum criar utilizando-se o m´etodo

interfaces . get_interface ( options )

Que recebe um objeto de op¸c˜oes obtidas atrav´es do m´etodo

interfaces . parse_options ( parser )

14

Estas op¸c˜oes s˜ao obtidas atrav´es dos argumentos inseridos ao executar o programa na linha de comando, tornando o programa desacoplado de um ambiente grid em espec´ıfico. Caso necessite que o programa seja espec´ıfico para um ambiente de com- puta¸c˜ao em grade pode-se criar o objeto de interface espec´ıfico:

pymw . interfaces . generic . Classe_Referente_ao_ambiente

No caso de utilizar o PyMW com o BOINC h´a a possibilidade de confi- gurar o objeto interface com esse o m´etodo

set_boinc_args ( target_nresults =2,

min_quorum =1,

max_nbytes =65536)

Com o objeto de interface criado, para criar um objeto PyMW Master simplesmente basta passar o objeto de interface como argumento para o m´e- todo

pymw . PyMW_Master ( pymw_interface )

Este objeto PyMW Master ´e o respons´avel por enviar e receber informa- ¸c˜oes enviadas para os volunt´arios. Para enviar um trabalho executa-se o m´etodo

submit_task ( executable , data_files =() )

input_data=None ,

modules =() ,

dep_funcs =() ,

Este m´etodo tem como parˆametro:

executable - referˆencia para a fun¸c˜ao que ser´a enviada para as workunits

input data - vari´aveis que ser˜ao dadas como entrada na fun¸c˜ao execu- table

modules - m´odulos utilizados pela executable

dep funcs - fun¸c˜oes que o executable ´e dependente

data files - arquivos para serem enviados junto com as workunits

O m´etodo submit task retorna um objeto do tipo Task que vocˆe deve armazenar em algum local para posteriormente recuperar a informa¸c˜ao pro- cessada com o m´etodo

get_result ( task=None ,

blocking=True )

15

5.1.3 Enviando o interpretador Python para as workunits

Uma vantagem do PyMW ´e a possibilidade de enviar o interpretador Python para as workunits. Com isso torna-se poss´ıvel para os computadores volun- t´arios executar qualquer programa escrito em Python mesmo n˜ao possuindo ele ou o PyMW instalados. Para isso ´e necess´ario baixar os interpretadores do projeto PyBOINC que est˜ao em http://bitbucket.org/jeremycowles/pyboinc/downloads/pyboinc- 0.01.zip e ao executar o programa deve-se passar como argumento, -c e -a como a seguir:

python

main . py

c

/ home / boincadm / pyboinc a

1.00 _python26 . zip

5.1.4 Outros tipos de argumentos

Al´em da possibilidade de passar como argumento o interpretador, existem outras op¸c˜oes:

-n : Indica quantas workunits ser˜ao criadas

-i : Indica qual interface ser´a usada

-p : A localiza¸c˜ao do projeto

5.1.5 Enviando e Recebendo arquivos como resultado

Para enviar arquivos para as workunits existem duas maneiras. Uma ´e abrir o arquivo no servidor ler o stream e enviar o stream.

video = f . read () f . close () tasks . append ( pymw_master
video
=
f . read ()
f . close ()
tasks . append ( pymw_master . submit_task ( workunits . work ,
input_data =( name ,
video ,
)
,
modules =( ” s u b p r o c e s s ” ,
” e n c o di n g s ” ,
” c o d e c s ” ,
)
, )
)

Outra maneira, mais simples ´e passar como argumento no m´etodo sub- mit task.

Assim como o primeiro m´etodo de enviar arquivos para as workunits existe a mesma abordagem para retornar um arquivo de uma workunit.

.

video =

to_send . close ()

return video

( .

)

.

to_send . read ()

16

5.1.6 Processando v´ıdeos

Para processar v´ıdeo, uma abordagem ´e a utiliza¸c˜ao do FFmpeg atrav´es de chamadas do m´odulo subprocess do Python. Este m´odulo permite a cria- ¸c˜ao de processos e possibilita a manipula¸c˜ao das entradas e sa´ıdas de um programa atrav´es do c´odigo. Segue um exemplo de c´odigo:

import

subprocess . call ( [

subprocess

ffmpeg ,

i

,

name ,

s

,

480 x320 ,

t o

s e n d . mpg ] )

Este trecho converte um v´ıdeo mpeg de qualquer resolu¸c˜ao para um v´ıdeo mpeg de resolu¸c˜ao 480x320 (hvga). Enviar e receber v´ıdeos atrav´es do PyMW gera problemas de encoding quando o PyMW tenta manipular os arquivos, pois o arquivo ´e salvo pelo servidor em uma codifica¸c˜ao que o cliente n˜ao consegue lidar sem ter m´odulos do Python importados. Para resolver este problema precisa-se importar os m´odulos codecs e encodings na fun¸c˜ao que ser´a enviada para as workunits.

5.2 Implanta¸c˜ao

Com o final do trabalho obtivemos 1 servidor BOINC atualizado e configu- rado para a execu¸c˜ao e distribui¸c˜ao de programas desenvolvidos em Python, al´em de 32 m´aquinas da rede CEC com o projeto instalado e rodando tarefas obtidas do servidor BOINC. Foi necess´aria a reinstala¸c˜ao do servidor BOINC, pois a vers˜ao que estava instalada era antiga e n˜ao conseguia conversar com os clientes e nem tinha compatibilidade com a vers˜ao 0.4 do PyMW. Para reinstalar foi necess´ario baixar o c´odigo fonte e compilar. Para a configura¸c˜ao do servidor BOINC foi necess´aria a instala¸c˜ao do Python2.6 via compila¸c˜ao, pois o Debian Lenny n˜ao suporta tal vers˜ao e a instala¸c˜ao do conector de MySQL para Python2.6.

5.3 Testes

5.3.1 Ambiente de Teste

Foram realizados testes para determinar o desempenho da aplica¸c˜ao. Para isso foram executados testes em dois ambientes: uma m´aquina local e a grade do CEC. A m´aquina local possui um processador Intel(R) Core(TM)2 Duo T6600 @ 2.20GHz com 4Gb de mem´oria RAM. E a grade da rede CEC utilizada para testes possui 32 computadores Celeron E3300 2.50GHz, metade com 2Gb de mem´oria e com outra metade com 4Gb.

17

5.3.2 Procedimento

Foram feitos 4 testes diferentes. Um com um v´ıdeo de 400kb, outro de 50Mb, outro de 100Mb e finalmente um de 200Mb. Al´em de variar o tamanho dos v´ıdeos, tamb´em variou-se a quantidade de volunt´arios utilizados para processar o v´ıdeo. Foram feitas baterias de testes utilizando-se 1, 2, 4, 8, 16 e 32 volunt´arios. Isso foi feito para determinar para qual tamanho e quantas m´aquinas utilizadas valem a pena utilizar a grade volunt´aria. Para determinar o tempo m´edio de execu¸c˜ao para processar cada tarefa foi feita uma bateria contendo 10 execu¸c˜oes idˆenticas.

5.3.3 Teste com v´ıdeo pequeno

Neste teste foi utilizado um arquivo de v´ıdeo no formato MPEG de tamanho

pequeno, de apenas 400kb.

Como processamento foi feito o redimensiona-

mento do v´ıdeo para a resolu¸c˜ao 480x320 (hvga). Os v´ıdeos n˜ao foram dividi-

dos

em

menos

de

8

partes 10 .

Executando esta opera¸c˜ao na m´aquina local demorou em m´edia 0.865s.

A tabela abaixo indica os resultados obtidos na grade BOINC.

N´umero de Volunt´arios

Tempo M´edio de Execu¸c˜ao

1

133.7727s

2

120.0363s

4

134.2714s

8

143.9511s

Este teste foi feito para mostrar que utilizar uma grade BOINC para converter pequenos arquivos de v´ıdeo n˜ao ´e vi´avel. Isso ocorre porque se gasta mais tempo em enviar e receber dados do que no tempo de processamento nas m´aquinas volunt´arias.

5.3.4 Teste com v´ıdeo de 12 minutos

Neste teste foi realizada a mesma opera¸c˜ao realizada no teste anterior. O v´ıdeo possui 12 minutos e 50Mb de tamanho. Executando esta opera¸c˜ao na m´aquina local demorou em m´edia 75.477s.

A tabela abaixo indica os resultados obtidos na grade BOINC.

10 Pois em partes menores ocorre problema na codifica¸c˜ao do v´ıdeo pois o tamanho do v´ıdeo torna-se menor do que a distˆancia de dois keyframes

18

Figura 3: Gr´afico com tempos de execu¸c˜ao do teste com v´ıdeo pequeno N´umero de Volunt´arios

Figura 3: Gr´afico com tempos de execu¸c˜ao do teste com v´ıdeo pequeno

N´umero de Volunt´arios

Tempo M´edio de Execu¸c˜ao

1

265.2712s

2

197.911s

4

148.7023s

8

144.9689s

16

149.363s

32

155.0923s

Nota-se que neste teste a diferen¸ca entre executar na m´aquina local e na grade BOINC n˜ao ´e gigantesca, como no teste anterior. Outro fato a considerar ´e que o tempo de processamento deste v´ıdeo ´e bem semelhante ao tempo conseguido ao realizar o processamento do v´ıdeo pequeno na grade.

5.3.5 Teste com v´ıdeo de 50 minutos

Neste teste foi realizada a mesma opera¸c˜ao realizada no teste anterior. O dado como entrada possui 50 minutos e 100Mb de tamanho.

19

Figura 4: Gr´afico com tempos de execu¸c˜ao do teste com v´ıdeo de 12 minutos Executando

Figura 4: Gr´afico com tempos de execu¸c˜ao do teste com v´ıdeo de 12 minutos

Executando esta opera¸c˜ao na m´aquina local demorou em m´edia 508.625s.

A tabela abaixo indica os resultados obtidos na grade BOINC.

N´umero de Volunt´arios

Tempo M´edio de Execu¸c˜ao

1

532.463s

2

285.6347s

4

217.2571s

8

171.5135s

16

148.6487s

32

164.5705s

Percebe-se claramente observando os resultados que para este v´ıdeo de 100Mb, que utilizando a partir de duas m´aquinas volunt´arias passa a valer a pena utilizar a grade para converter o v´ıdeo, com 359.9763 segundos de ganho ao utilizar 16 m´aquinas. Ao utilizar 32 m´aquinas se percebe que o overhead

20

Figura 5: Gr´afico com tempos de execu¸c˜ao do teste com v´ıdeo de 50 minutos adquirido

Figura 5: Gr´afico com tempos de execu¸c˜ao do teste com v´ıdeo de 50 minutos

adquirido para distribuir partes do v´ıdeo para todas as m´aquinas faz com que o tempo de execu¸c˜ao m´edio seja maior que se utilizando 16 m´aquinas.

5.3.6 Teste com v´ıdeo de 1 hora e 41minutos

Neste teste foi realizada a mesma opera¸c˜ao realizada no teste anterior. O v´ıdeo possui 1 hora e 41min e 201Mb de tamanho. Executando esta opera¸c˜ao na m´aquina local demorou 1061.280s.

A tabela abaixo indica os resultados obtidos na grade BOINC.

21

N´umero de Volunt´arios

Tempo M´edio de Execu¸c˜ao

1

1872.7312s

2

664.7858s

4

497.2947s

8

286.5701s

16

234.1787s

32

225.6725s

8 286.5701s 16 234.1787s 32 225.6725s Figura 6: Gr´afico com tempos de execu¸c˜ao do teste com

Figura 6: Gr´afico com tempos de execu¸c˜ao do teste com v´ıdeo de 1 hora e 41 minutos

Com o v´ıdeo de 201Mb, passa-se a valer a pena ap´os a utiliza¸c˜ao de 2 m´aquinas volunt´arias tamb´em. Neste caso, utilizar-se das 32 m´aquinas ´e mais vantajoso do que se utilizar de 16. O ganho com as 32 m´aquinas ´e em m´edia de 835.6075 segundos.

22

5.4 Um caso de uso: compress˜ao de dados recebidos de cˆameras

Neste trabalho tamb´em foi desenvolvido um software que captura dados de uma webcam e os armazena em diversos arquivos. Estes arquivos s˜ao envi- ados para a grade BOINC e convertidos para um formato ou tamanho mais conveniente para seu armazenamento. Este tipo de abordagem pode ser de muita utilidade para sistemas de

seguran¸ca patrimonial, pois recebem um grande volume de v´ıdeos para serem armazenados.

O programa desenvolvido executa em trˆes threads no servidor. Uma cha-

mada Producer que ´e respons´avel para capturar o v´ıdeo, outra chamada Submitter que ´e respons´avel para enviar para a grade os v´ıdeos rec´em cria- dos e a ultima´ chamada Assimilator que recebe os v´ıdeos j´a convertidos e os armazena. Ele funciona no estilo produtor-consumidor cl´assico.

O v´ıdeo ´e capturado de forma semelhante aos testes executados na sub-

se¸c˜ao anterior, utilizando-se do FFmpeg.

subprocess . call ( [

   

,

video4linux2 ,

s

640 x480 ,

ffmpeg ,

vframes ,

f

i

/ dev / vi d e o 0 ,

100 ,

f

mpeg ,

output ] )

 

,

 

,

,

 

O c´odigo da workunit utilizada para converter o v´ıdeo na m´aquina volun-

t´aria ´e o mesmo c´odigo utilizado para os testes realizados na se¸c˜ao anterior.

5.5 Vantagens e Desvantagens no uso do BOINC e Python

5.5.1 Vantagens

Como o trabalho pudemos observar as seguintes vantagens na utiliza¸c˜ao do BOINC com o Python:

Facilidade de acrescentar novos n´os: Para acrescentar novos n´os na grade basta instalar um programa no computador. Sua configura- ¸c˜ao ´e f´acil, tanto em ambientes como Windows como em Linux. Nas distribui¸c˜oes Linux, a instala¸c˜ao do Servidor e do Cliente podem ser feitas por gerenciadores de pacotes. No Windows basta instalar um execut´avel dispon´ıvel no site do BOINC.

Plataforma OpenSource: Por ser uma plataforma de c´odigo aberto, muito do custo para instala¸c˜ao e manuten¸c˜ao dos clientes ´e reduzido. Tamb´em pode-se alterar o c´odigo para tornar o BOINC mais otimizado para seu software ou para corrigir bugs.

23

´

Com o trabalho foi poss´ıvel criar programas escritos em c´odigo Python para executar na grade BOINC. Essa solu¸c˜ao ´e boa pois pode-se escre- ver c´odigos de maneira simples e utilizar todos os recursos da lingua- gem, inclusive m´odulos de terceiros.

Solu¸c˜ao multiplataforma: Basta fazer apenas um programa para distribuir pela rede. O mesmo c´odigo pode ser rodado tanto no Linux quando no Mac e Windows. Utilizando-se de outras linguagens precisa- se gerar um execut´avel para cada plataforma no qual o programa ser´a rodado.

Baixo custo de implanta¸c˜ao e infraestrutura: Por ser open source e utilizar de qualquer computador conectado em uma rede, tanto ociosos quanto ativos, o custo para implantar e expandir a grade ´e bem pequeno, pois n˜ao precisa comprar hardware especializado.

Utiliza¸c˜ao de recursos ociosos:

Utiliza computadores que est˜ao

E poss´ıvel utilizar Python sem a necessidade do Wrapper:

ociosos para o desenvolvimento cient´ıfico.

5.5.2 Desvantagens

O projeto enfrentou impedimentos por causa da plataforma. Aqui ser˜ao listados e comentados tais desvantagens que notamos na plataforma.

Latˆencia: Quando o servidor cria as tarefas elas podem ficar algum tempo em espera at´e os volunt´arios come¸carem a requisit´a-las. Isso acontece pois quando o servidor fica sem tarefas para enviar, os clientes entram em um modo de espera. Esse modo de espera come¸ca com 30 segundos sem pedir tarefas, caso n˜ao receba tarefas, esse tempo dobra, e assim sucessivamente at´e no m´aximo 15 minutos. Isso gera uma latˆencia at´e as primeiras m´aquinas come¸carem a requisitar tarefas. Este modo de espera ´e feito para n˜ao sobrecarregar o servidor de requisi¸c˜oes caso n˜ao tenha tarefas dispon´ıveis e por isso n˜ao ´e poss´ıvel desabilitar esta funcionalidade no cliente. Isto ´e uma desvantagem somente para grades BOINC no qual s˜ao liberadas novas tarefas ocasionalmente e que possuem poucos volunt´arios (at´e 16).

Desempenho vari´avel: O tempo de execu¸c˜ao depende do estado que a grade se encontra. Se os volunt´arios n˜ao estiverem ociosos e liberando recursos computacionais para o BOINC, o tempo de proces- samento de v´ıdeo poder´a sofrer um atraso. Essa desvantagem ´e mais

24

notada em execu¸c˜oes de tarefas em grades pequenas (entre 2 e 8 m´a- quinas) com m´aquinas volunt´arias antigas. Isso ocorre pois quando h´a algu´em usando o computador velho, geralmente, consome boa parte dos recursos, fazendo que n˜ao tenha recursos sobrando para disponibilizar para a grade.

Para cargas de processamento pequenas e m´edias n˜ao vale a pena: O processamento de cargas pequenas de processamento no BOINC n˜ao vale a pena devido ao overhead de comunica¸c˜ao. Com os testes realizados, come¸ca a valer a pena a utilizar a grade para converter v´ıdeos de tamanho maior de 100Mb.

Incompatibilidade entre vers˜oes de cliente e servidor: Algumas vers˜oes do servidor BOINC n˜ao s˜ao compat´ıveis com certos clientes. Essa incompatibilidade ocorre em vers˜oes diversas tanto de servidor quanto de cliente, n˜ao seguindo um padr˜ao cronol´ogico de vers˜ao. Por exemplo, um servidor ´e compat´ıvel com clientes de vers˜ao Y1 e Y3, mas n˜ao com a vers˜ao Y2 sendo esta mais recente que a Y1 e mais antiga que a Y3.

25

6

Conclus˜ao

Com este trabalho conclu´ımos que ´e poss´ıvel e vi´avel escrever programas em Python para serem executados em uma grade BOINC e que seu desenvol- vimento ´e bem simples. Esse desenvolvimento vale a pena pelos diversos benef´ıcios proporcionados pela linguagem, como o fato dela ser multiplata- forma. No caso do processamento de v´ıdeo, vale a pena utilizar uma grade BOINC para processar v´ıdeos. Com os testes realizados na rede CEC, foi verificado que passa a valer a pena utilizar a grade para realizar a convers˜ao de v´ıdeos em formato mpeg com tamanho maior que 100Mb. Obteve-se um ganho no tempo de processamento chegando a 470% ao converter um v´ıdeo de 200Mb na grade utilizando-se 32 volunt´arios. Este tipo de abordagem pode ser utilizada para outras aplica¸c˜oes, como por exemplo, o programa feito neste trabalho para receber v´ıdeos de webcams (ou cˆameras de seguran¸ca) e armazenar tal v´ıdeo em um formato comprimido utilizando a grade para fazer a compress˜ao. Espera-se que este trabalho seja de grande ajuda para grupos do IME- USP que necessitam de grande volume de processamento, como o de Vis˜ao Computacional, Processamento de Imagens e Bioinform´atica. Este tipo de plataforma ´e uma ´otima solu¸c˜ao para realizar processamento distribu´ıdo de horas ou dias com pouco investimento por parte da universidade.

26

Referˆencias

[And]

David P. Anderson. Boinc: A system for public-resource compu- ting and storage.

[And00]

Gregory R. Andrews. Foundations of Multithreaded, Parallel, and Distributed Programming. 2000.

[BOI10]

Volunteercomputing

boinc,

2010.

http://boinc.berkeley.edu/trac/wiki/VolunteerComputing.

[Cod10]

Codec

-

wikipedia,

the

free

encyclopedia,

2010.

http://en.wikipedia.org/wiki/Codec.

 

[FFM10]

Ffmpeg, 2010. http://www.ffmpeg.org/.

[Flo10]

Rodrigo L. M. Flores. Boinc + r: Executando rotinas de bioin- form´atica em grades oportunistas. 2010.

[GJG + 05]

Fabrizio Gagliardi, Bob Jones, Fran¸cois Grey, Marc-Elian B´egin, and Matti Heikkurinen. Building an infrastructure for scientific grid computing: status and goals of the egee project. 2005.

[HTHK09] E. Heien, Y. Takata, K. Hagihara, and A. Kornafeld. Pymw - a python module for desktop grid and volunteer computing. 2009.

Jeferson Librelotto Prevedello and Rafael Antonioli. Boinc - um sistema para computa¸c˜ao volunt´aria.

[PyM10] About pymw, 2010. http://pymw.sourceforge.net/?page id=2.

[Pyt10a] General python faq, 2010. http://docs.python.org/faq/general.html.

[PA]

[Pyt10b]

Python

programming

language

official

website,

2010.

http://www.python.org/about/.

 

[TOP]

Architecture share for 11/2010 | top500 supercomputing sites.

http://www.top500.org/stats/list/36/archtype.

27

Parte II - Subjetiva

7 Desafios e frustra¸c˜oes encontradas durante o curso

O curso de bacharelado em ciˆencia da computa¸c˜ao apresenta diversos desafios para o aluno desde o come¸co. O curso foca fortemente na base te´orica, isto ´e algo bom pois prepara o aluno para adquirir conhecimento novo com mais facilidade. Por´em com esse forte enfoque na parte te´orica faz com que a parte t´ecnica deixe muito a desejar. H´a pouqu´ıssimas mat´erias que d˜ao a oportunidade do aluno aprender novas tecnologias e isso ´e uma grande desvantagem quando o aluno parte para o mercado de trabalho. Em algumas mat´erias, como Enge- nharia de Software, requer do professor al´em de experiˆencia acadˆemica, uma boa vivˆencia em desenvolvimento de software, principalmente no mercado de trabalho. O curso exige a dedica¸c˜ao exclusiva do aluno, por´em alguns alunos preci- sam trabalhar desde o come¸co para ajudar na renda familiar. Muitos deles n˜ao conseguem acompanhar o curso, ficam desmotivados e por muitas vezes desistem do curso ou pedem transferˆencia para outro curso. Isso ´e triste, pois muita gente boa deixa de concluir o curso. Um fato a se comentar ´e o baixo ´ındice de alunos se formando em 4 anos. Algumas mat´erias acabam ”segurando” os alunos. No meu ponto de vista, os professores que d˜ao essas mat´erias estudam a tanto tempo o assunto que para eles esses assuntos s˜ao considerados triviais, mas para os alunos n˜ao. Algumas mat´erias que tem um conte´udo bem interessante acabam virando o ”terror” dos alunos. Do meu ponto de vista, essas mat´erias n˜ao deviam ter um n´ıvel de dificuldade t˜ao alto. Deveriam ter um conte´udo mais leve e mais dilu´ıdo, possibilitando que o aluno que tenha interesse no assunto possua condi¸c˜oes de aprofundar no conhecimento por conta pr´opria ou em uma IC ou P´os.

8 Disciplinas relevantes para o trabalho

Muitas disciplinas foram importantes para o desenvolvimento do projeto. Comentarei abaixo as disciplinas que mais contribu´ıram para a conclus˜ao do projeto. Estes anos cursando Bacharelado em Ciˆencia da Computa¸c˜ao proporcio- naram uma grande experiˆencia de desenvolvimento de software em ambiente

28

Linux.

Assim como sua configura¸c˜ao, instala¸c˜ao de servidores, bancos de

dados.

Essa experiˆencia foi de extrema importˆancia para a realiza¸c˜ao do

trabalho.

8.1 MAC0122 - Princ´ıpios de Desenvolvimento de Al- goritmos

Esta ´e a primeira disciplina dedicada ao aprendizado de algoritmos. O apren- dizado de algoritmos eficientes nesta disciplina ofereceram uma vivˆencia na elabora¸c˜ao de c´odigos com solu¸c˜oes elegantes.

8.2 MAC0211 - Laborat´orio de Programa¸c˜ao I

Esta disciplina proporcionou uma boa vivˆencia com diversas ferramentas que s˜ao extremamente uteis´ no dia-a-dia, como subversion e L A T E X. Foi a primeira mat´eria que lidamos com um projeto e a utiliza¸c˜ao de bibliotecas para a constru¸c˜ao de um software.

8.3 MAC0323 - Estruturas de Dados

A disciplina de Estrutura de Dados ´e de extrema importˆancia para a forma- ¸c˜ao, pois nela vocˆe estuda conceitos e algoritmos que s˜ao muito utilizados no desenvolvimento de qualquer software. Assim como em MAC0122, pro- porciona uma boa vivˆencia em desenvolvimento de programas com solu¸c˜oes elegantes e eficientes.

8.4 MAC0417 Vis˜ao e Processamento de Imagens + MAC0338 - An´alise de Algoritmos

Ter uma no¸c˜ao de qu˜ao complexo ´e processar um v´ıdeo ´e importante para esse trabalho.

8.5 MAC0422 - Sistemas Operacionais

Esta disciplina contribuiu com o melhor conhecimento do funcionamento dos sistemas operacionais. Isto foi de grande importˆancia para o Trabalho de Conclus˜ao, pois o trabalho ´e executado em diversos sistemas operacionais e saber como eles s˜ao executados foi necess´ario para o desenvolvimento do projeto. Esta disciplina ofereceu um conhecimento inicial sobre programa¸c˜ao concorrente.

29

8.6 MAC0438 - Programa¸c˜ao Concorrente

Est´a ´e a disciplina que mais se aproxima com o que o trabalho prop˜oe, pois n˜ao fiz o curso de Programa¸c˜ao paralela e distribu´ıda pois esta n˜ao foi ofe- recida este ano. Ensinou conceitos de programa¸c˜ao concorrente, que s˜ao utilizados para o desenvolvimento do projeto.

9 Conceitos Aplicados

Os conceitos aplicados vieram principalmente da mat´eria de Programa¸c˜ao Concorrente como o de problemas trivialmente paraleliz´aveis, processamento distribu´ıdo, grids e overhead. Outras disciplinas como Vis˜ao e Processamento de Imagens deram uma no¸c˜ao de como funciona o processar v´ıdeos e qual sua complexidade.

10 Continua¸c˜ao do trabalho

Trabalhos futuros sobre este tema ser˜ao sempre apreciados e ajudados na medida do poss´ıvel. H´a uma enorme quantidade de trabalhos que podem ser desenvolvidos em cima da plataforma BOINC para determinar sua viabilidade e performance. Listarei a seguir sugest˜oes de trabalhos que poder˜ao ser desenvolvidos que s˜ao pr´oximos aos desenvolvidos por este:

Realizar um ajuste fino no servidor e nos clientes BOINC com o objetivo de obter uma menor espera ao enviar e receber uma tarefa, determi- nando se problemas que eram invi´aveis tornam-se vi´aveis.

Realizar mais estudos de caso em cima do BOINC utilizando-se a lin- guagem Python, com problemas que possuem entradas menores, mas que sua computa¸c˜ao demore um tempo razo´avel.

Comparar a performance de programas feitos para grade BOINC utilizando- se a linguagem C/C++ com programas feitos em linguagens dinˆamicas.

Explorar o uso do BOINC na realiza¸c˜ao de testes automatizados de software e deploy cont´ınuo.

30

11

Agradecimentos

Este trabalho foi conclu´ıdo gra¸ca a` ajuda de diversas pessoas. Gostaria de agradecer a` minha fam´ılia e namorada pelo apoio proporcionado durante o decorrer do trabalho, incentivando em momentos dif´ıceis. Tamb´em gostaria de agradecer outras pessoas que contribu´ıram direta- mente para o trabalho. Primeiramente agrade¸co meu orientador, Roberto Hi- rata Jr., que foi sempre muito presente durante todo o trabalho, contribuindo com problemas te´oricos e processuais. O professor Alfredo Goldman que co- orientou contribuiu para a parte de testes e infraestrutura, prontificando-se a resolver problemas burocr´aticos em rela¸c˜ao ao CEC. Uma ajuda essencial no come¸co do trabalho foi do ex-aluno Rodrigo Flo- res, que contribuiu contando as suas experiˆencias obtidas no seu trabalho de conclus˜ao de curso que possu´ıa um tema relativamente pr´oximo ao desenvol- vido por este trabalho. Agrade¸co tamb´em os administradores do CEC, Jˆanio e Gislaine, por sem- pre prontificarem a resolver problemas t´ecnicos relativos a` infraestrutura do CEC. E ao administrador da rede Vision, Rodrigo Pimentel, por ajudar tam- b´em na infraestrutura da rede Vision.

31