我想使用Boost.MPI传输大量int main(int argc, char **argv) {
unsigned long physical_addr;
uint8_t *buf;
unsigned long virtual_addr;
char (*my_memory)[sysconf(_SC_PAGESIZE)] = mmap(NULL,PAGE_SIZE * (100000 + OVERSIZE),PROT_READ | PROT_WRITE,MAP_PRIVATE | MAP_ANONYMOUS,-1,0);
int i;
for (i = 0; i * sizeof(*my_memory) < 10000; i++) {
my_memory[i][0] = 1;
}
}
个数字。在Boost.MPI tutorial中解释了
要获得小型固定长度数据类型的最佳性能 包含任何指针,使用它来标记它们是非常重要的 类型特征Boost.MPI和Boost.Serialization。
已经讨论了包含否的固定长度类型 指针可以用作
std::complex<double>
,例如:is_mpi_datatype
或等效的宏
namespace boost { namespace mpi { template <> struct is_mpi_datatype<gps_position> : mpl::true_ { }; } }
documentation of is_mpi_datatype
给出了另一个例子:
[...]要这样做,先做 数据类型Serializable(使用Boost.Serialization库); 然后,为
BOOST_IS_MPI_DATATYPE(gps_position)
类型专门设置is_mpi_datatype
特征,以便这样做 它会point
:derive mpl::true_
当我尝试这样做以优化性能[我在下面的尝试中选项(A)或(B)]时,我发现Boost.MPI不使用内置MPI数据类型namespace boost { namespace mpi {
template<> struct is_mpi_datatype<point>
: public mpl::true_ { };
} }
,也没有映射到MPI_DOUBLE_COMPLEX
操作[我在下面的尝试中断言(3)和(4)]。此外,启用(A)或(B)之一以及禁用断言(3)和(4)会在运行时产生分段错误。
在some source file of Boost.MPI中,我找到了一个名为MPI_SUM
的无证(?)宏,它做了正确的事情,但标有BOOST_MPI_DATATYPE
注释。
在实现这个丑陋的黑客(?)之前,我想问一下:告诉Boost.MPI使用内置/// INTERNAL ONLY
MPI_DOUBLE_COMPLEX
数据类型的预期方法是什么?
std::complex<double>