2017-08-11 35 views
2

克雷,对不起,为清晰的答案再次上升!在answer之后,我收到了关于域映射的更多问题。如果你清除我对域映射的怀疑,我将非常感激并非常感激。
我希望,我已经按顺序排列了问题。继续:“教堂语言中的dmapped域如何实际映射到?”

1.)什么是域映射? - 域映射定义从域和阵列的全局数组索引到群集中的一组语言环境的映射。

我总结了我从研究论文和其他可能存在错误的ppts中了解的内容。请随时纠正答案。

const Domain = {1..8,1..8} dmapped Block({1..8,1..8}) 

这里{1..8,1..8}是空间indexspace(域),即分配给使用Block - 配送域映射与boundingBox = {1..8,1..8}
Block域地图构造的语言环境,

proc block(boundingBox:    domain, 
      targetlocales:[] locale = Locales, 
      datapartasks   = ..., 
      dataparmingranularity = ... 
      ) 

Block domain-map只想知道关于boundingBoX,targetlocalesdatapar*'-s并且不需要domain,在这里是{1..8,1..8}。由于在本身内部有很多用于创建域映射的界面,我发现很难正确处理事物,其中一些界面隐藏了用户的一些信息。

所以我的问题是:难道Block域地图上targetlocales创建实例,其中包含本地索引集,如{1..2,3..4}locale 1{1..2,1..2}locale 2(其中这些数字只是一个例子,所以以说明映射过程)?
在以前的答案,布拉德·张伯伦博士提到,

“dmapped座条款()在目标区域设置创建实例。块域地图类存储的每个实例的外接矩形框,并设置目标语言环境”

我没有找到这意味着从它:(
在全,请解释如何域地图,域和数组正在合作的态度。我研究了一些措施,但都错过了某种信息我需要完全理解领域地图。

In this presentation幻灯片No:34,本地实例域映射和域只存储索引空间,没什么特别的。

  1. 在之前的回答中,Dr.布拉德·张伯伦也提到,

“给定域映射实现可能是非常节省空间和最小的,也可以冗余分配在各个地区的一切,为笔者认为最好的”,

在这种情况下,“冗余地分配每个地区的所有内容”究竟意味着什么?是否将整个数组存储在每个地方?

  • 在PGAS,域映射,域的全局实例,阵列是在所有区域设置可见?。我也希望每个查询都通过全局实例进行。
  • 如您在文档中提到的,我恳请您确定域映射所需的接口。
    如果我对此有所解释,我将非常感激并感激。
    非常感谢。

    +1

    我很早就意识到,我指出的幻灯片足够长,它们使用方括号而不是大括号来表示域值......几年前发生的句法变化:http:// chapel。 cray.com/docs/latest/language/evolution.html#domain-literals。出于这个原因,我编辑你的问题来更新当前的语法。 – Brad

    +0

    我错过了。 – praveen

    回答

    2

    1.)什么是域映射?

    域映射是一个Chapel类,其目的是描述如何实现域以及在这些域上声明的任何数组。实事求是地讲,它们指定:

    • 如何实现在该领域的地图,包括如何将它们存储在内存中,如何实现,编译器可能需要方法(如迭代,会员测试等方面宣称域)
    • 如何实现)

    在该领域,包括如何将它们存储在内存中,如何实现,编译器可能需要方法(如迭代,随机访问等方面宣称阵列块域映射只想知道boundingBox,targe tlocales和datapar,并且不需要域,在这种情况下{1..8,1..8}。

    这是正确的,在学习Block发行版时,这通常会造成混淆。让我们用一个稍微人工例子说明一点:

    const D = {1..4, 1..4} dmapped Block({1..8, 1..8}); 
    

    这个声明说,2D指数的平面应尽可能均匀地挡住了语言环境之间的边框{1..8, 1..8}被分配到区域设置。如果我在4个语言环境中运行,区域设置0将拥有边界框的{1..4, 1..4},这意味着它将在2D平面中拥有{-inf..4, -inf..4}(其中,inf旨在表示“无限”,实际上,-inf将由小整数)。同样,区域设置3将拥有边界框的{5..8, 5..8}或来自2D平面的{5..inf, 5..inf}

    如您所知,上面的{1..8, 1..8}只是Block域映射的一个参数,因此与D的值没有关系,只有它的实现。由于D的值为{1..4, 1..4},因此它完全属于区域设置0,因为它完全适合该2D区域的该区域设置部分。相反,如果它是{2..5, 2..5},区域0将自己{2..4, 2..4},现场1人拥有{2..4, 5..5},区域2将拥有{5..5, 2..4}和区域3将自己{5..5, 5..5}

    因为块分布通过该边界框域参数化,这经常会导致混乱约为什么在像上面的一个一个声明中使用的两个域,特别是因为它们通常在实践中是相同的。这与域映射本质上无关,并且与块域映射的构造函数期望域是其参数之一有关。相比之下,CyclicBlockCyclic域地图不拿域参数,而且往往更容易理解的结果。

    做了块域地图上持有本地索引集targetlocales创建实例...

    是的,在实践中,Block域地图创建一个LocBlock类存储的实例,每个区域的本地索引集 - 例如,{-inf..4, inf..4}区域设置0,{-inf..4, 5..inf}区域设置1,等我前面的例子。

    块域地图类的每个实例存储外接矩形框,并设置目标区域设置的

    是的,每个地区也存储存储所有的关键参数的Block域地图类的副本参数化域映射,以便它所定义的分布可以由每个语言环境孤立地进行推理。

    在幻灯片编号:34的本演示文稿中,本地实例域映射和域只存储索引空间,没有什么特别的。

    这是正确的,本地块域映射类的作用是存储该语言环境拥有的2D平面的一部分(场景#4或L4在幻灯片中)。同样,本地阻止域类的作用是存储由该语言环境拥有的域索引集的一部分。这些并不特别,但它们分别对于定义分布和分布式域非常重要。

    2.In以前的答案,Dr.Brad有还提到,“给定域映射实现可能是非常节省空间和最小的,也可以冗余分配在各个地区的一切,为笔者认为最好的”在这种情况下,“冗余地分配每个地区的所有内容”实际上意味着什么?是否将整个数组存储在每个地方?

    是的,通过“冗余地分配每个地区的所有内容”我的意思是每个地区存储整个阵列。这可能不是特别可扩展的,但重点在于语言和域映射框架没有提及数组如何存储,只要它们支持预期的接口即可。所以如果他们选择的话,域映射的作者可以做到这一点。

  • 在PGAS,域图,域阵列的全局实例是在所有区域设置可见?。我也希望每个查询都通过全局实例进行。
  • 你是正确的类的全局实例由于教堂的PGAS(分区全局地址空间)模型是在所有的语言环境中可见。也就是说,由于域之间的通信很昂贵,而且这些对象往往很少改变它们的字段,实际上我们倾向于跨地域复制它们。在你引用标签“(逻辑上)”的幻灯片34中,是指这样的:每个对象都有一个概念拷贝,但实际上我们倾向于跨地域复制它们(域映射的作者可能或可能不会这样做,因为他们希望)。

    如您在文档中提到的那样,我恳请您确定域映射所需的接口。

    有关域映射接口的当前文档可用here。实现6个描述符({global,local} x {domain map,domain,array})的Block域映射的当前源可以在here找到。

    +0

    非常感谢@Brad为您解答。 – praveen

    +0

    分布式域是否是像域映射一样的本地域对象的集合。除了整数之外的其他类型的域是如何分布的,从文档看来,索引类型需要+,/, - 运算符。 – praveen

    +0

    分区全局地址空间中的联合数组与使用域映射分配的多维数组之间有什么区别?我认为两者之间的映射不同,但还有其他区别吗? – praveen