Math 用cuda计算二元NxN矩阵的行列式

Math 用cuda计算二元NxN矩阵的行列式,math,parallel-processing,cuda,gpu,Math,Parallel Processing,Cuda,Gpu,我正在寻找一种计算二进制NxN矩阵行列式的好方法 到目前为止,我发现了这一点:,但这种实现可能适用于一般矩阵(浮点),而我只需要处理整数。此外,cuBLAS或cuSOLVER仅支持双精度矩阵。根据,秩N的a的行列式有一个已知的上界 对于N=36,上界确定性为1200757082375992968,需要61个整数位才能精确表示。考虑到GPU只有长度高达64位的本机整数类型,如果没有某种大整数实现(如果存在的话),对于N=64的整数,绝对不可能做到这一点,这将是一个100%的软件实现,并且保证速度非

我正在寻找一种计算二进制NxN矩阵行列式的好方法

到目前为止,我发现了这一点:,但这种实现可能适用于一般矩阵(浮点),而我只需要处理整数。此外,cuBLAS或cuSOLVER仅支持双精度矩阵。

根据,秩N的a的行列式有一个已知的上界

对于N=36,上界确定性为1200757082375992968,需要61个整数位才能精确表示。考虑到GPU只有长度高达64位的本机整数类型,如果没有某种大整数实现(如果存在的话),对于N=64的整数,绝对不可能做到这一点,这将是一个100%的软件实现,并且保证速度非常慢


因此,唯一可行的实现将在双精度浮点中执行,现有的双精度线性代数库之一将是GPU上的最佳(也是唯一)可行解决方案。

如果您的整数是32位整数,则使用
double
数量(尾数的53位)可能仍然可行。根据GPU的不同,这可能是最快的方法。有些GPU的双精度浮点吞吐量“接近”整数吞吐量。谢谢你的提示。我认为有一个技巧可以在二元矩阵上进行LU分解,然后我们可以很容易地从LU计算det,但我仍然在寻找它。可能有意思你说的二进制到底是什么意思?所有的条目不是1就是0,或者其他什么?目前,我只需要N=64,但它需要快一点,小于1ms