Chapel 中的稀疏迭代

Sparse Iteration in Chapel

sps = sparse subdomain(dom) 上给定一个数组 M:[sps],其中 dom: domain(n),我知道我可以使用 for j in M.domain.dim(k) {...} 在第 k 个维度上进行密集迭代。我将如何定义一个类似的循环,它只访问 k 中填充的位置,这样如果 M.domain.dim(k) = {1..N},但 k 中只有 m 个填充的索引,循环只正式生成 m 次迭代而不是 N?

这样做的方法是用一个只引用一个索引的 iterand 遍历整个稀疏域吗? (即 for (i,j) in spsDom { var idx = i }

除了 之外,我对这个问题没有太多答案。快速总结是有一个未记录的迭代器 dimIter() 可用于迭代以 2D CSR/CSC 格式存储的稀疏域的有效维度,但没有官方接口可以执行此操作这适用于今天的所有稀疏域(从 Chapel 1.16 版开始)。

我认为我们最终想要表达的方式是 support slicing of sparse domains 然后遍历该切片。