El paralelismo en Julia se hace por CPU, no GPU, y se basa en el paso de mensajes entre programas corriendo en varios procesadores con memoria compartida. Al principio hay que específicar cuantos workers se van a usar para esto
julia -p 2
Esto corre 2 workers desde linea de comandos. Cuando se corre desde Jupyter o cuando ya está dentro del prompt de Julia se agregan workers de esta manera (se recomienda que sea el mismo número de cores del procesador):
# revisamos el número actual de workers
println(nprocs())
addprocs(1)
# revisamos el número workers después
println(nprocs())
1 2
Cada trabajador tiene un id, que resulta importante para la asignación de tareas manualmente como se mostrará más adelante
@everywhere println(myid())
1 From worker 2: 2
La programación paralela en Julia está construida sobre dos primitivas:
Una remote call devuelve una remote reference, de manera que el programa puede seguir su funcionamiento mientras esta tarea se ejecuta en otra parte. Cuando es necesario tener el valor de un remote reference se usa la función fetch()
.
Para realizar el llamado de un remote call sobre un worker específico se puede hacer de dos formas:
# el primer parámetro es el id del worker, luego la función y después los parámetros de la función
r = remotecall(2, rand, 2, 2)
# el primer parámetro es el id del worker, luego la función con sus parámetros
s = @spawnat 2 rand(2, 2)
# fetch evalúa los valores del remote reference
println(fetch(r))
println(fetch(s))
[0.2628392974833349 0.6763392065375571 0.5590070164639327 0.11981752344831476] [0.1113960568297554 0.9256475723916022 0.7547629762940384 0.6221259684508706]
Una simplificación del fetch(remotecall(...))
es la función remotecall_fetch(...)
.
La sintáxis de la función remotecall()
no resulta muy ventajosa, por lo que se usa la macro @spawn
, la cual evalúa una expresión en vez de una función y elige automáticamente el worker.
r = @spawn rand(2, 2)
s = @spawn 1 .+ fetch(r)
println(fetch(s))
[1.1861445980897083 1.9734900290726816 1.1496917709575176 1.8356032502787187]
Como se va a estar trabajando en diferentes workers, es posible que al declararse una función o al cargarse una librería, esta no sea reconocida por todos los workers. Para evitar este tipo de problemas se puede usar la macro @everywere
, la cual obliga a un comando a ejecutarse en todos los workers.
@everywhere function rand2(dims...)
return 2*rand(dims...)
end
@spawnat 1 rand2(2,2)
@spawnat 2 rand2(2,2)
RemoteRef{Channel{Any}}(2,1,12)
El envío de mensajes y el flujo de datos consisten en los problemas más usuales para la computación paralela, no solo en terminos de dificultad si no además de escalabilidad y rendimiento.
Estas operaciones usualmente se realizan con fetch()
y @spawn
, ya que con la primera se solicita que esos datos se traigan al procedimiento actual y con la segunda se envían datos a otro worker.
Es necesario tener en consideración la necesidad y practicidad de cada evento, ya que por ejemplo el cuadrado de una matrix de $1000 \times 1000$ puede realizarse por los siguientes métodos:
# método 1
A = rand(1000,1000)
Bref = @spawn A^2
fetch(Bref)
# método 2
Bref = @spawn rand(1000,1000)^2
fetch(Bref)
1000x1000 Array{Float64,2}: 258.868 258.271 256.779 257.312 … 257.695 240.166 245.439 251.106 259.845 251.679 259.477 253.688 260.96 240.673 248.111 244.996 256.409 243.846 252.933 244.023 248.149 231.805 237.562 239.073 258.268 243.266 253.209 253.813 256.462 236.576 246.222 240.14 260.717 248.235 257.361 254.639 258.458 238.572 248.888 248.854 256.337 252.397 256.399 253.071 … 254.811 241.595 243.108 245.644 249.313 244.945 251.67 251.498 252.791 238.949 245.325 238.127 257.267 254.378 255.947 253.28 255.813 242.881 245.028 244.87 264.441 258.821 258.553 256.847 262.939 244.619 251.19 250.175 257.502 249.004 254.683 259.16 259.526 241.488 243.576 244.864 259.418 253.357 258.61 258.221 … 259.496 244.603 248.219 251.456 270.496 261.178 268.336 264.702 264.043 245.077 256.042 256.902 255.541 242.653 251.646 245.391 247.668 233.28 238.78 242.689 ⋮ ⋱ 257.195 253.354 259.576 256.661 254.752 239.603 249.933 249.248 256.544 248.709 254.15 253.905 254.473 240.175 245.686 248.592 259.962 247.164 256.951 253.982 … 255.406 236.614 247.962 241.028 246.238 244.179 245.818 247.548 248.389 233.85 235.538 240.74 261.431 251.15 258.594 252.551 250.9 234.948 243.711 242.639 259.635 252.608 253.671 258.253 257.335 242.895 249.587 248.846 256.771 253.424 259.173 250.903 259.061 237.758 241.136 239.59 254.849 245.651 251.88 257.09 … 249.014 232.787 238.77 237.095 261.369 255.173 259.859 257.024 261.257 241.422 249.375 248.306 255.972 256.776 259.122 254.788 258.974 243.5 249.915 250.794 263.51 253.082 258.156 250.782 259.435 243.094 245.528 252.353 259.755 250.805 254.995 251.874 260.1 241.65 242.353 245.332
La diferencia entre estos dos es clara en este caso, y es que la matriz A
es enviada a otro worker en el método 1, lo cual significa que tiene un mayor envío de datos, lo cual implica una baja en el rendimiento, pero puede permitir en otros casos usar esa información para otras tareas.
Existen varias operaciones que pueden trabajar completamente de manera paralela (sin flujos de datos entre ellas), como por ejemplo una simulación de Monte Carlo, como se muestra a continuación:
# Cuenta caras en n lanzamientos aleatorios
@everywhere function count_heads(n)
c::Int = 0
for i=1:n
c += rand(Bool)
end
c
end
a = @spawn count_heads(100000000)
b = @spawn count_heads(100000000)
println(fetch(a)+fetch(b))
100007704
La última operación suele ser conocida como reducción (reduction), la cual hace parte de un patrón de computación paralela o distribuida bastante usual (map-reduce). Esta operación suele ser de la forma $x = f(x,v[i])$, donde $x$ es el acumulador, $f()$ la función de reducción (función asociativa) y $v[]$ la lista de elementos a reducir.
Cabe notar que el código de arriba puede ser generalizado, e incluso no restringirlo a que sean solo 2 workers los que realicen estas tareas, esto se puede hacer de la siguiente manera:
nheads = @parallel (+) for i=1:200000000
Int(rand(Bool))
end
100004937
En esta operación se ejecuta el ciclo for de manera paralela entre los workers disponibles y al terminar se ejecuta la función de reducción, la cual en este caso es (+).
Aunque la notación del for paralelo es similar al normal su uso es completamente diferente, ya que no ejecuta las instrucciones en un órden específico y la escritura en arreglos y matrices resulta complejo, ya que no se está manejando el mismo worker. Por ejemplo el siguiente código no hará lo esperado:
a = zeros(100000)
@parallel for i=1:100000
a[i] = i
end
a
100000-element Array{Float64,1}: 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ⋮ 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
El operador de reducción puede omitirse en caso de no necesitarse, por lo que retornará un arreglo de remote references. Preferiblemente cuando se desea aplicar una función sobre todos los elementos de un arreglo o matriz se recomienda el uso de pmap()
:
M = Matrix{Float64}[rand(10,10) for i=1:10]
pmap(svd, M)
10-element Array{Any,1}: ( 10x10 Array{Float64,2}: -0.245542 -0.361681 0.132146 … -0.0771622 0.639107 0.0590786 -0.285159 -0.0630745 -0.336472 0.040401 0.156018 -0.234977 -0.326592 0.163739 0.429688 0.0324591 -0.41473 -0.244779 -0.306996 -0.328721 -0.0173562 -0.245929 -0.0113104 0.496277 -0.409207 0.400704 -0.246665 -0.53768 -0.218209 0.297007 -0.326613 -0.185657 0.464774 … 0.427765 -0.21823 0.279808 -0.285028 0.606614 0.0519806 0.37485 0.465113 0.208987 -0.342775 -0.0940527 0.300458 -0.384008 0.159364 -0.548494 -0.329604 -0.377654 -0.4583 0.305187 -0.237897 -0.0227785 -0.275652 0.125936 -0.32329 0.278715 -0.0388625 -0.351486 , [4.8790806501452915,1.6899872210780877,1.3160539526274126,1.0071916251474002,0.8019319849929022,0.6030619505962146,0.529824457084005,0.36667642174819076,0.22414829962137345,0.056747154527782985], 10x10 Array{Float64,2}: -0.295765 0.0315489 0.193906 … -0.53042 -0.468487 -0.00519565 -0.378776 -0.23503 -0.423938 -0.450903 0.151691 0.149639 -0.289173 0.492656 0.0237461 0.0971327 0.488062 -0.221973 -0.315703 -0.375964 0.732722 0.0807 -0.0086695 -0.242305 -0.31384 0.169838 -0.276703 0.461712 -0.647481 -0.21867 -0.356982 0.293775 -0.143224 … -0.183651 0.0139918 -0.276845 -0.311056 -0.498648 -0.234896 0.0473 0.145541 0.00617982 -0.220411 0.054827 0.0685536 0.254721 -0.0967882 0.803504 -0.296215 -0.27447 -0.120575 0.430425 0.218313 -0.106911 -0.356021 0.342882 0.271552 -0.0100893 0.14694 0.296733 ) ( 10x10 Array{Float64,2}: -0.295792 -0.202244 0.705697 0.235779 … -0.0897385 0.554181 -0.30066 0.169239 -0.29467 0.301146 -0.770205 0.00635799 -0.270623 0.312638 -0.313573 -0.0390469 0.0352597 0.383812 -0.280067 -0.138961 -0.230534 -0.562719 -0.00475362 0.371037 -0.344339 0.0230076 0.105532 -0.558729 -0.0422051 -0.115247 -0.41092 -0.30371 -0.060053 0.203105 … -0.0528697 -0.289779 -0.37773 0.287893 0.379476 -0.110282 -0.00655199 -0.527444 -0.323495 -0.602131 -0.30488 0.225794 0.318583 -0.0871718 -0.29145 0.520664 -0.107805 0.339625 0.517099 0.121046 -0.225256 0.0640208 0.0192091 -0.0601822 0.154788 -0.100798 , [4.891425519697108,1.570515388476715,1.2258712701492278,1.0342123069851368,0.7390636564846099,0.6636412010545596,0.4180384746910782,0.3554712737146189,0.19898173105066097,0.04538994447330387], 10x10 Array{Float64,2}: -0.337188 0.286039 0.108512 … -0.0175749 0.0406848 -0.202155 -0.287246 -0.310114 0.310864 -0.0605828 -0.36354 -0.423873 -0.284809 -0.307675 -0.485246 -0.682414 -0.173729 0.0812155 -0.299626 0.340023 -0.289876 -0.148595 0.481871 -0.264352 -0.296196 -0.0472996 0.4989 -0.00904559 -0.103784 0.151922 -0.316481 -0.333815 0.361109 … -0.175134 0.521082 0.412756 -0.324347 -0.196774 -0.368252 0.455463 -0.341905 0.38645 -0.303698 -0.334128 -0.119997 0.355117 0.166117 -0.541662 -0.34596 0.554856 0.138543 -0.165681 -0.389541 0.0557025 -0.357614 0.199585 -0.153599 0.341311 0.158958 0.252379 ) ( 10x10 Array{Float64,2}: -0.29549 0.349747 -0.384126 … 0.0185733 -0.0883353 0.00210524 -0.308528 0.0182376 0.29446 -0.644306 -0.413118 -0.152432 -0.198708 0.143608 -0.137312 0.114216 -0.604389 0.0554018 -0.365698 -0.623462 0.134233 0.0884542 -0.23866 0.220759 -0.231312 -0.0537616 -0.26067 -0.0530963 0.258188 -0.249321 -0.321857 0.589654 0.375374 … -0.130642 0.261781 0.34929 -0.280654 -0.282239 0.360427 -0.103086 0.447087 -0.122927 -0.453092 -0.0149078 -0.397922 -0.070702 0.174446 -0.443521 -0.267264 0.154851 0.411691 0.704045 -0.129937 -0.355222 -0.362892 -0.116508 -0.249547 0.180176 0.129978 0.634655 , [5.035534227375371,1.3061652392354048,1.160563128195872,0.8048498603569709,0.6382145799978491,0.5455407833126111,0.4096680054107262,0.30107165179638024,0.2562628461659007,0.14214666835360165], 10x10 Array{Float64,2}: -0.225959 0.392823 0.14541 … -0.0474806 -0.0123194 -0.0803452 -0.278766 -0.109391 -0.561812 0.609095 -0.024715 0.151157 -0.373312 -0.415586 0.0729979 -0.208268 -0.307961 0.139053 -0.356458 -0.210921 -0.259166 -0.224716 0.392032 -0.280733 -0.282589 0.556297 0.244165 0.402145 -0.148138 0.111972 -0.332869 -0.225504 0.185287 … 0.246222 0.478978 0.318034 -0.380696 -0.115081 -0.0516225 0.0213076 -0.607119 -0.394825 -0.192192 0.118056 0.158636 0.105244 0.352355 -0.69142 -0.354785 -0.1143 0.53106 -0.151563 0.0128836 0.241558 -0.326207 0.464716 -0.432347 -0.525383 0.0801898 0.258007 ) ( 10x10 Array{Float64,2}: -0.320495 0.205675 -0.309502 … 0.0222948 0.326277 -0.552276 -0.283076 0.282488 -0.023184 -0.393983 -0.344213 -0.162678 -0.297225 0.205584 -0.498144 0.590031 0.0865811 0.323122 -0.313885 -0.781449 -0.271083 -0.170789 0.124044 -0.224252 -0.324827 0.13543 0.551347 0.0671493 0.62491 0.0696101 -0.356076 0.222445 -0.19987 … -0.60077 0.047758 0.46236 -0.276601 0.0870189 0.167847 0.252676 -0.542615 -0.204884 -0.380744 -0.36395 0.186445 0.157414 -0.202817 0.441575 -0.293863 0.128066 -0.0392819 0.102398 -0.118867 -0.16136 -0.300255 -0.0267563 0.416688 0.0493243 -0.0984335 -0.179458 , [4.5945412522687095,1.503104943960826,1.0978057570890272,0.9746933700295229,0.7718029866536353,0.6515202231721869,0.5739939906270847,0.27918119414106213,0.12828497213704526,0.0397749883912343], 10x10 Array{Float64,2}: -0.328285 0.260309 0.0473151 … -0.278863 0.238732 0.252133 -0.253009 -0.339734 0.0393517 -0.26417 0.182906 -0.228422 -0.240576 -0.415123 0.0973756 0.426097 0.68475 0.0378859 -0.301271 -0.298496 -0.360332 0.531582 -0.435912 -0.033435 -0.445608 0.363049 0.345069 0.197109 -0.137391 0.327666 -0.378782 -0.362277 -0.0223494 … -0.530757 -0.0790239 0.142031 -0.21501 -0.0915288 -0.529242 -0.150915 -0.170808 0.334221 -0.354549 0.48013 -0.444911 -0.00969817 0.231271 -0.585345 -0.332741 -0.100807 0.503032 -0.0141367 -0.374276 -0.466641 -0.234266 0.208037 0.078963 0.211396 0.0527815 0.286487 ) ( 10x10 Array{Float64,2}: -0.297713 0.350543 0.179513 … 0.0553055 -0.0218595 0.375646 -0.30247 -0.243967 0.125896 -0.618278 -0.54593 -0.268507 -0.347204 0.11576 -0.17035 0.0684008 -0.291957 0.530556 -0.221827 0.432153 0.205356 0.19569 -0.0348595 -0.078956 -0.327858 -0.379869 0.465584 -0.23586 0.603002 0.269835 -0.320843 -0.35756 -0.416465 … 0.41967 0.171242 -0.252088 -0.286485 0.167423 0.450079 0.263083 0.0189964 -0.558297 -0.395366 -0.384774 -0.0289365 0.330948 -0.292855 0.109884 -0.351083 0.234871 -0.52481 -0.393782 0.367155 -0.160929 -0.279361 0.33771 -0.108121 -0.0783797 0.0341383 -0.114205, [5.161051215676179,1.4660971275588295,1.2232000628566388,1.0468559504451207,0.9810539825205704,0.795946028719872,0.5541990530639808,0.3088927408780201,0.26372411769265564,0.20168608239185096], 10x10 Array{Float64,2}: -0.307617 0.0722651 -0.316949 … 0.646367 -0.168958 -0.277782 -0.205695 0.541014 0.339346 0.157851 -0.178826 -0.190827 -0.310451 0.0955263 -0.434867 -0.0951934 0.367589 -0.307508 -0.358192 -0.256547 -0.0100712 0.0715247 0.393445 0.0876229 -0.319262 0.105704 -0.0303328 -0.295634 0.085338 0.546321 -0.283882 -0.399314 -0.147586 … -0.377813 -0.0529944 -0.371234 -0.282702 -0.108942 0.741149 -0.0270077 0.263009 -0.311523 -0.373222 -0.191551 0.0329133 -0.216065 -0.752498 0.0053475 -0.409728 -0.130222 0.0732196 0.377304 0.0340203 0.50082 -0.262242 0.625297 -0.129338 -0.351 0.0536375 0.00237606) ( 10x10 Array{Float64,2}: -0.352226 -0.317869 0.142014 … 0.182339 -0.311498 -0.0981516 -0.325223 0.109159 -0.471927 0.292016 0.344599 0.272606 -0.369959 -0.524634 -0.0628484 -0.0244032 -0.309 -0.0490426 -0.348792 0.598692 -0.0159286 -0.264177 -0.0969148 -0.57978 -0.2661 0.182586 -0.0894986 -0.431701 0.012658 0.439579 -0.338429 0.141457 -0.294078 … -0.104876 -0.426839 0.302385 -0.216493 -0.25781 -0.137992 -0.142024 0.131661 -0.471361 -0.330418 -0.248244 0.0685395 -0.220615 0.687693 -0.0188683 -0.335318 0.146346 0.796474 0.0567332 0.0424123 0.242174 -0.240446 0.224755 -0.0176204 0.735981 0.0702926 -0.107934 , [4.889937355607362,1.4721642829562716,1.3312152633579353,1.237965430876595,0.8594623977165069,0.7758549961016136,0.5751723257247633,0.47549449086786133,0.15706407334223535,0.11949053302361026], 10x10 Array{Float64,2}: -0.334612 0.0125706 0.176184 … -0.369292 0.203481 -0.509983 -0.363213 0.327874 0.144562 -0.0412464 0.430976 -0.222424 -0.292363 -0.302814 -0.0553061 -0.142358 -0.0211782 0.524078 -0.321558 -0.291775 0.248214 -0.00556395 -0.208211 -0.173248 -0.314542 0.342036 0.29051 -0.305875 -0.666893 0.162248 -0.245162 0.246168 -0.425996 … -0.267306 0.337657 0.302205 -0.252746 0.251925 -0.503715 -0.0546311 -0.16452 0.05409 -0.358581 0.312844 0.137893 0.79626 0.0109509 0.0994242 -0.409468 -0.527087 -0.423412 0.195548 -0.15309 -0.276552 -0.219247 -0.314271 0.40682 -0.0368643 0.345938 0.422881 ) ( 10x10 Array{Float64,2}: -0.265189 0.327377 0.353922 … 0.10488 -0.306558 -0.552784 -0.356376 0.261419 -0.546839 -0.437154 0.0719936 -0.3631 -0.242974 0.239029 0.216982 -0.10526 0.401545 0.493851 -0.288934 0.0737345 -0.15378 0.268388 0.462842 -0.0920627 -0.38787 -0.135917 0.502138 0.113736 0.103923 -0.205071 -0.238799 -0.643124 0.116533 … -0.5643 -0.19263 0.0216963 -0.290943 0.0295403 -0.322664 -0.0310555 -0.038093 0.137744 -0.278771 0.231044 0.292606 -0.335549 0.125334 0.230746 -0.411145 -0.482267 -0.194856 0.473126 0.09732 -0.0034353 -0.348255 0.207354 -0.107495 0.214498 -0.671447 0.44212 , [5.251481296432321,1.3927022023777447,1.2157585499724854,0.9822332381634684,0.8850142087355188,0.7616186894817928,0.4989213431348996,0.437151260142915,0.23487936687544222,0.035442511082134705], 10x10 Array{Float64,2}: -0.365651 0.636721 0.0703037 … -0.479142 -0.328157 0.100091 -0.353133 0.157861 -0.507323 0.599594 -0.358503 0.155192 -0.332273 -0.318666 -0.0129104 -0.125237 -0.436266 -0.262001 -0.284943 -0.517644 -0.035929 -0.212463 -0.0346693 0.203296 -0.275113 -0.147071 -0.0499727 -0.329775 0.179626 0.602222 -0.365434 -0.137775 0.637621 … 0.161002 -0.142038 -0.322046 -0.330963 -0.202017 -0.262237 -0.00931985 0.380936 -0.128128 -0.249016 -0.051068 0.129897 0.313668 0.127669 0.164923 -0.291118 0.296211 0.352614 0.277174 0.44137 0.183657 -0.290644 0.168499 -0.342327 -0.200278 0.404475 -0.558742) ( 10x10 Array{Float64,2}: -0.434319 0.0413225 -0.343433 … 0.250507 0.130813 0.669549 -0.324475 0.0538615 0.543643 -0.0547678 0.303204 0.259759 -0.376622 -0.292618 0.165567 -0.315692 -0.0819101 -0.209821 -0.236427 -0.632842 -0.174547 -0.486464 0.0544583 0.0798224 -0.242329 0.0717368 0.416451 0.103888 -0.445271 0.0028778 -0.227779 0.497309 0.192281 … -0.317424 0.463556 -0.153926 -0.354591 0.0322267 -0.359409 0.292844 0.258105 -0.266999 -0.320793 0.221106 -0.00897332 -0.0212915 -0.601218 0.142486 -0.232776 -0.358585 0.249222 0.615039 0.104417 -0.348783 -0.338979 0.279829 -0.35617 -0.147998 -0.170721 -0.443724 , [5.073232938048025,1.387168998900094,1.1859951066181633,1.141152044601678,0.9938344818457115,0.9031510932442938,0.7044042830350015,0.4064586066937375,0.3173277753531043,0.09382911666291062], 10x10 Array{Float64,2}: -0.27633 -0.356751 0.429072 … -0.466299 -0.063589 0.182996 -0.314724 -0.129609 -0.600879 -0.394195 0.123974 -0.0821897 -0.334753 -0.53253 -0.119403 0.317277 -0.0328187 -0.0269344 -0.324008 0.0383999 -0.381978 0.331491 -0.406192 0.492409 -0.308867 -0.310015 0.302373 0.362655 0.0716875 -0.226148 -0.335409 0.162179 -0.0143136 … 0.169903 0.793315 -0.0286013 -0.357241 0.616511 0.149806 0.226142 -0.152452 -0.109574 -0.276992 0.173836 0.293545 -0.23128 0.0990791 0.616494 -0.276456 0.0459521 0.254355 -0.0476965 -0.366546 -0.390579 -0.344785 0.189843 -0.172444 -0.386437 -0.112317 -0.346382 ) ( 10x10 Array{Float64,2}: -0.278713 0.145086 -0.771678 … -0.345886 0.213329 0.131867 -0.395188 0.097471 0.170011 0.0735047 0.271362 -0.354957 -0.207736 -0.158579 0.424513 -0.184304 0.530007 0.198674 -0.336784 -0.407727 0.0355538 -0.123467 -0.368798 0.636684 -0.346965 0.324849 0.189493 0.0712076 -0.227376 -0.108518 -0.363799 -0.463804 -0.233169 … 0.534286 -0.217464 -0.323893 -0.31638 -0.0255899 -0.00961264 0.364243 0.478057 0.26699 -0.307122 0.355736 -0.144998 -0.0749891 -0.0373933 -0.108211 -0.308658 0.449795 0.247438 -0.00264699 -0.354663 0.194991 -0.259119 -0.357632 0.146683 -0.63001 -0.096024 -0.41723 , [4.856795739395655,1.5981740283260322,1.1516780424975424,1.038233947154881,0.8844624892801032,0.7401235129211347,0.5542787131167165,0.38017530235571856,0.061711647585169914,0.0016718963775986418], 10x10 Array{Float64,2}: -0.255242 0.299011 -0.374491 … -0.378115 -0.286795 0.449705 -0.361798 0.355239 0.549355 0.17948 0.223478 0.334786 -0.221865 -0.259873 0.195662 -0.177638 0.620997 -0.166917 -0.311413 0.227343 -0.0186994 0.164504 -0.204138 -0.673538 -0.313706 0.317278 0.117578 0.429508 -0.205897 0.0331298 -0.418066 0.123207 -0.146202 … -0.498148 0.0149735 -0.317555 -0.270749 -0.300166 -0.500522 0.525891 0.0687012 -0.0106284 -0.333647 -0.313421 0.228774 -0.23049 -0.210909 -0.0190921 -0.343355 -0.596127 0.161612 0.0449316 -0.327585 0.235456 -0.28643 0.0750564 -0.393896 0.0431794 0.491288 0.215205 ) ( 10x10 Array{Float64,2}: -0.358557 0.160546 -0.341352 … 0.784521 0.0115484 0.0726006 -0.327843 0.367501 -0.366946 -0.490722 0.0436669 0.167387 -0.447359 0.22094 0.405817 -0.0734658 0.227548 -0.603391 -0.304736 0.0565362 -0.278942 -0.178565 0.408507 0.247198 -0.219788 0.228372 0.466791 0.154622 -0.307552 0.12616 -0.221318 -0.258853 0.381944 … -0.0975957 0.362837 0.247591 -0.335396 0.300182 0.0453462 -0.0742951 -0.418456 0.138472 -0.30351 -0.448325 -0.278706 0.0535349 0.0994246 -0.456329 -0.306706 -0.488968 -0.108937 -0.225284 -0.593312 -0.0318754 -0.273853 -0.371219 0.225739 0.117752 0.126709 0.485674 , [5.380046173710594,1.441943880827425,1.2965628587607503,1.0239636509684722,0.881885568234138,0.7588309228755522,0.47956183654726187,0.3542285215795459,0.08950084632527382,0.023939930104115104], 10x10 Array{Float64,2}: -0.257702 0.173694 0.476948 … 0.281535 0.243216 -0.244336 -0.300547 -0.23184 -0.627787 0.169888 0.38179 -0.0634201 -0.460525 -0.144279 -0.141573 -0.687919 -0.266615 -0.155851 -0.267603 0.51102 -0.295944 0.337445 -0.0779961 -0.0100643 -0.275309 0.550926 0.0965748 -0.296413 0.0250948 0.548013 -0.280788 -0.476669 0.0486754 … 0.356156 -0.297058 0.639365 -0.25016 -0.14425 0.453727 0.0191086 0.0907997 0.0377142 -0.348728 0.0212454 -0.0174284 -0.00569647 0.524938 0.0674146 -0.289242 -0.263544 0.229772 -0.0850561 0.159999 -0.228027 -0.37024 0.112585 -0.0107474 0.287113 -0.565365 -0.380549 )
# Se genera la lista de tasks
t = @task Any[ for x in [1,2,4] println(x) end ]
# No hay tasks?
println(istaskdone(t))
# Cual es la siguiente task?
println(current_task())
# Ejecutar task
println(consume(t))
false Task (runnable) @0x00000001081a0160 1 2 4 Any[nothing]
En un shared array se puede compartir un arreglo entre los diferentes workers. A continuación se muestra un ejemplo:
S = SharedArray(Int, (3,4), init = S -> S[Base.localindexes(S)] = myid(), pids = Int[])
println(S)
S[3,2] = 7
println(S)
[2 2 2 2 2 2 2 2 2 2 2 2] [2 2 2 2 2 2 2 2 2 7 2 2]
Se diferencian de los Sharded Arrays en que los sharded son compartidos por completo entre todos los workers, mientras que los distributed son divididos en pedazos y repartidos entre los workers, compartiendo únicamente la metadata de estos. La inicialización de estos arrays debe ser de esta forma:
# Desde la versión 0.4 toca importar el paquete
# Pkg.add("DistributedArrays")
@everywhere using DistributedArrays
dzeros(100,100,10) # matriz de ceros
dones(100,100,10) # matriz de unos
drand(100,100,10) # matriz de números aleatorios
drandn(100,100,10) # matriz de números aleatorios (fuera del rango 0-1)
dfill(8,100,100,10) # el primer parámetro es el valor a llenar
WARNING: replacing module DistributedArrays
100x100x10 DistributedArrays.DArray{Int64,3,Array{Int64,3}}: [:, :, 1] = 8 8 8 8 8 8 8 8 8 8 8 8 8 … 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 … 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 … 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 ⋮ ⋮ ⋮ ⋱ ⋮ ⋮ 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 … 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 … 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 [:, :, 2] = 8 8 8 8 8 8 8 8 8 8 8 8 8 … 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 … 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 … 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 ⋮ ⋮ ⋮ ⋱ ⋮ ⋮ 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 … 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 … 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 [:, :, 3] = 8 8 8 8 8 8 8 8 8 8 8 8 8 … 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 … 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 … 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 ⋮ ⋮ ⋮ ⋱ ⋮ ⋮ 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 … 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 … 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 [:, :, 4] = 8 8 8 8 8 8 8 8 8 8 8 8 8 … 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 … 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 … 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 ⋮ ⋮ ⋮ ⋱ ⋮ ⋮ 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 … 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 … 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 [:, :, 5] = 8 8 8 8 8 8 8 8 8 8 8 8 8 … 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 … 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 … 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 ⋮ ⋮ ⋮ ⋱ ⋮ ⋮ 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 … 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 … 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 [:, :, 6] = 8 8 8 8 8 8 8 8 8 8 8 8 8 … 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 … 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 … 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 ⋮ ⋮ ⋮ ⋱ ⋮ ⋮ 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 … 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 … 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 [:, :, 7] = 8 8 8 8 8 8 8 8 8 8 8 8 8 … 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 … 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 … 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 ⋮ ⋮ ⋮ ⋱ ⋮ ⋮ 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 … 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 … 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 [:, :, 8] = 8 8 8 8 8 8 8 8 8 8 8 8 8 … 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 … 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 … 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 ⋮ ⋮ ⋮ ⋱ ⋮ ⋮ 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 … 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 … 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 [:, :, 9] = 8 8 8 8 8 8 8 8 8 8 8 8 8 … 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 … 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 … 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 ⋮ ⋮ ⋮ ⋱ ⋮ ⋮ 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 … 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 … 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 [:, :, 10] = 8 8 8 8 8 8 8 8 8 8 8 8 8 … 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 … 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 … 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 ⋮ ⋮ ⋮ ⋱ ⋮ ⋮ 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 … 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 … 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8
El constructor primitivo tiene la forma DArray(init, dims[, procs, dist])
, donde init
es una función que acepta una tupla de rango de indices, dims
son las dimensiones, procs
especifica un vector de id a usar y dist
es un vector de enteros que especifica entre cuantas dimensiones realizar la división para dada dimensión.
Los métodos para estos arreglos son:
distribute(a::Array)
: convierte un arreglo local a un arreglo distribuidolocalpart(a::DArray)
: obtiene la porción almacenada localmente del DArray
localindexes(a::DArray)
: devuelve una tupla con los rangos de los indices almacenados localmenteconvert(Array, a::DArray)
: proceso contrario a distribute
A = fill(1.1, (100,100))
println(sum(A))
DA = distribute(A)
println(sum(DA))
println(sum(A) == sum(DA))
10999.999999999969 10999.999999999969 true
Dado el hecho de que el manejo del garbage collector es más compleja en este tipo de tareas, se recomienda cerrar estos arreglos al final del código de la siguiente forma:
darray_closeall()
LoadError: UndefVarError: darray_closeall not defined while loading In[15], in expression starting on line 1