Escolar Documentos
Profissional Documentos
Cultura Documentos
discussions, stats, and author profiles for this publication at: https://www.researchgate.net/publication/303519140
CITATIONS READS
0 67
3 authors, including:
Some of the authors of this publication are also working on these related projects:
All content following this page was uploaded by Luciano Silva on 25 May 2016.
Abstract. The method of planetary transits is one of the most common strategies for detection
and characterization of planets orbiting stars outside Solar System. Despite the exoplanet
detection by Box Least Squares (BLS) algorithm is simple, its performance is impaired when
dealing with large problems. This paper proposes a parallel version of BLS under
multithreading architecture for large volumes of data, implemented in Python and tested with
simulated data and real measures from the Kepler observatory.
Resumo. O método de trânsitos planetários é uma das estratégias mais comuns na detecção e
caracterização de planetas orbitando estrelas fora do Sistema Solar. Apesar do algoritmo de
detecção de exoplanetas por minimização de mínimos quadrados com funções-box (BLS) é
largamente utilizado pela sua simplicidade, seu desempenho é prejudicado em problemas
grandes. Este trabalho propõe uma versão paralela do BLS, sob arquitetura multithreading,
para grandes volumes de dados, implementada na linguagem Python e testada com dados
simulados e reais do observatório Kepler.
1. Introdução
Com o lançamento dos satélites CoRoT e Kepler, o método de trânsitos planetários tornou-se
uma das estratégias mais comuns para detecção e caracterização de exoplanetas, isto é, planetas
que orbitam estrelas fora do Sistema Solar. Neste método, geram-se sequências de dados por
fotometria chamadas curvas de luz e, a partir delas, pode-se obter diversos parâmetros tanto da
estrela quanto do planeta.
Uma das atividades iniciais na pipeline de processamento de uma curva luz é a detecção do
trânsito planetário. Existem três estratégias fundamentais para se realizar esta detecção
(Perryman, 2014): LS (Lomb-Scargle), BLS (Box Least Squares) e Plavchan. Dentre estas
estratégias, o algoritmo BLS é o mais utilizado, principalmente pela sua simplicidade de
implementação. Porém, para grandes curvas de luz, a implementação sequencial deste
algoritmos pode levar a um desempenho extremamente lento.
Assim, dentro deste contexto, este trabalho apresenta uma otimização paralela, via
programação multithreading, para o algoritmo BLS visando ao uso em grandes curvas de luz.
Foi realizada uma implementação com a linguagem Python, utilizando o módulo de threads, e
medidos os desempenhos para uma arquitetura multicore.
1
A Figura 1 ilustra os principais elementos da geometria da curva de luz de uma estrela.
A simples observação visual desta curva de luz não permite a detecção imediata de trânsitos
planetários. Para isto, podem ser necessários vários procedimentos. Um deles é a redução de
ruído através de processos de filtragem. Outro, dependendo do tempo considerado na
observação da estrela, refere-se ao fato de que uma curva de luz pode conter repetições
periódicas do trânsito. Neste caso, a curva precisa ser segmentada em trechos que tenham
probabilidade de conter trânsitos e, a partir da repetição das rotinas de detecção de trânsitos em
cada um destes segmentos, constrói-se uma curva de luz média. Tanto a detecção do trânsito em
si, quanto as rotinas de filtragem e segmentação dos sinais têm custo computacional alto e
podem ter desempenho melhorado com uso de processamento paralelo.
Neste trabalho, será considerada apenas a tarefa de detecção de trânsito em um segmento de
sinal não-filtrado, isto é, com possibilidade de presença de ruído.
2
O algoritmo BLS consiste em encontrar dois índices 𝑖! e 𝑖! no intervalo discreto [1,...,n], com
𝑖! < 𝑖! , chamados, respectivamente, de índices de início e final do trânsito e que minimizem a
expressão quadrática
!
𝑠!
𝐷= 𝑤! 𝑥!! −
𝑟(1 − 𝑟)
!!!
Em notação algorítmica, o BLS sequencial consiste em busca por força bruta por todos os
pares 𝑖! e 𝑖! , com 𝑖! < 𝑖! :
1. c ← !!!! 𝑤! 𝑥!!
2. 𝐷!"# = +∞
3. para 𝑖! de 1 até n-1 faça
4. para 𝑖! de (𝑖! + 1) até n faça
!!
5. 𝑓 ←
!(!!!)
6. se (𝐷!"# > 𝑐 − 𝑓)
7. então 𝐷!"# = 𝑐 − 𝑓
8. (𝑖, 𝑗) = (𝑖! , 𝑖! )
9. retorne (𝑖, 𝑗)
Algoritmo Sequencial. Pseudocódigo da versão sequencial do algoritmo BLS.
O Algoritmo BLS descrito acima é um algoritmo assintoticamente cúbico O(𝑛! ) (dois laços
encadeados com dois laços internos sequenciais para cálculo dos fatores 𝑟 e 𝑠 ). Embora o BLS
sequencial tenha complexidade polinomial, sua aplicação prática não revela a eficiência
esperada para algoritmos polinomiais em função dos tamanhos típicos de curvas de luz e
quantidade de estrelas monitoradas por alguns observatórios. Para o observatório Kepler
(Kepler, 2014), por exemplo, os tamanhos típicos das curvas de luz são de 200.000 pontos/curva
e uma quantidade da ordem 145.000 estrelas monitoradas.
3
um índice muito baixo (laço do passo 4 longo), então ela irá executar um índice muito alto (laço
do passo 4 curto).
As duas estratégias foram implementadas em Python, com a versão paralela utilizando map-
reduce com threads e a estratégia de particionamento acima, sendo testadas com curvas de luz
sintéticas e obtidas do observatório Kepler, utilizando um processador Intel i7 i7-5960X (8
cores, 16 threads). Para cada curva de luz, foram efetuadas 10 execuções, sendo calculadas as
respectivas médias de tempo de execução e desvio-padrão. O gráfico mostrado na Figura 3
compara os resultados obtidos para 2, 4 e 8 threads e com números crescentes de pontos nas
curvas de luz.
Referências