gpt4 book ai didi

c - MPi 多重广播 BIGNUM

转载 作者:行者123 更新时间:2023-11-30 14:42:34 26 4
gpt4 key购买 nike

我有以下代码:

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 数组。但是,当我尝试接收大小和 BigNum 时,这些如何不会乱序?

最佳答案

先广播大小,然后广播数据是正确的做法。在这种情况下,顺序不是问题。集体沟通不能互相超越。即使是点对点消息也能保证一对发送者和接收者的消息不会被超越

关于c - MPi 多重广播 BIGNUM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54381132/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com