La norme MPI, 3.0, dIt mpi_scatterv:MPI, python, Scatterv, et les données qui se chevauchent
La spécification des comptages, les types et les déplacements ne devrait causer aucun emplacement sur la racine à lire plus une fois «
Cependant, mes tests de mpi4py en python avec le code ci-dessous ne signifie pas qu'il ya un problème avec les données de lecture de la racine plus d'une fois.
import numpy as np
from sharethewealth import sharethewealth
comm = MPI.COMM_WORLD
nprocs = comm.Get_size()
rank = comm.Get_rank()
counts = [16, 17, 16, 16, 16, 16, 15]
displs = [0, 14, 29, 43, 57, 71, 85]
if rank == 0:
bigx = np.arange(100, dtype=np.float64)
else:
bigx = None
my_size = counts[rank]
x = np.zeros(my_size)
comm.Scatterv([bigx, counts, displs, MPI.DOUBLE], x, root = 0)
print x
Commande
> mpirun -np 7 python mycode.py
produit
[ 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72.]
[ 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99.]
[ 0. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.]
[ 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44.]
[ 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58.]
[ 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86.]
[ 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30.]
La sortie est clairement correcte et les données de la racine (processus 0) a clairement été fait référence plus d'une fois à chacun des points limites. Est-ce que je ne comprends pas la norme MPI? Ou est-ce un comportement fortuit qui ne peut pas être invoqué en général? FWIW, je cours python 2.7 sur OSX.
Merci pour cet aperçu. –