我有一个相对的问题,我已经定义了struct,我希望结构数组有这个信息(处理器名称和处理器的计算时间)这是我的代码的一部分:
struct stru
{
double arr_time[50];
char pname[50];
};
int main (int argc, char *argv[])
{
struct stru all_info[50];
MPI_Status status;
MPI_Init(&argc,&argv);
MPI_Comm_rank(MPI_COMM_WORLD,&process_id);
MPI_Comm_size(MPI_COMM_WORLD,&num_of_processes);
char processor_name[MPI_MAX_PROCESSOR_NAME];
int name_len;
MPI_Get_processor_name(processor_name, &name_len);
if (process_id == 0)
{ //do somthing
}
if (process_id > 0)
{
double start = MPI_Wtime();
for (k=0; k<array_size; k++)
for (i=0; i<rows; i++)
{
c[i][k]=0.0;
for (j=0; j<array_size; j++)
c[i][k] = c[i][k] + a[i][j] * b[j][k];
}
end_time = MPI_Wtime() - start;
all_info[i].arr_time[i] = end_time;
for (int i=1 ;i <= numworkers ;i++)
strcpy( all_info[i].pname, processor_name);
printf(" time = %f for processor %s
\n",all_info[i].arr_time, all_info[i].pname);
}
MPI_Gather( &end_time, 1, MPI_DOUBLE, &all_info[i].arr_time, 1,
MPI_DOUBLE, 0, MPI_COMM_WORLD);
if (process_id == 0){
for(i = 1; i <= numworkers; i++ )
{
printf(" time %f for processor %s
\n",all_info[i].arr_time , all_info[i].pname);
} }
如果我打印它,如果(process_id == 0)
我没有结果!输出是
time 0.000000 for processor
time 0.000000 for processor
time 0.000000 for processor
如果我在qazxsw poi打印,那就打印出来了
事实上,我不知道如何使用if (process_id > 0)
的结构,任何人都可以给我建议如何生成具有处理器名称和时间的结构数组?提前谢谢您的时间。
在这一行:
MPI
你开始使用数组变量processor_name[MPI_MAX_PROCESSOR_NAME];
而不在任何地方定义它。
你在它面前丢失了像processor_name
这样的东西。就像你有点低:
all_info[i].
然后,为了存储字符串,你的all_info[i].processor_name;
需要记忆。单个processor_name
只是一个字节(即一个字母)。所以我们假设这些名字永远不会超过255,你会得到:
char
您的代码中存在许多基本错误,您的问题似乎表明您对C编程缺乏基本的了解。因此,我的建议是花更多时间学习这门语言。
此处发生错误,因为您尚未定义任何类型的struct stru
{
double end_time;
char processor_name[256];
};
。如果我理解你正在尝试的是什么,似乎你试图访问结构的属性。为此,您可能需要使用processor name
运算符。为此,您可能需要定义一个数组
.
代替
struct stru all_info[MPI_MAX_PROCESSOR_NAME];