罗尔夫Rabenseifner
我并行计算——培训和应用程序服务主管hlr和MPI的论坛。在研讨会&夏天学校我教并行编程模型在许多大学和实验室。
位置hlr,德国斯图加特大学
活动
-
罗尔夫Rabenseifner 做了一个评论
我的问题可能超越这门课:是本课程有任何一步,你解释的使用C-pointers Fortran和内在的Fortran C_F_POINTER函数?
-
@LewinStein你可以玩MPI /任务/ C / Ch11 /解决方案/ ring-1sided-store-win-alloc-shared-signal。那位慢送的c / recv由速度设置标志变量替换和轮询。
-
@LewinStein在你的答案,你提到MPI_Send / MPI_Irecv MPI_wait(这将是绝对相同的语义MPI_Send / MPI_Recv)但示例使用MPI_Irecv / MPI_Send / MPI_wait。它是一个环的例子将deadloch如果你使用一个MPI的选择开关所有MPI_Send同步协议。在一个非循环的例子,MPI_Send / MPI_Recv……
-
原则上,MPI_Barrier应该优先当且仅当有大量的邻近的过程,即,O (log_2(#流程))的数量是少那么邻近的过程。
例如,在一个笛卡尔3-dim代码,通常只有6一个邻居和2 * * 6 = 64。如果你有超过64的过程,那么屏障荒原是一个坏主意…… -
我想添加,尤其是在一个共享内存系统,发送空消息/ Recv可以非常快(~ 0.2µs)而X的可见性:= 1秒的过程中可能会大大延长推迟,特别是如果有其他东西必须执行的硬件。
如果你代替发送/ Recv军衔标志变量通过修改0… -
完全正确的答案,因为如果步骤2)中每个进程提供一些尺寸,然后在你的步骤3),葵花籽油过程将检索一个指针总开始(如问我们的问题),但格兰窗口大小的部分过程0不会总规模。
-
亲爱的克里斯蒂安,在MPI论坛,他们认为MPI_Win_allocate (MPI_Alloc_mem相比+ MPI_Win_create)所有进程的沟通者可以在所有进程的窗户在相同的虚拟地址,这将减少基地地址只有一个负载的负载虽然在一个RMA时代,各次许多其他进程可能……
-
我应该补充说,这个窗口创建不是同步,即。你贫矿脉,这取决于同步方法,你必须从相关的同步调用第一个RMA例程之前开始。
-
是的,你选择的答案1过程中修改后的代码也是正确的。
不监督内部MPI_Send可能使用一个同步协议,因此可能会被推迟,直到MPI_Recv过程2。
在这两个过程中1和2你可以选择的开始pt-to-pt沟通MPI_Win_wait之前或之后。这两个电话…… -
不,一个人不能增加一个窗口的内存大小。在MPI是一个非常特殊的特性:动态的窗口。但是在这里,你附加固定部分(即。,也没有办法“增加”部分),通过绝对地址,即,一个非常不同的接口和设计主要支持编译器,如实现分区全局地址…
-
罗尔夫Rabenseifner 做了一个评论
我很抱歉,但是我必须纠正自己:
的下部图描述了这些RMA和本地加载/存储时代,它总是由同步。
更正确的说,RMA访问必须分开的地方加载/存储时代同步,这一系列的RMA访问(可以在… -
是的,完全正确。
-
是的,你是对的。在当前版本的第一、第二和最后回答问题4,有一双篱笆周围只有一个当地的任务:
“MPI_Win_fence /内部作业流程1 / MPI_Win_fence”。
没有一个过程,这对栅栏用来接触定义一个时代或一个RMA时代与RMA调用。因此,… -
我希望你能继续下去。本课程是专为熟悉MPI,想学会使用新接口程序。这意味着你已经熟悉阻塞和非阻塞MPI的点对点通信。在此基础上,我希望周1 + 2不太浓缩。他们现在需要真正理解MPI是什么……
-
是的,测试应该帮助真正的内容前面的步骤,然后再继续下一个步骤。
-
是的,两个。
-
罗尔夫Rabenseifner 做了一个评论
根据应用程序的需求和使用,所有进程我使用PUT和更对称的方式,类似于一个更大的讨论群人类,和其他应用程序的通信可能只在一个方向上使用两个进程之间。
-
罗尔夫Rabenseifner 做了一个评论
嗨,很高兴在这里见到你在接下来的4周。
-
嗨,哈桑,你已经经历MPI点对点阻塞和非阻塞通信吗?
在本课程中,您将首先增加了解片面的沟通(周1 + 2),然后在周3 + 4 MPI的共享内存。 -
是的,锁定和解锁是逻辑上执行目标的过程。
和一个MPI库可以缓冲动作,即。,短MPI_Put可能缓冲和释放可能已经回来,真正的锁定目标完成后;看到mpi - 3.1章11.5或mpi - 4.0 12.5章获取详情。 -
MPI_Get-accumulate得到了目标值,即读取目标数据并将其存储到result-buf arguemnt列表中。然后需要origin_buf在参数列表的数据执行操作参数列表(也)结合当前目标值源自缓冲区中的值。然后结果是存储在目标……
-
共享的记忆是一个非常特殊的操作系统(OS)功能可以看到在步骤1.5。这真的peephole-feature可能占用系统资源。
-
MPI_Win_create_dynamic MPI_Win_attach一起是一个非常特殊的特性为人们想通过MPI实现其他语言,如分区全局地址空间语言。不推荐给正常的应用程序编程。
-
如果两个进程写入同一个窗口位置(例如,在第三个过程)没有任何同步,然后你有一个写入竞态条件。
或者如果一个进程写入本地自己的窗口内存和另一个进程并发读取与MPI_Get同一个窗口位置,然后你有一个write-read竞态条件。
这个答案…… -
不一样的,只有类似的。在Fortran语言Fortran分配工作。MPI_Alloc_mem MPI_Win_allocate和MPI_Win_allocate_shared返回C指针和您将了解下周在步骤2.1如何翻译这样一个C指针变成一个Fortran指针。
-
如果你开始使用MPI,我建议你可以看看初学者课程,因为这是一个高级课程。
我们整个MPI课程材料是可见的https://www.hlrs.de/training/par-prog-ws/MPI-course-material -
MPI_Alltoall只发送一个消息,但每个进程的一个不同的消息,即。10000年进程,每个进程都有发送10000条信息,或者必须经过网络总共100000000条消息。集体所有例程要求接收数必须完全* * * *消息的大小相匹配。因此,如果您使用0…
-
罗尔夫Rabenseifner 做了一个评论
欢迎在本课程。很高兴接到你的电话,你来自哪里,你的工作和你的工作是如何与MPI。在课程结束时,我希望我可以给你进一步的提示,你可以找到更多的信息在MPI。
-
>窗口就像一个动态可分配的“缓冲”在每一个过程?
这取决于,你是否创建或分配你的窗口,看到后来的细节。
>这是一个函数支持的具体硬件结构?
是的,没有。这取决于你的硬件和MPI库如何使用硬件和你是否分配窗口通过MPI…… -
罗尔夫Rabenseifner 做了一个评论
我们还打算,你有(2)(pdf)中央地方您可以添加个人笔记:-)
-
请记住,许多应用程序有一个解算器循环,他们永远不知道“提前”(或提前)需要多少步骤之前中止判据。但这并不阻止做栅栏/ RMA /栅栏时代所需的光环在每个仿真步骤数据交换解决循环。
也请记住,一个序列…… -
之前我们给你一个答案,我想把你的问题说清楚,这意味着我如何理解它。
你想解决的问题
MPI_Win_fence(每个流程的角色,发送方和接收方)
在发送者的角色:
遍历所有MPI_Put发送数据接收器
MPI_Win_fence(每个流程的角色,发送者和… -
郑回答了什么是处理使用MPI标准的正式文本。
现在关于请求处理:它是指所有非阻塞调用的参数列表中的信息加上当前的内部状态的操作发起这个非阻塞调用。它必须完成调用MPI_Wait MPI_Test或他们的…… -
用Fortran >将禁用寄存器优化影响性能?
是的,这将是一个戏剧性的慢下来。
这意味着,您应该使用该方法:
——《异步不应影响循环。它应该只禁止移动跨越过程调用的指令。
——MPI_F_SYNC_REG调用做一模一样的… -
非常感谢你的两个bug报告:
问题6,我们现在设置case-insensitive-flag今后学习。
问题7中,我们将修改尽快/正确的问题和答案,也允许多个选择。 -
是的,你是对的。我们可以增加我们的解释这样的条款。这不是有益的,这已经在拟议的答案,因为在现实生活中,你需要找到它。
例如在问题1中,当前的解释文本正确答案写着:
“过程2是移动的内容变量C的窗口过程1”
但可以优化… -
是的,但只有问题10展示了这样的一个例子。把过程中的一个,你有自由选择发送缓冲区,即。(也就是,您可以使用正常。、私人)变量或所有窗口变量(即。,从这个窗口句柄,也从其他窗口处理)。如果你这样做,这个过程1必须小心同步,但这是以后。
-
是的,只有一个过程本身可以读取和/或修改数据的私有变量。MPI_Put和MPI_Get只能访问变量/数组在另一个进程的窗口。如步骤1.5所示,窗户就像窥视孔进入内存的进程,即。,其他流程可以只通过窥视孔而不是任何其他正常(即。、私人)变量。
-
这意味着所有流程的沟通将会访问windows创建或分配在这些过程中,即窗口句柄反映了集团的过程加上所有的信息窗口被创建或分配在一个集体MPI_Win_create或MPI_Win_allocate打电话。
-
并允许从一个试图厘清同步切换到另一个使用相同的窗口内。但是,一个时代有一个同步方法之前必须完全完成启动另一个时代和另一个时代同步。mpi - 3.1章节11.5和11.7详细描述规则,但他们并不容易读:- (
-
一个完全同意
-
这完全是你的MPI库质量的问题。我从来没有这个基准测试。
-
这是一个MPI库的质量问题。如果你的MPI库实现了MPI_Mem_allocate和MPI_Win_allocate分配操作系统共享内存页然后共享内存的限制可以申请一样过程MPI_Win_allocate_shared:
如果MPI共享内存支持基于POSIX共享内存,
内存可能是…… -
是的,你是对的。我们应该已经提到这个步骤1.5中虽然将在第1.9步然后再解决。
-
>对称的关于什么?
例如MPI_Win_allocate, MPI库可以分配所有进程虚拟地址相同的窗户MPI库中的表查找内部降到最低。而MPI_Alloc_mem是当地的一个函数,因此不能perferm任何集体优化。
-
我的歉意,我给的答案在第一次运行,而不是在第二运行):
MPI_Win_create_dynamic是个非常特别的东西:这叫集体记忆,不提供任何窗口。内存连接之后与当地(! ! !)调用MPI_Win_attach(与…分离和删除)。
必须用绝对地址寻址,看看… -
请您看一看我的问题的答案从乔治·Giannakopoulos和Outi Vilhelmiina Kontkanen步中X。X(抱歉,这是一个引用的评论在这门课的1日运行——看到正确答案在下个评论)
-
好主意。完成了。
-
这里引用的文本:
“在使用MPI_WIN_CREATE_DYNAMIC创建的窗口的情况下,所有RMA的target_disp函数在目标地址;即。,有效window_base MPI_BOTTOM disp_unit就是其中之一。动态窗口,target_disp参数RMA通信业务并不局限于非负价值。用户应该使用…… -
这种“不是真的为最终用户设计;-)”的原因,为什么我们不进入细节在第二周步骤2.1。
-
请看到我的评论以上队员Giannakopoulos拼抢
-
MPI_Win_create_dynamic是个非常特别的东西:这叫集体记忆,不提供任何窗口。内存连接之后与当地(! ! !)调用MPI_Win_attach(与…分离和删除)。
选址必须用绝对地址,请参阅官方mpi - 3.1 411页,8日至13日。
这个接口是为了支持这个…… -
罗尔夫Rabenseifner 做了一个评论
搬到回答的问题
埃米利亚诺·Ippoliti -
罗尔夫Rabenseifner 做了一个评论
欢迎来到我们的课程MPI通讯方法命名为“单边通信”!
-
HPE和hlr已经开始,即。,试图把片面的沟通上取得进展通知未来MPI标准。
-
删除- - - - - -
-
@GeorgGeiser
是的,你是对的。我想注意:MPI_Win_test_lock MPI_Win_test_unlock并不是现有的MPI函数。但是他们可以提出MPI论坛,这是MPI标准化的身体。
这样的提议将通常与实际的应用程序需要一些研究论文显示,有真正的性能优势,这通常是一个… -
我们使用这句话,因为我们想说,如果过程首先要做一个MPI_Put然后进程B想MPI_Get这些信息,然后你可以实现这个MPI_Put;MPI_Fence在amd MPI_Fence_MPI_Get B,但不可能提供这种保证的顺列MPI_Lock /解锁。
然而,所有操作在一个同步…… -
>(顺便说一下,在许多MPI3库“mpi_f_sync_reg”不存在。)
如果这样一个MPI库提供了一个Fortran接口,母鸡这个库并不是一个正确的实现MPI - 3.0或更高版本。你应该问错误修复。现在,你的第一个问题:
请读课文非常小心:如果使用异步的你也应该用
如果(另.... -
原则上,每个MPI库实现允许未经优化或优化供应商或客户提供或购买。
我总是说,MPI_ACCUMULATE通常是专为“稀疏”的使用,例如,100000过程,但每个进程调用MPI_ACCUMULATE只有0 30目标的过程。
non-spare用例,我一般…… -
请回顾活动1.5。如果沟通者有4个过程,那么所有过程必须collectivelly叫MPI_Win_create,因此每个流程处理。和之前的活动,请再检查一次输出参数获得的意义。
-
不,把被称为在原点过程target_disp__origin_process的论证。然后,将这个价值乘以disp_unit__target_process target_process MPI_Win_create规定。然后添加到win_base_addr特点,也是在target_process MPI_Win_create指定。
与我们的指数,我们想要展示,…… -
非常好的问题。MPI论坛的成员从未问过自己是否win_base_addr Fortran iterface MPI_Win_create应该连续属性(不是孔蒂> N < UOUS)。
mpi - 3.1标准403页写道:
“在Fortran,人们可以通过一个内存区域或者整个数组的第一个元素,必须“简单连续的”…… -
请等到下一个活动(2.2)
-
首先,是的,win_size可能选为0在一些过程。
第二,在这种情况下,win_size = = 0,这是没有定义的MPI标准3.1,win_base_addr是否忽略或缓存处理,即。,当你看着mpi - 3.1,部分11.2.6 414页,是否MPI_WIN_BASE属性将返回win_base-addr。Threfore,我…… -
是的,你可以混合:
——mpi_f08处理Fortran派生类型与一个整数(=结构)::MPI_VAL里面。
——这个值是相同的价值在mpi模块和mpif.h使用
——新风格处理也可以使用mpi交给Fortran代码模块,因为所有新处理类型和类型(MPI_STATUS)必须提供在两个,… -
罗尔夫Rabenseifner 做了一个评论
请注意,这将永远是原子。两个同步阻塞之间的所有put和get操作和执行一个给定的序列数组中数据项。唯一的原子功能积累功能(不止一个)。原子性是每个数组元素。
-
听起来正确的。经常积累用于稀疏问题,30邻居,但是在10000年的总过程。在这种情况下,解决方案与一个数组不规模的大小。在许多情况下,MPI标准提供比手写功能,可以更好地优化解决方案。谢谢你提供这样的一个例子。
-
@StellaValentinaParonuzziTicco两个例子是读写冲突,一个RMA读(即一个MPI_GET()),另一个与当地读(即。,一个本地加载操作)