是否值得为我的抽象代数库创建一个开放的CL版本?



我正在用Python编写一个抽象代数库,它所做的一件事是获取Cayley表(把它想象成一个抽象的"乘法"表,它不必遵守乘法或加法的标准规则),并使用它来证明由Cayley表定义的二进制运算符是否具有某些标识或属性。

这些过程的计算基本上可以归结为:

  1. 使用Cayley表中的值来获得一些抽象二进制操作的结果
  2. 比较结果值,看它们是否相等
  3. 在循环中多次执行上述所有操作。

由于需要完成的操作数量太多,这可能会导致cpu非常密集,特别是如果你想对大小为n*n(我认为是O(n^2!)的cayley表的所有排列执行此操作时。好处是,这是高度并行化的,因为我有算法可以在大约O(n)时间内计算n*n cayley表的第m个排列,因此所有cayley表排列的集合可以几乎均匀地分割,并且可以分配多个进程来并行处理问题的不同子集。

这样的过程(替换查找表中的值,比较结果)适合于打开CL,或任何其他GPU库吗?

如果你能改变

Compare the resulting values to see if they are equal

类似
subtract one from another, save the result and check for a zero from host side.

如果结果决定只是一个加法(+)操作,甚至看起来像

subtract one from another, multiply (1-signum(result)) with the adder value, then add.

可以比cpu更快。因为gpu内存在非随机读写时通常比主机内存略快。

最新更新