Skip to content
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

Segmentation fault - Illegal instruction #2172

Open
rbarreiros opened this issue May 20, 2024 · 1 comment
Open

Segmentation fault - Illegal instruction #2172

rbarreiros opened this issue May 20, 2024 · 1 comment

Comments

@rbarreiros
Copy link

Hello,

I'm having a weird problem, I'm using Visual Studio 2022 community edition, on windows 10, and I'm getting a seg fault on different places (both in whisper.dll) running the examples.

bench.exe throws an illegal exception on

Unhandled exception at 0x00007FFEDA3B25E7 (whisper.dll) in bench.exe: 0xC000001D: Illegal Instruction.

on ggml.c, line 1696 on ggml_vec_dot_f16

        sum[j] = GGML_F16_VEC_FMA(sum[j], ax[j], ay[j]);

Stack Trace

>	whisper.dll!ggml_vec_dot_f16(int n, float * s, unsigned __int64 bs, unsigned short * x, unsigned __int64 bx, unsigned short * y, unsigned __int64 by, int nrc) Line 1696	C
 	whisper.dll!ggml_compute_forward_mul_mat(const ggml_compute_params * params, ggml_tensor * dst) Line 12063	C
 	whisper.dll!ggml_compute_forward(ggml_compute_params * params, ggml_tensor * tensor) Line 17420	C
 	whisper.dll!ggml_graph_compute_thread(void * data) Line 19586	C
 	kernel32.dll!00007fff821c7344()	Unknown
 	ntdll.dll!00007fff828e26b1()	Unknown

Locals:


 | Name | Value | Type -- | -- | -- | --
 | ax | 0x0000003109bff000 {{m256_f32=0x0000003109bff000 {0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, ...} }, ...} | __m256[4]
 | ay | 0x0000003109bff0a0 {{m256_f32=0x0000003109bff0a0 {0.0348205566, 0.0622253418, 0.0681152344, -0.0391235352, ...} }, ...} | __m256[4]
 | bs | 0 | unsigned __int64
 | bx | 0 | unsigned __int64
 | by | 0 | unsigned __int64
 | i | 0 | int
 | j | 0 | int
 | n | 240 | int
 | np | 224 | const int
 | nrc | 1 | int
 | s | 0x0000003109bff3d0 {-107374176.} | float *
 | sum | 0x0000003109bfef60 {{m256_f32=0x0000003109bfef60 {0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, ...} }, ...} | __m256[4]
 | sumf | 0.0000000000000000 | double
 | x | 0x000001c167b424c0 {0} | unsigned short *
 | y | 0x000001c156ebb080 {10357} | unsigned short *

On command.exe (using SDL2 2.30.3 for VC (I tried bench.exe without SDL2, same result)

Unhandled exception at 0x00007FFEDED8C828 (whisper.dll) in command.exe: 0xC000001D: Illegal Instruction.

on regex standard header, void _Mark(_Elem _Ch)

template <class _Elem>
void _Mark(_Elem _Ch) { // mark character _Ch
    static_assert(is_unsigned_v<_Elem>, "_Elem must be unsigned");
    unsigned int _Wide = _Ch;
    _Chrs[_Wide >> _Bmp_shift] |= (1 << (_Wide & _Bmp_mask)); <--------------- seg fault
}

Stack Trace

>	whisper.dll!std::_Bitmap::_Mark<unsigned int>(unsigned int _Ch) Line 1315	C++
 	whisper.dll!std::_Builder<char const *,char,std::regex_traits<char>>::_Add_elts(std::_Node_class<char,std::regex_traits<char>> * _Node, short _Cl, bool _Negate) Line 2953	C++
 	whisper.dll!std::_Builder<char const *,char,std::regex_traits<char>>::_Add_named_class(short _Cl, bool _Negate) Line 2961	C++
 	whisper.dll!std::_Parser<char const *,char,std::regex_traits<char>>::_Do_ex_class(std::_Meta_type _End_arg) Line 4009	C++
 	whisper.dll!std::_Parser<char const *,char,std::regex_traits<char>>::_ClassAtom() Line 4081	C++
 	whisper.dll!std::_Parser<char const *,char,std::regex_traits<char>>::_ClassRanges() Line 4100	C++
 	whisper.dll!std::_Parser<char const *,char,std::regex_traits<char>>::_CharacterClass() Line 4152	C++
 	whisper.dll!std::_Parser<char const *,char,std::regex_traits<char>>::_Alternative() Line 4436	C++
 	whisper.dll!std::_Parser<char const *,char,std::regex_traits<char>>::_Disjunction() Line 4484	C++
 	whisper.dll!std::_Parser<char const *,char,std::regex_traits<char>>::_Compile() Line 4563	C++
 	whisper.dll!std::basic_regex<char,std::regex_traits<char>>::_Reset<char const *>(const char * _First, const char * _Last, std::regex_constants::syntax_option_type _Flags) Line 2037	C++
 	whisper.dll!std::basic_regex<char,std::regex_traits<char>>::basic_regex<char,std::regex_traits<char>><std::char_traits<char>,std::allocator<char>>(const std::string & _Str, std::regex_constants::syntax_option_type _Flags) Line 1853	C++
 	whisper.dll!tokenize(const whisper_vocab & vocab, const std::string & text) Line 3152	C++
 	whisper.dll!whisper_tokenize(whisper_context * ctx, const char * text, int * tokens, int n_max_tokens) Line 3827	C++
 	whisper.dll!whisper_full_with_state(whisper_context * ctx, whisper_state * state, whisper_full_params params, const float * samples, int n_samples) Line 5440	C++
 	whisper.dll!whisper_full(whisper_context * ctx, whisper_full_params params, const float * samples, int n_samples) Line 6195	C++
 	command.exe!transcribe(whisper_context * ctx, const whisper_params & params, const std::vector<float,std::allocator<float>> & pcmf32, const std::string & grammar_rule, float & logprob_min, float & logprob_sum, int & n_tokens, __int64 & t_ms) Line 194	C++
 	command.exe!process_general_transcription(whisper_context * ctx, audio_async & audio, const whisper_params & params) Line 604	C++
 	command.exe!SDL_main(int argc, char * * argv) Line 772	C++
 	command.exe!main_getcmdline() Line 80	C
 	command.exe!invoke_main() Line 79	C++
 	command.exe!__scrt_common_main_seh() Line 288	C++
 	command.exe!__scrt_common_main() Line 331	C++
 	command.exe!mainCRTStartup(void * __formal) Line 17	C++
 	kernel32.dll!00007fff821c7344()	Unknown
 	ntdll.dll!00007fff828e26b1()	Unknown

Locals

  | Name | Value | Type -- | -- | -- | --
  | this | 0x0000018e91d74cf0 {_Chrs=0x0000018e91d74cf0 "" } | std::_Bitmap *
  | _Ch | 65 | unsigned int
  | _Wide | 65 | unsigned int

Completely oblivious to what's going on, I'm positive they're related, but I can't figure out why. This is a fresh git clone, only used SDL2 for command.exe, bench.exe was tested without SDL2 complete clean rebuild, same result.... Any idea on what's the issue, or how can I better debug this ?

@rbarreiros
Copy link
Author

I found the issue.... I would assume CMake would check for processor capabilities... apparently not, I found it when playing with the same project on my linux workstation, and having segfaults when compiled with cmake, and no segfault when compile with Makefile.

Apparently, the top level makefile, checks cpu capabilities and enables/disables depending on their presence, while CMake doesn't check the options. The CPU where I tested this doesn't support AVX/AVX2, it's an I7-3770K, and I never thought about checking capabilities myself, maybe CMake should check for their presence and warn about it, since one could want to compile anyway to deploy on another CPU.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant