问题标签 [chapel]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
chapel - 从 Cobegin - Chapel 中获取非原始变量
我想并行计算一些信息并在cobegin
.
更准确地说,我的要求是检索这样的域(和其他非原始类型)
我知道sync/single
类型,但不适用于域。
注意:out
在过程参数中使用也不起作用。
syntax - 是`[在]` 等价于 `forall`?
我注意到我收到的一段代码中有一些东西:
[a in A]
相当于forall a in A a = a.locale.id
?_
chapel - 可以生成映射分布的区域设置网格吗?
如果我运行以下代码:
在 4 个语言环境中,我得到:
是否有A.<function>
返回矩阵(下)?
或者,这是我应该实施的吗?
chapel - `forall` 表达式:并行计算还是串行计算?
我对forall
语句的理解是它们是并行执行的,而for
语句是串行执行的。实际上,以下代码似乎证实了这种期望(即,仅用于forall
线程的随机序列):
另一方面,如果我在右侧使用forall
(或等效的 [...] )作为表达式
所有结果都变得相同(即从 10 到 50 排序):
这是否意味着forall
赋值右侧的表达式总是串行执行?如果是这样,相应的 [...] 是否也等同for
于该上下文中的表达式?
chapel - 可以创建一个对象来存储多个域吗?
我有一些我认为应该如下所示的代码:
基本上,我试图从其他numLocales - 1
语言环境中获取多个数据片段。我可以创建一个对象来存储localSubdomain
来自所有其他语言环境的 's 吗?我想我可以解决这个问题,但我很好奇。
arrays - 计算布尔数组中真实元素的数量
在 Chapel 中,我可以将等于给定值的数组元素的数量计算为
但类似的方法似乎不适用于计算真实元素的数量:
在这种情况下,我是否需要编写一个显式的 for 循环,或者是否有任何其他函数(或方法)用于此目的......?
更新
经过更多的实验,似乎如果我将结果保存a == 5
到一个新数组
然后它按预期工作
那么,a == 5
可能代表与数组对象不同的东西,因此不.count()
直接提供?
chapel - 获取 Chapel 中的当前任务 ID?
如何找出哪些任务正在执行 forall 循环的哪些迭代?
例如,我想了解不同 DynamicIters 的行为方式,
我可以用它here.id
来发现 forall 循环在哪个区域设置了迭代,但我不知道如何“查看”每次迭代分配到的区域设置中的哪些任务。
arrays - 教堂中的阵列分配
与其他语言不同,Chapel 中似乎没有用于在堆上分配数组allocate
的new
语法,而是使用通常的类似“声明”的语法。例如,在下面的代码中,我“声明”了两个数组A
和B
一个基于形式(虚拟)参数的函数:
这给出了以下结果:
因为没有发生堆栈溢出(尽管 的大小很大B
),所以可以假设上述语法总是在堆上分配A
,B
而不管它们的大小是多少?
此外,域变量的分配(或重新分配)似乎扮演着数组分配(或重新分配)的角色。例如,以下代码按预期工作。在这种情况下,分配是否总是发生在堆上(再次)?
结果:
最后,用户是否不需要手动deallocate
或delete
这些数组,而是系统根据需要自动释放它们?
arrays - 二维数组切片中的意外类型
在下面的代码中,我试图A
通过使用var
or来获取数组的第一行和第二行ref
。在这里,我的理解是var
总是创建一个新数组,同时ref
在右侧创建一个别名(或引用)。
结果如预期(即第一行A
没有修改):
但是如果我打印的类型row1
和row2
我得到这个结果:
这有点令人惊讶,因为我假设row1
它是一个“普通”数组(即,不是别名)。例如,以下vec
(我称之为“普通”数组)
给
所以我想知道row1
和vec
(作为数组类型)之间是否有一些区别......?
chapel - 切片矩阵:未解决的访问
我正在研究 Chapel,我被困在对函数内部的矩阵进行切片。接收矩阵的函数如下:
即,outer_function
可以接收向量或矩阵。如果它接收到一个向量,它会inner_function
使用相同的输入参数调用它。如果outer_function
接收到一个矩阵,那么我想按列对输入矩阵进行切片并调用inner_function
.
问题是使用x[1..number_rows, i]
或使用切片输入矩阵x[{1..number_rows}, i]
会在编译时引发错误:
x[1..number_rows, i]
: 错误: '[range(int(64),bounded,false), int(64)]' 无法解决对 '[domain(1,int(64),false)] int(64)' 的访问x[{1..number_rows}, i]
: 错误: '[domain(1,int(64),false), int(64)]' 无法解决对 '[domain(1,int(64),false)] int(64)' 的访问
我需要帮助来找出我收到此错误的原因,以及是否有一种更像教堂的方式来实现我想要做的事情。