Pagina 1 van 1
Evenredig verdelen?
Geplaatst: 07 mei 2009, 21:06
door marcelk1607
Stel ik heb een bestand met een bepaalde grootte.
Nu wil ik dit bestand verdelen in x stukken.
Hoe kan ik dat het beste doen? Ik wil een optimale verdeling over x.
MIsschien wel een hele simpele puzzel, maar ik heb al tijden geen wiskunde meer gebruikt.
Iemand tips?
Re: Evenredig verdelen?
Geplaatst: 07 mei 2009, 21:39
door arie
Wat versta je onder een "optimale verdeling"??
Als het gaat om gelijke verdeling is het een kwestie van delen, bijvoorbeeld:
bestand van 6 MB verdelen in 3 gelijke stukken:
elk stuk wordt 6 MB / 3 = 2 MB.
Maar heb je misschien ook nog aanvullende voorwaarden??
Re: Evenredig verdelen?
Geplaatst: 08 mei 2009, 06:35
door marcelk1607
Sorry ik was niet duidelijk.
Bestandgrootte is altijd een natuurlijk getal.
Als de bestandsgrootte 400 kilobytes is, en je hebt 4 cpu's, dan verdeel ik elk deel in 100 kilobyte.
Is de bestandsgrootte 410 kilobytes, met 4 cpu's, dan verdeel ik 100, 100, 100 en 110.
Ik kan natuurlijk x modulus 4 doen en de eventuele rest bij het vierde deel doen.
Re: Evenredig verdelen?
Geplaatst: 08 mei 2009, 09:34
door arie
Als je n cpu's gelijkmatig wilt vullen met veelvouden=blokken van B bytes (bijvoorbeeld B=1024, of in jouw voorbeeld B=100) + een eventuele rest, kan je de grootte G van het bestand delen door B, je krijgt dan iets in de vorm
G = q*B + r
waarbij
r = rest bij deling van G door B (0 <= r < B)
q = aantal complete blokken van B bytes.
Als r=0, dan moet je Q=q blokken wegzetten over de n cpu's,
als r>0, dan moet je Q=q+1 blokken verdelen over de n cpu's.
Als Q een veelvoud is van n, dan heb je Q/n blokken per cpu nodig,
als Q geen veelvoud is van n, dan krijgen een aantal cpu's 1 blok meer.
Bijvoorbeeld:
n=4 cpu's
blokgrootte B=100
Bestand = 1040
G = 10*100 + 40
r=40>0 => 11 blokken weg te zetten
de 4 cpu's krijgen elk in ieder geval 11/4 = 2 blokken (afronden naar beneden),
de overige 11-2*4 = 3 blokken moeten we over 3 van de 4 cpu's verdelen.
Merk op dat deze 3 blokken 2 blokken van 100 en 1 blok van 40 zijn.
Bedoelde je zoiets?
Re: Evenredig verdelen?
Geplaatst: 08 mei 2009, 21:03
door marcelk1607
Zoiets inderdaad maar ik wil de blokgrootte laten berekenen.
Ik wil een bestand in 4 delen splitsen, zo evenredig mogelijk.
Dit om elke cpu-core een gelijke workload te geven.
Re: Evenredig verdelen?
Geplaatst: 18 mei 2009, 13:57
door tsagld
Grootte n, evenredig verdelen in m blokken:
Stel k = n/m
Stel l = n mod m
Er zijn nu m - l blokken die k groot zijn, en l blokken die k+1 groot zijn.
Bijvoorbeeld:
Grootte 1000, verdelen in 7 blokken:
k = 1000 / 7 = 142
l = 1000 mod 7 = 6
Er zijn nu 7 - 6 = 1 blok van 142, en 6 blokken van 143.
That's it.