numpy基于我与优化的 C/C++ 代码的令人震惊的比较,我试图了解怎么能这么快,这仍然远不能重现 numpy 的速度。
考虑以下示例:给定一个带有shape=(N, N)和的二维数组dtype=float32,它表示 N 维的 N 个向量的列表,我正在计算每对向量之间的成对差异。使用numpy广播,这简单地写为:
def pairwise_sub_numpy( X ):
return X - X[:, None, :]
Run Code Online (Sandbox Code Playgroud)
使用timeit我可以测量性能N=512:在我的笔记本电脑上每次通话需要 88 毫秒。
现在,在 C/C++ 中,一个简单的实现写为:
#define X(i, j) _X[(i)*N + (j)]
#define res(i, j, k) _res[((i)*N + (j))*N + (k)]
float* pairwise_sub_naive( const float* _X, int N )
{
float* _res = (float*) aligned_alloc( 32, N*N*N*sizeof(float));
for (int i = 0; i < N; i++) {
for …Run Code Online (Sandbox Code Playgroud)