工具/软件:TI C/C++编译器
我已经编写了测试应用程序(.c)、其中调用 VCOP 内核(.k)调用以添加2D 阵列。 该代码针对 EVE 内核进行编程。
在使用主机仿真(使用 g++ 5.4.0编译)测试上述代码时、一切都正常。 但是、当我测试使用 g++ 7.5编译器编译的相同代码时、它会在数据被加载到矢量寄存 器的行上放置分段故障、即 Vin1 = in1_ptr[Addr];请为该问题提供解决方案建议。
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具/软件:TI C/C++编译器
我已经编写了测试应用程序(.c)、其中调用 VCOP 内核(.k)调用以添加2D 阵列。 该代码针对 EVE 内核进行编程。
在使用主机仿真(使用 g++ 5.4.0编译)测试上述代码时、一切都正常。 但是、当我测试使用 g++ 7.5编译器编译的相同代码时、它会在数据被加载到矢量寄存 器的行上放置分段故障、即 Vin1 = in1_ptr[Addr];请为该问题提供解决方案建议。
以下代码为 test_app.c
#include //#include #include #if VCOP_HOST_EMIENSE //仅在主机仿真的情况 下#include "sample_vcop_array_add_uns_short_kernel.k" #else #include 使用命名空间 std; extern "C"{ void sample_eve_array_add_uns_short (__vptr_uint16 in_arra1、 __vptr_uint16 in_arra2, _vptr_uint16 out_arr、 unsigned short w、 无符号短整型 h ); } #endif #define size 32 #pragma DATA_SECTION ("AData") uint16_t array1[size]={1、2、4、5、8、9、4、6、5、6、1 、5、7、8、4、4、6、3、6、2、4、2、2、4、2、2、4、2、2、4、2、2、4、2、2、2、4、2、4、2、2、1、2、4、2、1、4、2、2、2、1、4、2、2、1、2、2、1、1、2、2、4、2、2、2、2、1、2、1、1、1、2、1、4、2、2、2、2、1、1、2、1、1、1、4、4、2、1、1、1、2、1、1、4、2、1、1、2、2、1、2、2、1、1、1、2、1、1、1、1 //内核调用 #if VCOP_HOST_emulation for (int i=0;i <<"="" "<<<"="" +="" "<<<"="<<
下面的代码是 kernel_code.k
" cpp;="" fontsize:="" 100;="" first-line:="" 1;="" "="">#if VCOP_HOST_EMUulation
#include
#include
#endif
#define ELEMSZ sizeof (* in1_ptr)
#define VECTORSZ (VCOP_SIMD _width* ELEMSZ)
void sample_eve_array_add_uns_short
(
__vptr_uint16 in1_ptr、 //输入1数据指针
__vptr_uint16 in2_ptr, //输入2数据指针
__vptr_uint16 optr, //输出数据指针
无符号短宽度、 //每行的宽度
无符号短高度 //每行的高度
)
{__vector
Vin1; // input1
__vector Vin2; // input2
__vector Vout; //输出
对于(int I1 = 0;I1 <高度;I1++)
{
对于(int I2 = 0;I2 <宽度/VCOP_SIMD 宽度;I2++)
{
_agen 地址;
地址= I1*width*ELEMSZ +I2*VECTORSZ;
Vin1 = in1_ptr[Addr];
Vin2 = IN2_PTR[Addr];
输出电压 = Vin1 + Vin2;
OPTR[Addr]=输出电压;
}
}
谢谢你。
[引用 user="Tejashwini N"]使用 g++ 5.4.0[/quot]编译
GCC 5.1.0 < 6.1.0:libstdc++.so.6.0.21
GCC 5.1.0 < 6.1.0 :GLIBCXX_3.4.21、CXXABI 1.3.9
[引用 user="Tejashwini N"]使用 g++ 7.5[/引用]编译
GCC 7.2.0 < 8.1.0:libstdc++.so.6.0.24
GCC 7.2.0 < 8.1.0 :GLIBCXX_3.4.24、CXXABI
看起来像是 ABI 版本问题。
我无法重现此问题。
>/linux/bin/g ++-版本 g++(GCC) 7.5.0 版权所有(C) 2017 Free Software Foundation、Inc. 这是免费软件;请参阅复印条件的来源。 不 提供任何保证;甚至不提供适销性或特定用途适用性。 >./linux/bin/g ++-DVCOP_HOST_EMUulation a.c >./a.out 1 + 1 = 2 + 2 = 4 ... >ldd a.out linux-vdso.so.1 =>(0x00007fff33dda000) libstdc++.so.6 =>/usr/lib/x86_64-linux-gnu/libstdc /lib/x86_64-linux-gnu/libgcc_s.so.1 /lib/x86_64-linux-gnu/libc.so.6 ++.so.6 (0x00007f27a0cb000) libm.so.6 =>/lib/x86_64-linux-gnu/libm.so.6 (0x00007f27a09b5000) libgcc_so.6 (0x00007f2764=0x00002764.so.000)libm.so-(0x00007f2764.so.000=0x00007f2764=0x00002764.so-0721.so.dlc.so-000=0x0000.so-0721.so-0721.s1.s1.s1.s1.s1.s1.s1.s1.so-0721.s1.s1.s1.
我还使用 GCC 的清除器运行了生成的程序、以进行未定义的行为和地址检查、并且没有遇到可能导致分段故障的问题。
我使用了整个程序、并使用在线的"Compiler Explorer"运行了 g++-7.5.0、网址 为:https://godbolt.org/z/GE3jh7
这利用了我们最近发运的 vcop_host_emulation.h。 您要使用的是这个吗?