15.07.2013 Views

ISCTE – ESCOLA DE GESTÃO - Universidade Técnica de Lisboa

ISCTE – ESCOLA DE GESTÃO - Universidade Técnica de Lisboa

ISCTE – ESCOLA DE GESTÃO - Universidade Técnica de Lisboa

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

como mostra a figura 9. Assume-se que a cardinalida<strong>de</strong> <strong>de</strong> cada uma das dimensões A, B e C é,<br />

respectivamente, 40, 400 e 4000.<br />

Figura 14 - Array 3D para as dimensões A, B e C, dividido em 64 chunks<br />

Os chunks são lidos segundo a or<strong>de</strong>m ABC, do chunk 1 para o chunk 64. Assumindo que o chunk 1 já<br />

está carregado em memória, este é agregado segundo a dimensão C para obter um chunk <strong>de</strong> AB,<br />

segundo a dimensão i para obter um chunk <strong>de</strong> AC e segundo a dimensão A para obter um chunk <strong>de</strong> BC.<br />

Assim, o primeiro chunk <strong>de</strong> AB é agregado para o chunk a0b0 <strong>de</strong> AB, o primeiro chunk <strong>de</strong> AC é agregado<br />

para o chunk a0c0 <strong>de</strong> AC e o primeiro chunk <strong>de</strong> BC é agregado para o chunk b0c0 <strong>de</strong> BC. À medida que<br />

novos chunks são lidos, os chunks obtidos vão sendo agrupados aos chunks dos agregados<br />

correspon<strong>de</strong>ntes. Note-se que os chunks foram lidos segundo a or<strong>de</strong>m (A, B, C), que correspon<strong>de</strong> a uma<br />

or<strong>de</strong>m linear <strong>de</strong>s<strong>de</strong> o chunk 1 ao chunk 64. Isso significa que b0c0 está completamente agregado <strong>de</strong>pois<br />

<strong>de</strong> terem sido lidos os chunks 1 a 4, após o que é guardado em disco e a sua memória é atribuida ao<br />

chunk b1c0. Este, por sua vez, está completamente agregado <strong>de</strong>pois <strong>de</strong> terem sido lidos os chunks 5 a 8,<br />

e assim sucessivamente. Isto significa que apenas um chunk <strong>de</strong> BC se encontra em memória durante o<br />

cálculo do agregado BC. Da mesma forma, é reservada memória para os chunks a0c0, a1c0, a2c0 e a3c0<br />

enquanto são percorridos os primeiros 16 chunks <strong>de</strong> ABC. Para terminar a agregação para o chunk a0c0,<br />

o resultado da agregação dos chunks 1, 5, 9 e 13 são acumulados no chunk a0c0, esses chunks <strong>de</strong> AC<br />

são escritos para disco e a sua memória atribuída a a0c1, a1c1, a2c1 e a3c1 do agregado AC. Por fim, para<br />

calcular o agregado AB é necessário alocar memória para um total <strong>de</strong> 64 chunks. Neste exemplo, para<br />

calcular BC é necessário memória para 1 chunk <strong>de</strong> BC, para calcular AC é necessária memória para 4<br />

chunks <strong>de</strong> AC e para calcular BC é necessário memória para 4 x 4 = 16 chunks <strong>de</strong> AB [Zhao1997].<br />

Genericamente, é necessário alocar |Bc||Cc|u memória para calcular um agregado BC, |Ad||Cc|u para<br />

calcular um agregado AC e |Ad||Bd|u para calcular um agregado AB, em que |Xd| representa o tamanho<br />

<strong>de</strong> uma dimensão X, |Xc| o tamanho do chunk <strong>de</strong> uma dimensão X e u o tamanho <strong>de</strong> cada elemento do<br />

chunk [Zhao1997]. Como o tamanho <strong>de</strong> um chunk <strong>de</strong> uma dimensão é menor que o tamanho <strong>de</strong>ssa<br />

dimensão na maioria dos casos, conclui-se que é possível calcular o cubo alocando uma quantida<strong>de</strong> <strong>de</strong><br />

32

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!