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第一次初始化后,没有机制可以更改初始化参数。