我正在使用动态矩阵,并使用MPI_Type_vector将每列传递给进程。我正在定义像这样的类型
MPI_Type_vector(m,1,n,MPI_INT,&column_mpi_t);
MPI_Type_commit(&column_mpi_t);
m是行数,n是列数。当n和m很小时,这种方法很好,分别为4和8。但是当m和n太大时,程序会因分段错误而崩溃,称m为40和n 80。
有人知道为什么会这样吗?或者使用大小如此大的type_vector?
感谢您的帮助。
答案 0 :(得分:1)
完全同意您应该发布代码的评论。
通常,您可能没有分配正确类型的缓冲区。 MPI_Type_vector
将描述一个记忆区域。该区域为MPI_Type_size
个字节,但它将分散在MPI_Type_get_extent
的lb和范围值给定的范围内。