MPI標準,3.0表示約mpi_scatterv:MPI,蟒,Scatterv,和重疊的數據
計數,類型和位移的說明書不應根造成任何位置被讀取多於一旦「
然而,在代碼蟒蛇我mpi4py的測試下方並不表明存在與從根讀取數據的問題不止一次。
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
命令
> mpirun -np 7 python mycode.py
產生
[ 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.]
輸出顯然是正確的,並從根的數據(處理0)已經清楚地被引用不止一次在每個邊界點的更多。我不理解MPI標準嗎?或者這是一種普遍不可靠的偶然行爲?
FWIW,我在OSX上運行python 2.7。
感謝您的洞察力。 –