【发布时间】:2022-01-01 07:09:50
【问题描述】:
我正在尝试查找某些本地子数组的最大绝对值。尝试将原始值共享给其他处理器时会出现问题,因为该值必须保留其原始符号(正或负)
所以我有这个结构:
struct max_data
{
int index;
double real_value, absolute_value;
};
求最大绝对值的函数:
struct max_data find_max_absolute(double vec[], int size)
{
double max = absolute(vec[0]), current = 0;
int position = 0;
struct max_data a;
for (int i = 1; i < size; i++)
{
current = absolute(vec[i]);
if (current > max)
{
position = i;
max = current;
}
}
a.index = position;
a.real_value = vec[position];
a.absolute_value = max;
return a;
}
在主目录中,我使用了以下代码:
// ...
struct max_data local_max_data = find_max_data(local_result, size);
local_max_value = local_max_data.absolute_value;
MPI_Allreduce(&local_max_value, &max_value, 1, MPI_DOUBLE, MPI_MAX, MPI_COMM_WORLD);
我可以创建自定义操作或数据类型吗?
【问题讨论】:
-
是的,您将需要自定义数据类型和操作。