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
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