首页 > 解决方案 > Pytorch 扩展:由 g++ 编译的扩展与由 setuptools 构建的扩展之间的性能差异

问题描述

我为 torch 编写了一个 cpp 扩展,它是一个自定义卷积函数。

首先,我直接用g++编译了这个函数,用于测试,延迟为5毫秒

其次,我尝试将这个功能集成到torch中,并按照torch提供的教程中显示的步骤,通过setuptools安装了这个扩展。但是,延迟现在是16 毫秒

函数调用会消耗大约 1-2 毫秒,那么为什么性能差异如此之大呢?

g++直接编译是由

g++ -pthread -mavx2 -mfma ...

源文件中的指令包括

#pragma GCC diagnostic ignored "-Wformat"

#pragma STDC FP_CONTRACT ON

#pragma GCC optimize("O3","unroll-loops","omit-frame-pointer","inline") //Optimization flags

// #pragma GCC option("arch=native","tune=native","no-zero-upper") //Enable AVX

#pragma GCC target("avx")

这些指令也包含在 setuptools 构建的文件中。“setup.py”文件是

setup(
    name = 'cusconv_cpp',
    ext_modules=[
        CppExtension(name='cusconv_cpp', sources=['src/cusconv.cpp'],
        extra_compile_args={'cxx': ['-O3', '-pthread', '-mavx2', '-mfma']})
    ],
    cmdclass={
        'build_ext': BuildExtension
    })

setuptools 用于构建的输出日志是

x86_64-linux-gnu-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/home/max/.local/lib/python3.6/site-packages/torch/lib/include -I/home/max/.local/lib/python3.6/site-packages/torch/lib/include/torch/csrc/api/include -I/home/max/.local/lib/python3.6/site-packages/torch/lib/include/TH -I/home/max/.local/lib/python3.6/site-packages/torch/lib/include/THC -I/usr/include/python3.6m -c src/indconv.cpp -o build/temp.linux-x86_64-3.6/src/indconv.o -O3 -pthread -mavx2 -mfma -DTORCH_API_INCLUDE_EXTENSION_H -DTORCH_EXTENSION_NAME=indconv_cpp -D_GLIBCXX_USE_CXX11_ABI=0 -std=c++11

其中确实包括这些标志,但也使用了许多其他标志。有人有什么想法吗?

标签: c++11python-3.6pytorch

解决方案


推荐阅读