问题标签 [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.
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
iterator - 带有条件的教堂迭代器
我正在尝试在 Chapel 中编写一个带有条件的迭代器。这有效
返回
假设我只想返回大于 3 的那些。这些都不会编译。什么是正确的语法?
变量 x = [1,4,5,2,6,3];
sparse-matrix - 在 Chapel 中使用 forall 填充数组
这在我的笔记本电脑上运行良好,但我想知道这是否会导致大规模问题。假设我想填充一个非常大的数组,但每个条目都需要对一个大的、稀疏的分布式矩阵进行密集的矩阵运算。我应该期望以下设计能够坚持吗?
有保持这种理智的提示吗?我应该使用 admapped
的域x
还是什么?
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 函数。
我错过了什么?
arrays - 如何在教堂中创建一个参差不齐的数组
我正在尝试创建所有不同长度的“数组数组”。例如
使用 Chapel 强类型,我不知道如何声明和填充A
。我第一次使用它是迭代A
并找到一组独特的元素,如
所以看一个构造和使用的例子会很有用。谢谢!
distributed-computing - 在 Chapel 中将整数数组高效转换为整数域
我注意到这在Chapel有效。我可以通过将整数数组转换为domain(int)
这非常有帮助,但我想知道是否存在失败的实例,例如在分布式上下文中。
我正在使用的另一个功能是在转换到域时对集合进行重复数据删除。
有没有更有效的方法来做到这一点,或者这是一种首选方法?我无法计时,因为我无法使用足够大的集群 ATM
chapel - Chapel 中的阵列切片性能
我有一段 C 代码,如下所示:
matrixPtr
以行优先布局存储的 2D 矩阵在哪里。获取每行的引用/指针是为了使代码更具可读性,并避免需要为最内层循环(即matrixPtr[(i*numCols)+j]
)中的每次访问计算行偏移量。
在 Chapel 中,如果我要翻译上面的代码,并尝试将其紧密匹配,我可能会得到这样的结果:
其中matrix
是 Chapel 矩阵,myRow
是对矩阵行切片的引用。
我注意到,与省略数组切片步骤以获取行引用并直接访问matrix
by相比,上述 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 倍的差异,但肯定超出了我的预期。
chapel - 如何在教堂中构造一个新的 Matrix()?
我遇到了一个错误
如何正确构造 M?我感觉我曾经知道答案...