Escolar Documentos
Profissional Documentos
Cultura Documentos
Aluno: Orientador:
Alexandre Ouno Atoji Roberto Hirata Jr.
4 de fevereiro de 2011
Sumário
1 Introdução 3
2 Bases Tecnológicas 4
2.1 Computação Distribuı́da . . . . . . . . . . . . . . . . . . . . . 4
2.2 Computação Voluntária . . . . . . . . . . . . . . . . . . . . . 4
2.3 Codec . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.4 Speed-up . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.5 Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.5.1 Linguagem Multiplataforma . . . . . . . . . . . . . . . 6
2.6 PyMW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.7 FFmpeg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
3 BOINC 8
3.1 Arquitetura e Funcionamento . . . . . . . . . . . . . . . . . . 8
3.1.1 O servidor . . . . . . . . . . . . . . . . . . . . . . . . . 8
3.1.2 Os voluntários . . . . . . . . . . . . . . . . . . . . . . . 8
3.1.3 Criação e Distribuição de Tarefas . . . . . . . . . . . . 9
3.1.4 Gerenciamento de Tarefas e Limpeza de Disco . . . . . 9
3.1.5 Integração do BOINC com o Python . . . . . . . . . . 10
3.2 Requisitos Mı́nimos . . . . . . . . . . . . . . . . . . . . . . . . 10
4 Atividades realizadas 11
5 Resultados Obtidos 13
5.1 Implementação . . . . . . . . . . . . . . . . . . . . . . . . . . 13
5.1.1 Instalação do PyMW . . . . . . . . . . . . . . . . . . . 13
5.1.2 Criação 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ção . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
5.3 Testes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 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ão de dados recebidos de câmeras . 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ão 26
9 Conceitos Aplicados 30
10 Continuação do trabalho 30
11 Agradecimentos 31
2
Parte I - Objetiva
1 Introdução
O processamento de vı́deo é, mesmo com o aumento do poder computacional
do computador pessoal, uma tarefa muito custosa pois nela é processada um
grande volume de dados. Atualmente os vı́deos possuem maior resolução,
melhor qualidade de áudio.
Ao mesmo tempo que queremos assistir vı́deos em telas com resoluções
maiores, também queremos assisti-los em celulares, aparelhos mp4, iPods,
video-game portátil. Para isso precisamos converter esses vı́deos em vários
formatos. Tarefas simples como conversão de formato ou redimensionamento
de vı́deo costumam demorar um tempo considerável e por muitas vezes é um
fator suficiente para desmotivar a realização da tarefa.
Pode-se pensar em diversos sistemas que recebem grande volumes de vı́-
deos como entrada diariamente e que necessitam de conversão. Um exemplo
é de um sistema de câmeras de vigilância que recebe como entrada vı́deos 24
horas por dia e 7 dias por semana. Guardar esses vı́deos sem nenhum tipo de
compressão gera um grande problema pois necessita de grande quantidade
de espaço para armazenar esses vı́deos.
Uma abordagem recente para mitigar esta tarefa é realizá-la numa GPU
(Graphics Processing Unit). A quantidade de núcleos de uma GPU recente
pode chegar a 512, o que tem motivado muitos desenvolvedores a migrar suas
aplicações para aproveitar esse grande poder de processamento.
Uma outra abordagem é oferecida por empresas de serviços de codificação
de vı́deos por internet. Um exemplo é o da pandastream.com que oferece um
serviço web de conversão de vı́deo que se utiliza de uma grade com máquinas
virtuais da Amazon EC2.
Neste trabalho porém foi realizada uma abordagem diferente: utilizare-
mos uma grade computacional oportunista.
Para construir esta grade oportunista utilizamos o middleware BOINC
que é uma solução de código livre. Construı́mos o programa para ser execu-
tado na grade com a linguagem Python com o módulo PyMW para realizar
a comunicação com o BOINC e o FFMpeg para a conversão do vı́deo. E por
fim, analisamos os resultados obtidos e concluı́mos que a solução é viável.
Além dessas aplicações, existem outras áreas de pesquisa que possuem um
grande volume de dados para serem processados, mas que nem sempre tem
a disposição super computadores para realizar tal processamento. Utilizar
computadores ociosos é uma forma barata de utilizar recursos já existentes
para criar uma grade computacional de processamento.
3
2 Bases Tecnológicas
Neste capı́tulo faremos um levantamento dos conceitos e tecnologias estuda-
das para o desenvolvimento deste trabalho.
4
utilizam todo o poder computacional do computador ou quando o computa-
dor está totalmente ocioso.
Existe um grande número de computadores no mundo e esse número vem
aumentando com o passar do tempo. Boa parte destes recursos não utiliza
todo seu poder na maior parte do tempo.
2.3 Codec
Codec é um software responsável por codificar e decodificar os dados de áudio
e vı́deo [Cod10].
Codecs podem ser separados em duas categorias em relação à qualidade
da compressão:
Sem perdas: São codecs que comprimem os dados, mas em sua decodi-
ficação não há perda de informação. Eles são populares por preservar
a qualidade do vı́deo.
2.4 Speed-up
Em computação paralela, speed-up é uma medida para indicar o quanto um
programa paralelo é mais rápido que o programa sequencial.
Seu cálculo é dado por:
T1
Sp = (1)
Tp
Onde:
5
2.5 Python
A Linguagem Python é uma linguagem dinâmica amplamente utilizada em
vários domı́nios de aplicação.[Pyt10b].
A linguagem é de tipagem dinâmica e forte considerada como de altı́s-
simo nı́vel, pois é multi paradigma, isto é, pode ser programada de forma,
imperativa, orientada a objetos, etc. Prioriza a legibilidade de código sobre
a expressividade. Foi criada por Guido van Rossum em 1991. É conside-
rada uma linguagem bem estável e tem lançamentos de versões principais
em perı́odos de 18 meses em média. Devido suas caracterı́sticas, o Python
é bastante indicado para programadores iniciantes e vem sendo utilizado em
cursos introdutórios de diversas faculdades no mundo [Pyt10a].
O Python é uma linguagem amplamente utilizada em várias aplicações ci-
entı́ficas (mesmo não possuindo uma performance comparável ao C ou C++)
e possui uma grande quantidade de bibliotecas especializadas em diversos
domı́nios como Processamento de Imagens3 , Visão Computacional4 , Álgebra
Linear5 , entre outros. Além de possuir essa grande quantidade de bibliote-
cas nativas, ela é 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 é no desenvol-
vimento web, com frameworks famosos como o Django6 e o Pylons7 .
6
e compilar para diversos sistemas são necessários cross-compilers ou possuir
máquinas com esse sistema operacional.
2.6 PyMW
O PyMW é um módulo Python que possibilita a computação paralela no es-
tilo Mestre-Escravo em diversos ambientes como Condor8 e BOINC [PyM10].
Ele é indicado no site do BOINC como sendo o módulo que deve-se utilizar
ao fazer um programa em Python para o BOINC.
Parte de seu código 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ão muito atenciosos e
sempre respondem as perguntas relacionadas ao projeto muito rapidamente.
Por ser um projeto recente, ainda não 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és
de Monte Carlo [HTHK09].
2.7 FFmpeg
O FFmpeg é um projeto opensource e multiplataforma que produz bibliote-
cas e programas que lidam com vı́deo e áudio. Suas partes mais notáveis são
o libavcodec, libavformat e o programa de linha de comando com o mesmo
nome do projeto [FFM10], sendo este último utilizado no trabalho para re-
alizar operações sobre os vı́deos que são dados como entrada. O Projeto
FFmpeg suporta umas dezenas de codecs e formatos de áudio e vı́deo.
Uma vantagem do FFmpeg é que, assim como o Python, ele é multipla-
taforma, possibilitando a sua execução em diversos sistemas operacionais.
O FFmpeg está sob a licença LGPL ou GPL dependendo da escolha de
configurações.
Suas bibliotecas são utilizadas por diversos softwares que processam vı́-
deos, e em muitos casos é quebrada sua licença. O projeto FFmpeg mantém
uma listagem dos softwares comerciais que quebraram sua licença em uma
página chamada ”Hall of Shame9 ”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) é um
sistema middleware não comercial desenvolvido para computação voluntá-
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ções distribuı́das de diversas áreas
do conhecimento. Uma listagem de projetos ativos utilizando o BOINC pode
ser encontrada em: http://boincstats.com/.
O BOINC é um software livre e está sob a licença LGPL.
3.1.1 O servidor
Está é a máquina responsável por hospedar e distribuir tarefas para os com-
putadores voluntários. O servidor também é responsável por gerenciar as
respostas retornadas pelos voluntários, chegar a coerência da resposta para
produzir o resultado final. Periodicamente o servidor realiza tarefas de ma-
nutenção e limpeza dos dados do projeto.
Todas essas tarefas são feitas através de daemons que ficam sempre em
execução 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ários
Os voluntários são máquinas que se conectam ao projeto hospedado pelo
servidor. Elas podem doar somente o processamento quando estão ociosas
ou podem ser dedicadas.
O computador voluntário pode disponibilizar vários recursos para um
projeto, como por exemplo: CPU, GPU, memória RAM e armazenamento.
A figura 1 também apresenta o funcionamento interno de um cliente e
como se comunica com o servidor.
8
Voluntário Servidor
Processa Tarefa
Resultado Final
9
Após obter um resultado final, são apagados os arquivos que não são mais
necessários.
Cliente BOINC
Servidor BOINC
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ão de
curso. Inicialmente cogitou-se em fazer um software para codificação de vı́deo
utilizando processamento em GPU, mas com o passar da discussão 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ém
disso, um fator que proporcionou a escolha desse tema foi o fato do IME já
ter uma grade BOINC instalada no CEC no qual foi utilizado pelo Rodrigo
Flores no ano anterior em seu trabalho de conclusão de curso, dando em
partes, uma continuação de seu projeto.
Após a escolha do tema começou o trabalho de aprender como era o
funcionamento do BOINC. Primeiramente foi instalado o cliente BOINC em
máquinas locais e virtuais (cada uma não conectada com outra) e instalado
projetos BOINC já existentes. Em seguida foi criada e testada uma rede local
entre esses computadores, e criado um servidor BOINC em uma máquina
virtual.
Com o ambiente já inicialmente preparado e testado, foi iniciado o estudo
das bibliotecas e softwares a serem utilizados. Assim começou o estudo da uti-
lização do PyMW e do FFmpeg. Após um tempo de estudo, foi desenvolvido
uma biblioteca auxiliar que permitia a divisão dos vı́deos em diversas partes
e a união desses vı́deos. Então foi iniciado o desenvolvimento de programas
simples que já utilizavam o PyMW para enviar tarefas ao mesmo computa-
dor de forma concorrente. Depois foi desenvolvido a versão desses programas
que utilizavam a grade BOINC local para a realização 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ós algumas conversas e pesquisas,
foi descoberta uma solução para tal problema.
Já 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áquinas e servidor.
Primeiramente, para configurar o ambiente real foi necessário configurar
o servidor da grade que está localizado na rede Vision. Aparentemente já
estava tudo configurado e funcionando, bastava criar o projeto dentro dele
e fazer a implantação da aplicação. Mas logo ao colocar a aplicação no ar,
notou-se que a versão do servidor (que era do ano passado) não era compatı́vel
com o PyMW sendo necessária a reinstalação e reconfiguração do mesmo.
Após a reinstalação do servidor, surgiu-se outro problema: a versão dos
11
clientes BOINC era incompatı́vel com a versão do servidor. A versão do
cliente é uma versão antiga, presente no Debian Lenny (a versão atualmente
estável), e como era inviável a instalação de uma versão mais atual (por causa
da polı́tica do CEC) precisou-se obter uma outra solução. Para conseguir esta
solução, foram testadas diversas versões de servidor até obter uma que era
compatı́vel com o PyMW e os clientes do CEC ao mesmo tempo.
Com o ambiente real funcionando começou a realização 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ção de
codificação de vı́deo utilizando Python em uma grade BOINC.
5.1 Implementação
Para desenvolver o trabalho foi necessária a utilização do PyMW para li-
dar com a criação e distribuição 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ário, converte o vı́deo para MPEG e redimensiona para
a resolução HVGA. Ao terminar o processamento, o computador voluntário
retorna esse vı́deo processado para o servidor. Quando o servidor recebe todas
as respostas, ele junta esses pedaços em um único vı́deo, que é o resultado
final.
A aplicação, então, é composta somente de um programa para a distri-
buição na grade. Isso ocorreu pelo fato do PyMW + PyBOINC encapsular
o interpretador Python junto com os arquivos que são enviados para os vo-
luntários.
É necessário que a máquina do voluntário possua o FFmpeg instalado,
pois o programa realiza chamadas ao FFmpeg para realizar algumas opera-
ções sobre o vı́deo.
Entrar na pasta
13
5.1.2 Criação de programas
Para a criação de um programa que utilize o PyMW necessita-se que o módulo
pymw esteja importado no programa.
subprocess . call ( [ ' ffmpe g ' , '− i ' , name , '−s ' , ' 480 x320 ' , ' t o s e n d . mpg ' ←-
])
to_send = open ( ' t o s e n d . mpg ' , ' rb ' )
video = to_send . read ( )
to_send . close ( )
r e t u r n video
Submeter tarefas
Para definir qual será o ambiente no qual será enviado o programa, deve-se
criar um objeto interface e é comum criar utilizando-se o método
14
Estas opções são obtidas através 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ção em grade pode-se criar o objeto de interface especı́fico:
15
5.1.3 Enviando o interpretador Python para as workunits
Uma vantagem do PyMW é a possibilidade de enviar o interpretador Python
para as workunits. Com isso torna-se possı́vel para os computadores volun-
tários executar qualquer programa escrito em Python mesmo não possuindo
ele ou o PyMW instalados.
Para isso é necessário baixar os interpretadores do projeto PyBOINC
que estão 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:
-p : A localização do projeto
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 d i n g s ” , ” c o d e c s ” , ) , ) )
( ... )
video = to_send . read ( )
to_send . close ( )
r e t u r n video
16
5.1.6 Processando vı́deos
Para processar vı́deo, uma abordagem é a utilização do FFmpeg através de
chamadas do módulo subprocess do Python. Este módulo permite a cria-
ção de processos e possibilita a manipulação das entradas e saı́das de um
programa através do código. Segue um exemplo de código:
import subprocess
subprocess . call ( [ ' ffmpe g ' , −i
' ' , name , '−s ' , ' 480 x320 ' , ' t o s e n d . mpg ' ] )
5.2 Implantação
Com o final do trabalho obtivemos 1 servidor BOINC atualizado e configu-
rado para a execução e distribuição de programas desenvolvidos em Python,
além de 32 máquinas da rede CEC com o projeto instalado e rodando tarefas
obtidas do servidor BOINC.
Foi necessária a reinstalação do servidor BOINC, pois a versão que estava
instalada era antiga e não conseguia conversar com os clientes e nem tinha
compatibilidade com a versão 0.4 do PyMW. Para reinstalar foi necessário
baixar o código fonte e compilar. Para a configuração do servidor BOINC foi
necessária a instalação do Python2.6 via compilação, pois o Debian Lenny
não suporta tal versão e a instalação 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ção. Para
isso foram executados testes em dois ambientes: uma máquina local e a grade
do CEC.
A máquina local possui um processador Intel(R) Core(TM)2 Duo T6600
@ 2.20GHz com 4Gb de memória RAM. E a grade da rede CEC utilizada
para testes possui 32 computadores Celeron E3300 2.50GHz, metade com
2Gb de memória 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ém de variar o tamanho
dos vı́deos, também variou-se a quantidade de voluntários utilizados para
processar o vı́deo. Foram feitas baterias de testes utilizando-se 1, 2, 4, 8, 16
e 32 voluntários. Isso foi feito para determinar para qual tamanho e quantas
máquinas utilizadas valem a pena utilizar a grade voluntária.
Para determinar o tempo médio de execução para processar cada tarefa
foi feita uma bateria contendo 10 execuções idênticas.
Este teste foi feito para mostrar que utilizar uma grade BOINC para
converter pequenos arquivos de vı́deo não é viável. Isso ocorre porque se gasta
mais tempo em enviar e receber dados do que no tempo de processamento
nas máquinas voluntárias.
18
Figura 3: Gráfico com tempos de execução do teste com vı́deo pequeno
19
Figura 4: Gráfico com tempos de execução do teste com vı́deo de 12 minutos
20
Figura 5: Gráfico com tempos de execução do teste com vı́deo de 50 minutos
adquirido para distribuir partes do vı́deo para todas as máquinas faz com
que o tempo de execução médio seja maior que se utilizando 16 máquinas.
21
Número de Voluntários Tempo Médio de Execução
1 1872.7312s
2 664.7858s
4 497.2947s
8 286.5701s
16 234.1787s
32 225.6725s
22
5.4 Um caso de uso: compressão de dados recebidos
de câmeras
Neste trabalho também foi desenvolvido um software que captura dados de
uma webcam e os armazena em diversos arquivos. Estes arquivos são 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ça patrimonial, pois recebem um grande volume de vı́deos para serem
armazenados.
O programa desenvolvido executa em três threads no servidor. Uma cha-
mada Producer que é responsável para capturar o vı́deo, outra chamada
Submitter que é responsável para enviar para a grade os vı́deos recém cria-
dos e a última chamada Assimilator que recebe os vı́deos já convertidos e os
armazena. Ele funciona no estilo produtor-consumidor clássico.
O vı́deo é capturado de forma semelhante aos testes executados na sub-
seção anterior, utilizando-se do FFmpeg.
subprocess . call ( [ ' ffmpe g ' , '−v f r a m e s ' , ' 100 ' , '−f ' , ' v i d e o 4 l i n u x 2 ' , −s ' , ←-
'
' 640 x480 ' , '− i ' , ' / dev / v i d e o 0 ' , '−f ' , ' mpeg ' , output ] )
23
É possı́vel utilizar Python sem a necessidade do Wrapper:
Com o trabalho foi possı́vel criar programas escritos em código Python
para executar na grade BOINC. Essa solução é boa pois pode-se escre-
ver códigos de maneira simples e utilizar todos os recursos da lingua-
gem, inclusive módulos de terceiros.
5.5.2 Desvantagens
O projeto enfrentou impedimentos por causa da plataforma. Aqui serão
listados e comentados tais desvantagens que notamos na plataforma.
24
notada em execuções de tarefas em grades pequenas (entre 2 e 8 má-
quinas) com máquinas voluntárias antigas. Isso ocorre pois quando há
alguém usando o computador velho, geralmente, consome boa parte dos
recursos, fazendo que não tenha recursos sobrando para disponibilizar
para a grade.
25
6 Conclusão
Com este trabalho concluı́mos que é possı́vel e viável escrever programas em
Python para serem executados em uma grade BOINC e que seu desenvol-
vimento é 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ão
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ários.
Este tipo de abordagem pode ser utilizada para outras aplicações, como
por exemplo, o programa feito neste trabalho para receber vı́deos de webcams
(ou câmeras de segurança) e armazenar tal vı́deo em um formato comprimido
utilizando a grade para fazer a compressão.
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ão
Computacional, Processamento de Imagens e Bioinformática. Este tipo de
plataforma é uma ótima solução para realizar processamento distribuı́do de
horas ou dias com pouco investimento por parte da universidade.
26
Referências
[And] David P. Anderson. Boinc: A system for public-resource compu-
ting and storage.
[GJG+ 05] Fabrizio Gagliardi, Bob Jones, François Grey, Marc-Elian Bégin,
and Matti Heikkurinen. Building an infrastructure for scientific
grid computing: status and goals of the egee project. 2005.
27
Parte II - Subjetiva
7 Desafios e frustrações encontradas durante
o curso
O curso de bacharelado em ciência da computação apresenta diversos desafios
para o aluno desde o começo. O curso foca fortemente na base teórica, isto
é algo bom pois prepara o aluno para adquirir conhecimento novo com mais
facilidade.
Porém com esse forte enfoque na parte teórica faz com que a parte técnica
deixe muito a desejar. Há pouquı́ssimas matérias que dão a oportunidade do
aluno aprender novas tecnologias e isso é uma grande desvantagem quando o
aluno parte para o mercado de trabalho. Em algumas matérias, como Enge-
nharia de Software, requer do professor além de experiência acadêmica, uma
boa vivência em desenvolvimento de software, principalmente no mercado de
trabalho.
O curso exige a dedicação exclusiva do aluno, porém alguns alunos preci-
sam trabalhar desde o começo para ajudar na renda familiar. Muitos deles
não conseguem acompanhar o curso, ficam desmotivados e por muitas vezes
desistem do curso ou pedem transferência para outro curso. Isso é triste, pois
muita gente boa deixa de concluir o curso.
Um fato a se comentar é o baixo ı́ndice de alunos se formando em 4 anos.
Algumas matérias acabam ”segurando” os alunos. No meu ponto de vista,
os professores que dão essas matérias estudam a tanto tempo o assunto que
para eles esses assuntos são considerados triviais, mas para os alunos não.
Algumas matérias que tem um conteúdo bem interessante acabam virando o
”terror” dos alunos. Do meu ponto de vista, essas matérias não deviam ter
um nı́vel de dificuldade tão alto. Deveriam ter um conteúdo mais leve e mais
diluı́do, possibilitando que o aluno que tenha interesse no assunto possua
condições de aprofundar no conhecimento por conta própria ou em uma IC
ou Pós.
28
Linux. Assim como sua configuração, instalação de servidores, bancos de
dados. Essa experiência foi de extrema importância para a realização do
trabalho.
29
8.6 MAC0438 - Programação Concorrente
Está é a disciplina que mais se aproxima com o que o trabalho propõe, pois
não fiz o curso de Programação paralela e distribuı́da pois esta não foi ofe-
recida este ano. Ensinou conceitos de programação concorrente, que são
utilizados para o desenvolvimento do projeto.
9 Conceitos Aplicados
Os conceitos aplicados vieram principalmente da matéria de Programação
Concorrente como o de problemas trivialmente paralelizáveis, processamento
distribuı́do, grids e overhead. Outras disciplinas como Visão e Processamento
de Imagens deram uma noção de como funciona o processar vı́deos e qual
sua complexidade.
10 Continuação do trabalho
Trabalhos futuros sobre este tema serão sempre apreciados e ajudados na
medida do possı́vel.
Há uma enorme quantidade de trabalhos que podem ser desenvolvidos em
cima da plataforma BOINC para determinar sua viabilidade e performance.
Listarei a seguir sugestões de trabalhos que poderão ser desenvolvidos que
são próximos aos desenvolvidos por este:
30
11 Agradecimentos
Este trabalho foi concluı́do graça à ajuda de diversas pessoas. Gostaria de
agradecer à minha famı́lia e namorada pelo apoio proporcionado durante o
decorrer do trabalho, incentivando em momentos difı́ceis.
Também gostaria de agradecer outras pessoas que contribuı́ram direta-
mente para o trabalho. Primeiramente agradeço meu orientador, Roberto Hi-
rata Jr., que foi sempre muito presente durante todo o trabalho, contribuindo
com problemas teóricos e processuais. O professor Alfredo Goldman que co-
orientou contribuiu para a parte de testes e infraestrutura, prontificando-se
a resolver problemas burocráticos em relação ao CEC.
Uma ajuda essencial no começo do trabalho foi do ex-aluno Rodrigo Flo-
res, que contribuiu contando as suas experiências obtidas no seu trabalho de
conclusão de curso que possuı́a um tema relativamente próximo ao desenvol-
vido por este trabalho.
Agradeço também os administradores do CEC, Jânio e Gislaine, por sem-
pre prontificarem a resolver problemas técnicos relativos à infraestrutura do
CEC. E ao administrador da rede Vision, Rodrigo Pimentel, por ajudar tam-
bém na infraestrutura da rede Vision.
31