如何使用torch.utils.cpp_extension.load
从外部源链接共享库或静态库?
我用C++写了一些函数,并在PyTorch中使用它。所以我使用torch.utils.cpp_extension
中的load
函数来加载PyTorch C++ extension just-in-time (JIT)。
以下是wrapper.py
文件的内容:
import os
from torch.utils.cpp_extension import load
dir_path = os.path.dirname(os.path.realpath(__file__))
my_func = load(name='my_func', sources=[os.path.join(dir_path, 'my_func.cpp')], extra_cflags=['-fopenmp', '-O2'], extra_ldflags=['-lgomp','-lrt'])
my_func.cpp
使用OpenMP,所以我使用上面的标志。
现在,我尝试在my_func.cpp
中额外使用zstd库中的几个函数。在克隆和make
ing zstd仓库之后,已经创建了libzstd.so
、libzstd.so.1
、libzstd.so.1.5.3
等共享库和libzstd.a
等静态库。
我已经在my_func.cpp
中包含了#include <zstd.h>
,并使用了zstd的函数。
我现在必须修改wrapper.py
,告诉编译器我正在使用zstd库中的函数。
如何使用PyTorch C++扩展的torch.utils.cpp_extension.load
成功地编译my_func.cpp
--我应该修改哪些参数?或者,是否可以使用此方法添加外部共享或静态库?
坦率地说,我对静态库和共享库的区别并不熟悉,但我似乎可以用它们中的任何一个来编译my_func.cpp
,即g++ -fopenmp -O2 -lgomp -lrt -o my_func my_func.cpp lib/libzstd.so.1.5.3
和g++ -fopenmp -O2 -lgomp -lrt -o my_func my_func.cpp lib/libzstd.a
都可以。
我只是不知道如何使用torch.utils.cpp_extension.load
进行完全相同的编译。
很抱歉问了这么长的问题。我只是想把事情说清楚。
1条答案
按热度按时间3htmauhk1#
我已经解决了这个问题。
torch.utils.cpp_extension.load
中的extra_ldflags
参数可以处理这个问题。在我的例子中,我已经在我的仓库中添加了libzstd.so
文件,并在上面的参数中添加了-lzstd
。