我正在做一些计算,并对不同BLAS实现的力量和弱点进行一些分析.但是我遇到了一个问题.
我正在测试cuBlas,在GPU上做linAlg似乎是个好主意,但是有一个问题.
使用列主格式的cuBlas实现,因为这不是我最终需要的,我很好奇是否有一种方法可以让BLAS做矩阵转置?
是否有一种高性能方法可以将 numpy 数组转换为 FORTRAN 有序 ctypes 数组,理想情况下不需要副本,并且不会触发与步幅相关的问题?
\nimport numpy as np\n\n# Sample data\nn = 10000\nA = np.zeros((n,n), dtype=np.int8)\nA[0,1] = 1\n\ndef slow_conversion(A):\n return np.ctypeslib.as_ctypes(np.ascontiguousarray(A.T))\n\nassert slow_conversion(A)[1][0] == 1\nRun Code Online (Sandbox Code Playgroud)\n仅调用as_ctypes的性能分析:
\n%%timeit\nnp.ctypeslib.as_ctypes(A)\nRun Code Online (Sandbox Code Playgroud)\n3.35 \xc2\xb5s \xc2\xb1 每个循环 10.5 ns(意味着 \xc2\xb1 标准偏差 7 次运行,每次 100000 次循环)
\n所提供的(慢速)转换的性能分析
\n%%timeit\nslow_conversion(A)\nRun Code Online (Sandbox Code Playgroud)\n206 ms \xc2\xb1 每个循环 10.4 ms(平均 \xc2\xb1 标准偏差 7 次运行,每次 1 次循环)
\n理想的结果是获得与调用类似的性能as_ctypes。