GraphBLAS 初始化#

在使用GraphBLAS之前,必须先进行初始化。这是通过graphblas.init函数完成的。必须指定后端和模式。

import graphblas as gb

# Context initialization must happen before any other imports
gb.init("suitesparse", blocking=False)

# Now we can import other items from graphblas
from graphblas import binary, semiring
from graphblas import Matrix, Vector, Scalar

支持的Backends#

目前唯一支持的后端是suitesparse,尽管计划在未来支持更多后端。

GraphBLAS 模式#

GraphBLAS 规范包含了 阻塞非阻塞 操作模式的概念。

阻塞模式要求立即执行,而非阻塞模式允许函数调用的某些方面被延迟。必须立即检查输入的误差、与输出的兼容性等,但允许实际计算被延迟。希望一些GraphBLAS实现能够在一系列计算中看到优化机会,并意识到中间计算的输出未被使用,从而找到将操作融合在一起的方法。

到目前为止,这种机制尚未完全实现。唯一已知的用法是每次添加或删除单个元素。在非阻塞模式下,这要高效得多,因为元素的添加被排队,对象容器在最后可能的时刻被完全计算。

默认初始化#

如果在调用graphblas.init之前导入了子模块,将发生默认初始化。 默认的后端是suitesparse,默认的模式是nonblocking

如果在默认初始化后使用不同的参数调用graphblas.init,将会引发错误。

重复初始化#

如果多次使用相同的参数调用graphblas.init,不会引发错误。但是,如果参数不匹配,将会引发错误。

在graphblas第一次初始化后,没有机制可以更改初始化参数。