-
Notifications
You must be signed in to change notification settings - Fork 84
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
undefined symbol: vxBatchGemmNode at NXP imx8mpevk #242
Comments
Please set TIM_VX_USE_EXTERNAL_OVXLIB=ON and build it again. After use this flag, we will try to find ovxlib from /usr/lib/. if it cannot detect the library, you can set OVXLIB_INC OVXLIB_LIB to the correct directory manually. |
@sunshinemyson cmake -DCONFIG=YOCTO -DTIM_VX_USE_EXTERNAL_OVXLIB=ON -DOVXLIB_INC="/home/root/TIM-VX/TIM-VX/src/tim/vx/internal/include" .. [100%] Linking CXX shared library libtim-vx.so I don't have idea about OVXLIB_LIB. |
OVXLIB_LIB should be the full path direct to libovxlib.so. Please don't use internal ovxlib if you enabled external ovxlib. You should be able to find the ovxlib headers/lib from the system such as /usr/include/ and /usr/lib/ |
#228 |
I had a similar problem with OVXLIB, and I had to revert to a previous version to make the program compile. Is there a way to fix this problem without going back to a historical version? |
A dirty patch to fix this problem by providing empty implementation: create a new cpp file with source code below #include <cassert>
#include <cstddef>
#include <cstdint>
extern "C"
{
typedef size_t vx_size;
typedef int32_t vx_int32;
typedef int32_t vx_enum;
typedef struct _vx_node *vx_node;
typedef struct _vx_graph *vx_graph;
typedef struct _vx_tensor_t *vx_tensor;
typedef struct _vx_scalar *vx_scalar;
typedef struct _vx_lut *vx_lut;
typedef struct _vx_node *vx_node;
typedef struct _vx_nn_convolution_3d_params_t
{
vx_int32 padding_w_left; /*!< \brief Number of elements added at each side in the left of w dimension of the input. */
vx_int32 padding_w_right; /*!< \brief Number of elements added at each side in the right of w dimension of the input. */
vx_int32 padding_h_top; /*!< \brief Number of elements added at each side in the top of h dimension of the input. */
vx_int32 padding_h_bottom; /*!< \brief Number of elements added at each side in the bottom of h dimension of the input. */
vx_int32 padding_d_front; /*!< \brief Number of elements added at each side in the front of d dimension of the input. */
vx_int32 padding_d_rear; /*!< \brief Number of elements added at each side in the rear of d dimension of the input. */
vx_int32 stride_w; /*!< \brief skip w jump for down scale. */
vx_int32 stride_h; /*!< \brief skip h jump for down scale. */
vx_int32 stride_d; /*!< \brief skip d jump for down scale. */
vx_int32 dilation_w; /*!< \brief "inflate" the kernel by inserting zeros between the kernel elements in the w direction. The value is the number of zeros to insert.*/
vx_int32 dilation_h; /*!< \brief "inflate" the kernel by inserting zeros between the kernel elements in the h direction. The value is the number of zeros to insert.*/
vx_int32 dilation_d; /*!< \brief "inflate" the kernel by inserting zeros between the kernel elements in the d direction. The value is the number of zeros to insert.*/
vx_enum pad_mode; /*!< \brief A VX_TYPE_ENUM of the <tt> \ref vx_pad_mode_e </tt> enumeration. */
vx_scalar pad_const; /*!< \brief pad const value if setting pad mode to const, the const value is base value, not quantized value. */
vx_enum overflow_policy; /*!< \brief A <tt> VX_TYPE_ENUM</tt> of the <tt> vx_convert_policy_e</tt> enumeration. */
vx_enum rounding_policy; /*!< \brief A <tt> VX_TYPE_ENUM</tt> of the <tt> vx_round_policy_e</tt> enumeration. */
vx_enum down_scale_size_rounding; /*!< \brief Rounding method for calculating output dimensions. See <tt>\ref vx_nn_rounding_type_e</tt> */
vx_int32 depth_multiplier; /*!< \brief depthwise multiplier value, if 0, means convolution, elsewise(>=1), the convolution is depthwiseconvolution. */
}vx_nn_convolution_3d_params_t;
vx_node vxBatchGemmNode(vx_graph graph,
vx_tensor matrix_a,
vx_tensor matrix_b,
vx_tensor matrix_c,
vx_scalar trans_a,
vx_scalar trans_b,
vx_scalar trans_c,
vx_tensor output)
{
assert( false && "vxBatchGemmNode is not yet implemented." );
return NULL;
}
vx_node vxTensorTableLookupLayer(
vx_graph graph,
vx_tensor input,
vx_lut InLut,
vx_lut OutLut,
vx_tensor output)
{
assert( false && "vxTensorTableLookupLayer is not yet implemented." );
return NULL;
}
vx_node vxConv3dLayer(vx_graph graph, vx_tensor inputs, vx_tensor weights, vx_tensor biases, const vx_nn_convolution_3d_params_t *convolution_params, vx_size size_of_convolution_params, vx_tensor outputs)
{
assert( false && "vxConv3dLayer is not yet implemented." );
return NULL;
}
}
This will temperately fix the problem, providing you will not use these interfaces in your code. |
@fengwang what SDK you use to compile the TIM-VX? Can you please check if there is the |
@robert-kalmar Thanks for reminding me of this. I was using a relatively old version SDK. I shall upgrade it and come back to you. |
I upgrade the SDK to the most recent one, with Linux build version But unfortunately I still have those symbols not found. Still, I noticed this macro is NOT defined in the header files: A quick test program #include <algorithm>
#include <iomanip>
#include <iostream>
#include <tuple>
#include <vector>
#include "tim/vx/context.h"
#include "tim/vx/graph.h"
#include "tim/vx/operation.h"
#include "tim/vx/ops/activations.h"
#include "tim/vx/ops/conv2d.h"
#include "tim/vx/ops/fullyconnected.h"
#include "tim/vx/ops/pool2d.h"
#include "tim/vx/ops/softmax.h"
#include "tim/vx/tensor.h"
int main()
{
#ifdef VX_BATCH_GEMM_API_SUPPORT
std::cout << "This macro is defined " << std::endl;
#else
std::cout << "This macro is not defined " << std::endl;
#endif
return 0;
}
gives output:
|
Hi,
After I built TIM-VX 1.34.fix on libtim-vx.so, it shows that "undefined symbol: vxBatchGemmNode" when I load libtim-vx.so.
Then, use ldd libtim-vx.so to check problem. And all .so files can be found.
linux-vdso.so.1 (0x0000ffff9a0a6000)
libCLC.so => /usr/lib/libCLC.so (0x0000ffff9954b000)
libGAL.so => /usr/lib/libGAL.so (0x0000ffff99384000)
libOpenVX.so.1 => /usr/lib/libOpenVX.so.1 (0x0000ffff99131000)
libOpenVXU.so => /usr/lib/libOpenVXU.so (0x0000ffff99118000)
libVSC.so => /usr/lib/libVSC.so (0x0000ffff9817e000)
libArchModelSw.so => /usr/lib/libArchModelSw.so (0x0000ffff98156000)
libNNArchPerf.so => /usr/lib/libNNArchPerf.so (0x0000ffff98131000)
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x0000ffff97f5a000)
libm.so.6 => /lib/libm.so.6 (0x0000ffff97eb0000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x0000ffff97e8b000)
libc.so.6 => /lib/libc.so.6 (0x0000ffff97d16000)
libpthread.so.0 => /lib/libpthread.so.0 (0x0000ffff97ce7000)
/lib/ld-linux-aarch64.so.1 (0x0000ffff9a074000)
libdl.so.2 => /lib/libdl.so.2 (0x0000ffff97cd1000)
I use grep with recursive to find vxBatchGemmNode in /usr/lib/ at NXP imx8mpevk, but get empty.
The version is Linux imx8mpevk 5.10.52-lts.
At VIM3Pro, vxBatchGemmNode is in libOpenVX.so.1.3.0, X86 is also.
The text was updated successfully, but these errors were encountered: