如何使用PyTorch C++扩展添加共享或静态库?

yi0zb3m4  于 2022-11-09  发布在  其他
关注(0)|答案(1)|浏览(223)

如何使用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.solibzstd.so.1libzstd.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.3g++ -fopenmp -O2 -lgomp -lrt -o my_func my_func.cpp lib/libzstd.a都可以。
我只是不知道如何使用torch.utils.cpp_extension.load进行完全相同的编译。
很抱歉问了这么长的问题。我只是想把事情说清楚。

3htmauhk

3htmauhk1#

我已经解决了这个问题。torch.utils.cpp_extension.load中的extra_ldflags参数可以处理这个问题。在我的例子中,我已经在我的仓库中添加了libzstd.so文件,并在上面的参数中添加了-lzstd

相关问题