Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Optimization Fortran中的MPI_MINLOC_Optimization_Fortran_Mpi - Fatal编程技术网

Optimization Fortran中的MPI_MINLOC

Optimization Fortran中的MPI_MINLOC,optimization,fortran,mpi,Optimization,Fortran,Mpi,我想找出最小元素的位置和值 Fortran语言中非常长的数组 内置函数MINLOC运行良好: position = MINLOC(long_array(:), 1) value = long_array(position) 但是,由于数组的大小,这是非常缓慢的。 我想使用MPI将其并行化 令我惊讶的是,似乎MPI_MINLOC可以给你最小值和 还有持有该值的等级,但不是该等级中的位置 类似于(来自): 其中“slice”是阵列的1/n部分,n是核心数 是否有一种有效的方法来获得最小值和最小值的

我想找出最小元素的位置和值 Fortran语言中非常长的数组

内置函数MINLOC运行良好:

position = MINLOC(long_array(:), 1)
value = long_array(position)
但是,由于数组的大小,这是非常缓慢的。 我想使用MPI将其并行化

令我惊讶的是,似乎MPI_MINLOC可以给你最小值和 还有持有该值的等级,但不是该等级中的位置

类似于(来自):

其中“slice”是阵列的1/n部分,n是核心数

是否有一种有效的方法来获得最小值和最小值的全局位置

非常感谢, 最好的,
Sam

在使用MPI之前,只需检查
MINLOC(long_array,1)
的速度。事实上,这是该部分代码的速度瓶颈。该代码与MINLOC配合得很好,但在那里花费的时间不合理。通常,分布式阵列使用MPI调用,本地阵列使用本地调用。很少有人需要考虑应该使用哪一个。你是否真的分散了数组,然后调用minloc来获得本地数组的最小值?因为MPI通常不会并行化程序的一小部分。要么整个东西都是分布式的,要么不是分布式的。另外,如果你太频繁地需要一个最小值,开始询问你是否使用了正确的算法,以及你的数组是否不应该首先排序。你实际上没有回答我的问题:
MINLOC(long\u array(:),1)
MINLOC之间有速度差异吗(长数组,1)
local = long_array[slice]
MPI_Allreduce(local, global, 1, MPI_2INT, MPI_MINLOC, MPI_COMM_WORLD)
print*,'Rank ',global[1]
print*,'Value', global[0]