问题标签 [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.

0 投票
2 回答
229 浏览

distributed - 提高 bigint 写入磁盘性能

我正在处理非常大的bigint数字,我需要将它们写入磁盘并稍后再读取它们,因为它们一次无法全部放入内存中。

当前的 Chapel 实现首先将 a 转换bigint为 a string,然后将其写入string磁盘 [1]。对于大整数来说,这需要很长时间。

有没有办法使用 GMP 的mpz_out_raw()/ mpz_inp_raw()[2] 或mpz_export()/ mpz_import()[3] 或其他类似的方式将bigint' 的字节直接转储到磁盘而不事先转换为字符串,然后将字节读回bigint对象?

这也适用于bigint数组吗?

如果在当前状态下不可能,如何将这样的功能添加到 Chapel 的标准库中?

[1] https://github.com/chapel-lang/chapel/blob/master/modules/standard/BigInteger.chpl#L346

[2] https://gmplib.org/manual/I_002fO-of-Integers.html

[3] https://gmplib.org/manual/Integer-Import-and-Export.html

0 投票
1 回答
78 浏览

postgresql - 使用 Chapel CDO 从 Postgres 检索数组

使用Chapel CDO 库从 Postgres 中提取数组时出现错误 我有一个带有下表的 pg 实例

我正在尝试使用以下教堂计划来拉动它

但是循环分解了字符,如

我如何让它识别数组?谢谢!

0 投票
1 回答
72 浏览

iterator - 带有条件的教堂迭代器

我正在尝试在 Chapel 中编写一个带有条件的迭代器。这有效

返回

假设我只想返回大于 3 的那些。这些都不会编译。什么是正确的语法?

变量 x = [1,4,5,2,6,3];

0 投票
1 回答
118 浏览

sparse-matrix - 在 Chapel 中使用 forall 填充数组

这在我的笔记本电脑上运行良好,但我想知道这是否会导致大规模问题。假设我想填充一个非常大的数组,但每个条目都需要对一个大的、稀疏的分布式矩阵进行密集的矩阵运算。我应该期望以下设计能够坚持吗?

有保持这种理智的提示吗?我应该使用 admapped的域x还是什么?

0 投票
1 回答
60 浏览

chapel - 实现 DSI 时域映射类中未解决的调用“init”

(chpl 版本 1.16.0.e43acc7)

我开始学习DSI 接口,并且在从 Distribution 类中的 dsiNewRectangularDom 函数构造 Domain 类时遇到了一个令人困惑的问题:

(这是非常基本的代码,我不希望它完全编译,但我被困在这部分。)

这会产生编译错误:

(请参阅此 TIO 实例

我对这个 init 函数的来源有点困惑。我正在关注 Block、BlockDist 和 BlockDom 的行为(特别是BlockDist.chpl:533 ,其中 Block.dsiNewRectangularDom 调用 BlockDom 的构造函数。由于 MyDom 继承自 BaseRectangularDom,因此我(1)不需要声明等级 idxType,等成员变量,以及 (2) 不需要定义 MyDom( rank, idxType, ... ) 构造函数。我也没有看到可以从中学习的 BlockDom.init 函数。

我错过了什么?

0 投票
1 回答
56 浏览

arrays - 以另一个数组作为 Chapel 中的索引对数组进行排序

我正在查看 Chapel 中的Sort运算符并尝试对两个数组进行排序。

现在我想要一个迭代器或新数组,它ba. 那是

我如何使用比较器(或者,真的,任何方法)来做到这一点?

0 投票
1 回答
67 浏览

arrays - 如何在教堂中创建一个参差不齐的数组

我正在尝试创建所有不同长度的“数组数组”。例如

使用 Chapel 强类型,我不知道如何声明和填充A。我第一次使用它是迭代A并找到一组独特的元素,如

所以看一个构造和使用的例子会很有用。谢谢!

0 投票
1 回答
54 浏览

distributed-computing - 在 Chapel 中将整数数组高效转换为整数域

我注意到这在Chapel有效。我可以通过将整数数组转换为domain(int)

这非常有帮助,但我想知道是否存在失败的实例,例如在分布式上下文中。

我正在使用的另一个功能是在转换到域时对集合进行重复数据删除。

有没有更有效的方法来做到这一点,或者这是一种首选方法?我无法计时,因为我无法使用足够大的集群 ATM

0 投票
1 回答
177 浏览

chapel - Chapel 中的阵列切片性能

我有一段 C 代码,如下所示:

matrixPtr以行优先布局存储的 2D 矩阵在哪里。获取每行的引用/指针是为了使代码更具可读性,并避免需要为最内层循环(即matrixPtr[(i*numCols)+j])中的每次访问计算行偏移量。

在 Chapel 中,如果我要翻译上面的代码,并尝试将其紧密匹配,我可能会得到这样的结果:

其中matrix是 Chapel 矩阵,myRow是对矩阵行切片的引用。

我注意到,与省略数组切片步骤以获取行引用并直接访问matrixby相比,上述 Chapel 代码的性能非常慢[i,j],我认为在编译器优化后与上面的 C 代码非常相似(实际上,其性能与上面的 C 代码几乎相同):

我可以理解为什么它会变慢,因为您需要执行数组切片来获取每一行。但我想知道的是为什么 Chapel 中的数组切片要慢得多?首先,我的教堂体验充其量是很少的。

我试图查看生成的 C 代码以更好地了解正在发生的事情。我首先认为每次创建行引用时构建有界范围都会产生很多开销。为了测试这一点,我预先创建了范围并使用了它(即ref myRow = matrix[i,colRange])。但是,这似乎并没有改善运行时间。生成的 C 代码中唯一可以作为潜在线索隔离的另一部分是更改数组等级(或类似内容)的函数。

从角度来看,这种类型的矩阵运算在我的一个应用程序中执行了很多次,相比之下numRows非常大和numCols非常小,使用数组切片时 Chapel 代码的性能比直接访问矩阵慢 30-40 倍with [i,j]--fast使用编译期间使用的标志)。

谢谢

更新:

这里有两个小程序,它们应该产生报告的减速(大约在 20 到 25 倍之间)并使用--fast标志编译。direct.chpl 程序产生的执行时间与获取矩阵的 cPtr 然后计算行偏移量的版本相同,如上面的帖子中所述。

切片.chpl

直接.chpl:

slices.chpl 的输出:

direct.chpl 的输出:

所以这似乎是运行时的 23 倍差异。这并不是我在实际应用程序中看到的 30-40 倍的差异,但肯定超出了我的预期。

0 投票
1 回答
34 浏览

chapel - 如何在教堂中构造一个新的 Matrix()?

我遇到了一个错误

如何正确构造 M?我感觉我曾经知道答案...