通常,BLAS 子程序是为某个独特的操作定义的。例如,
DAXPY
是必然的y <-- ax + y
DSCAL
是必然的x = ax
。
我希望达到的是:
z = ax+by
和y = ax
。
我如何“扩展” BLAS 的子程序以便我可以执行上述操作? (这些操作不一定相互遵循)
我试过了:
声明一个虚拟对象,然后
DCOPY
将虚拟对象设置为所需的向量。像,DCOPY(dummy,x); DSCAL(a,dummy),DCOPY(y,dummy)
创建我自己的 OpenMP 实现
DCOPY(y,a*x)
使用诸如for y=ax之类的技巧
但问题是,这些方法似乎都没有给我一个确凿的答案,哪个是解决这个问题的最佳方法。我知道我应该“配置文件,配置文件,配置文件”而不是询问,但我已经尝试了所有这些,但是每次我稍微改变向量时,之前最好的方法突然变成最差的方法,反之亦然。
还,
- 我的目的是尽可能实现最佳性能。
- 我知道优化这些操作可能不会给我带来太多的性能提升,但我正在尝试尽可能节省每一皮秒。
- FWIW,我正在链接到英特尔 MKL