c - MPi 多播 BIGNUM
问题描述
我有以下代码:
int MPIbcastBigNum(BIGNUM *num, int rank, char* purpoce){
int size = BN_num_bytes(num);
unsigned char *message = OPENSSL_malloc(size);
if(!BN_bn2bin(num, message)) {
fprintf(stderr, "RANK %d: Fail to allocate an array for key bytes \"%s\" \n", rank, purpoce);
fflush(stderr);
OPENSSL_free(message);
return -1;
}
//Do the actual Broadcast && Debug
printf("RANK %d: Broaccasting bignum for purpoce \"%s\" \n", rank, purpoce);
fflush(stdout);
int value = MPI_Bcast(message, size, MPI_BYTE, rank, MPI_COMM_WORLD);
switch(value) {
case MPI_ERR_COMM:
fprintf(stderr, "RANK %d: COMMUNICATIPN ERROR on BIGNUM sending for purpoce \"%s\" \n", rank, purpoce);
fflush(stderr);
OPENSSL_free(message);
return -1;
case MPI_ERR_COUNT:
fprintf(stderr, "RANK %d: Invalid Size Count on BIGNUM sending for purpoce \"%s\" \n", rank, purpoce);
fflush(stderr);
OPENSSL_free(message);
return -1;
case MPI_ERR_TYPE:
fprintf(stderr, "RANK %d: Invalid Data Type on BIGNUM sending for purpoce \"%s\" \n", rank, purpoce);
fflush(stderr);
OPENSSL_free(message);
return -1;
case MPI_ERR_BUFFER:
fprintf(stderr, "RANK %d: Invalid Buffer on BIGNUM sending for purpoce \"%s\" \n", rank, purpoce);
fflush(stderr);
OPENSSL_free(message);
return -1;
default:
printf("RANK %d: ALL OK on BIGNUM sending on purpoce \"%s\" \n", rank, purpoce);
fflush(stdout);
}
//Cleanups
OPENSSL_free(message);
return 0;
}
我尝试做的是通过 MPI 发送一个 OpenSSL BIGNUM。但我的问题是每个 BIGNUM 的大小可能不同。所以我需要知道通知接收进程我的数据长度。
到目前为止,我的想法是先广播大小MPI_INT
,然后将实际数据广播为 n 大小的MPI_BYTE
数组。但是,当我尝试同时接收 size 和 BigNum 时,这些如何不会出现故障?
解决方案
首先广播大小,然后广播数据是正确的做法。在这种情况下,排序不是问题。集体沟通不能相互超越。即使是点对点消息也能保证消息不会被一对发送者和接收者超越。
推荐阅读
- python - 使用 Python、Selenium、Beautiful Soup 扩展 DOM 列表以提取其他内容
- reactjs - Reactjs:如何使用户年龄显示在用户按钮上,而不是使用 reactjs 显示在页面上
- java - 无法将 Apache Commons FileUpload 与 Spring Boot multipart.resolve-lazily 一起使用
- mysql - 在 Worpress 中读取 MYSQL Gravity Forms 中的字段
- php - 尝试在 Azure 的 VM ubuntu 中使用 SendGrid 发送电子邮件时出错
- apache - 如何将 .htaccess 重写 URL 转换为 web.config 格式
- r - R:传递要执行的赋值语句列表和存储的赋值变量
- upgrade - Artifactory 升级失败,需要 postgres 9.5 -> 9.6 升级说明
- android - 如果我希望每次看到活动时都执行网络请求,应该使用哪种生命周期方法?
- javascript - Async/Await 和 Redux Thunks:调用 'dispatch' 是否隐式返回来自 thunk 的承诺?