问题遇到的现象和发生背景
MATLAB编译MatConvNet报错:error: cannot convert '__v16qi' to '__vector(8) short int'
问题相关代码,请勿粘贴截图
使用vl_compilenn命令进行编译
MinGW 编译器下载:https://jmeubank.github.io/tdm-gcc/articles/2020-03/9.2.0-release
运行结果及报错内容
错误使用 mex
In file included from C:/TDM-GCC-64/lib/gcc/x86_64-w64-mingw32/10.3.0/include/immintrin.h:35,
from C:/TDM-GCC-64/lib/gcc/x86_64-w64-mingw32/10.3.0/include/x86intrin.h:32,
from D:\OneDrive\文档\MATLAB\FBPConvNet-master\matconvnet-1.0-beta23\matlab\src\bits\impl\normalize_cpu.cpp:23:
C:/TDM-GCC-64/lib/gcc/x86_64-w64-mingw32/10.3.0/include/tmmintrin.h: In function '__m128i _mm_maddubs_epi16(__m128i, __m128i)':
C:/TDM-GCC-64/lib/gcc/x86_64-w64-mingw32/10.3.0/include/tmmintrin.h:114:73: note: use '-flax-vector-conversions' to permit
conversions between vectors with differing element types or numbers of subparts
114 | return (__m128i) __builtin_ia32_paddusw128 ((__v16qi)__X, (__v16qi)__Y);
| ^
C:/TDM-GCC-64/lib/gcc/x86_64-w64-mingw32/10.3.0/include/tmmintrin.h:114:47: error: cannot convert '__v16qi' to '__vector(8)
short int'
114 | return (__m128i) __builtin_ia32_paddusw128 ((__v16qi)__X, (__v16qi)__Y);
| ^~~~~~~~~~~~
| |
| __v16qi
<built-in>: note: initializing argument 1 of '__vector(8) short int __builtin_ia32_paddusw128(__vector(8) short int,
__vector(8) short int)'
C:/TDM-GCC-64/lib/gcc/x86_64-w64-mingw32/10.3.0/include/tmmintrin.h: In function '__m128i _mm_sign_epi8(__m128i, __m128i)':
C:/TDM-GCC-64/lib/gcc/x86_64-w64-mingw32/10.3.0/include/tmmintrin.h:150:43: error: cannot convert '__v16qi' to '__vector(8)
char'
150 | return (__m128i) __builtin_ia32_psignb ((__v16qi)__X, (__v16qi)__Y);
| ^~~~~~~~~~~~
| |
| __v16qi
<built-in>: note: initializing argument 1 of '__vector(8) char __builtin_ia32_psignb(__vector(8) char, __vector(8) char)'
C:/TDM-GCC-64/lib/gcc/x86_64-w64-mingw32/10.3.0/include/tmmintrin.h: In function '__m128i _mm_sign_epi16(__m128i, __m128i)':
C:/TDM-GCC-64/lib/gcc/x86_64-w64-mingw32/10.3.0/include/tmmintrin.h:156:43: error: cannot convert '__v8hi' to '__vector(4) short
int'
156 | return (__m128i) __builtin_ia32_psignw ((__v8hi)__X, (__v8hi)__Y);
| ^~~~~~~~~~~
| |
| __v8hi
<built-in>: note: initializing argument 1 of '__vector(4) short int __builtin_ia32_psignw(__vector(4) short int, __vector(4)
short int)'
C:/TDM-GCC-64/lib/gcc/x86_64-w64-mingw32/10.3.0/include/tmmintrin.h: In function '__m128i _mm_sign_epi32(__m128i, __m128i)':
C:/TDM-GCC-64/lib/gcc/x86_64-w64-mingw32/10.3.0/include/tmmintrin.h:162:43: error: cannot convert '__v4si' to '__vector(2) int'
162 | return (__m128i) __builtin_ia32_psignd ((__v4si)__X, (__v4si)__Y);
| ^~~~~~~~~~~
| |
| __v4si
<built-in>: note: initializing argument 1 of '__vector(2) int __builtin_ia32_psignd(__vector(2) int, __vector(2) int)'
C:/TDM-GCC-64/lib/gcc/x86_64-w64-mingw32/10.3.0/include/tmmintrin.h: In function '__m128i _mm_alignr_epi8(__m128i, __m128i,
int)':
C:/TDM-GCC-64/lib/gcc/x86_64-w64-mingw32/10.3.0/include/tmmintrin.h:187:44: error: cannot convert '__m128i' to '__vector(1) long
long int'
187 | return (__m128i) __builtin_ia32_palignr ((__v2di)__X,
| ^~~~~~~~~~~
| |
| __m128i
<built-in>: note: initializing argument 1 of '__vector(1) long long int __builtin_ia32_palignr(__vector(1) long long int,
__vector(1) long long int, int)'
C:/TDM-GCC-64/lib/gcc/x86_64-w64-mingw32/10.3.0/include/tmmintrin.h: In function '__m128i _mm_abs_epi8(__m128i)':
C:/TDM-GCC-64/lib/gcc/x86_64-w64-mingw32/10.3.0/include/tmmintrin.h:211:57: error: too few arguments to function '__vector(16)
char __builtin_ia32_pavgb128(__vector(16) char, __vector(16) char)'
211 | return (__m128i) __builtin_ia32_pavgb128 ((__v16qi)__X);
| ^
C:/TDM-GCC-64/lib/gcc/x86_64-w64-mingw32/10.3.0/include/tmmintrin.h: In function '__m128i _mm_abs_epi16(__m128i)':
C:/TDM-GCC-64/lib/gcc/x86_64-w64-mingw32/10.3.0/include/tmmintrin.h:217:57: error: too few arguments to function '__vector(8)
short int __builtin_ia32_pmaxsw128(__vector(8) short int, __vector(8) short int)'
217 | return (__m128i) __builtin_ia32_pmaxsw128 ((__v8hi)__X);
| ^
C:/TDM-GCC-64/lib/gcc/x86_64-w64-mingw32/10.3.0/include/tmmintrin.h: In function '__m128i _mm_abs_epi32(__m128i)':
C:/TDM-GCC-64/lib/gcc/x86_64-w64-mingw32/10.3.0/include/tmmintrin.h:223:44: error: cannot convert '__v4si' to '__vector(2) long
long int'
223 | return (__m128i) __builtin_ia32_pand128 ((__v4si)__X);
| ^~~~~~~~~~~
| |
| __v4si
<built-in>: note: initializing argument 1 of '__vector(2) long long int __builtin_ia32_pand128(__vector(2) long long int,
__vector(2) long long int)'
出错 vl_compilenn>mex_compile (line 530)
mex(mopts{:}) ;
出错 vl_compilenn (line 491)
mex_compile(opts, srcs{i}, objfile, flags.mexcc) ;
我的解答思路和尝试过的方法
尝试理解__v16qi和__vector(8) short int分别代表什么数组,但还是不懂,也不知道怎么改