正直なところ、Yeppp! のようなライブラリを使用するのは初めてです。つまり、動的なランタイム選択を備えた SIMD ライブラリを意味します。最終的に、ライブラリは、実行されるプラットフォームやハードウェアに関係なく、最適な SIMD アセンブリ コードを選択することになっています。
これは私のプロジェクトで使用するのに最適なツールのように思えましたが、タイトルが示すように、Yeppp! とは言えません。セグメンテーション違反が発生することなく機能します。私が得たデバッグ情報もあまり役に立ちません。
私のシステム構成は次のとおりです。
Xubuntu 13.04 'raring' with Linux 3.8.0-31-generic x86_64
GCC 4.8.1 --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu .... etc, there were many more, but I chose the important ones
Code::Blocks IDE and GDB 7.5.91.20130417-cvs-ubuntu debugger through Code::Blocks
Intel Pentium(R) Dual-Core CPU T4400 @ 2.20GHz with SIMD instruction sets MMX, SSE, SSE2, SSSE3
CPUなどを記載しておくと、Yeppp!のやり方が重要かもしれません。問題の可能性がある正しいランタイムを選択します。
以下は、他の Yeppp! も試しましたが、私が使用している簡単なテスト コードです。さまざまなデータ型の関数、それはすべて同じセグメンテーション違反でした。32 や 64 などのさまざまなアライメントも試しましたが、それが問題であるとは思えません。
YEP_ALIGN(16) int32_t a[100], b[100], c[100];
//just test values
for( int x = 0; x < 100; x++ ) {
a[x] = x + 1;
b[x] = x - 1;
}
yepCore_Add_V32sV32s_V32s( a, b, c, 100 );
私はそれを特別なフラグなどでコンパイルしていないので、-m32や64はありません.Cでも同じことを試しましたが、同じ結果と基本的に同じアセンブリでしたので、言語ではありません.
Yeppp! で提供される Linux x86_64 libyeppp.so バイナリにリンクします。私は 64 ビット プラットフォームを実行しており、GCC が受け入れる唯一のディストリビューションであるためです。
呼び出しの分解は次のとおりです。
0x40179a lea rdx,[rbp-0x1a0]
0x4017a1 lea rsi,[rbp-0x330]
0x4017a8 lea rax,[rbp-0x4c0]
0x4017af mov ecx,0x64
0x4017b4 mov rdi,rax
0x4017b7 call 0x401550 <yepCore_Add_V32sV32s_V32s@plt>
これはかなり標準的に見えます。ただし、関数にステップインすると、次のようになります。
0x401550 jmp QWORD PTR [rip+0x205b7a] # 0x6070d0 <yepCore_Add_V32sV32s_V32s@got.plt>
0x401556 push 0x17
0x40155b jmp 0x4013d0
0x401550 jmp QWORD PTR [rip+0x205b7a] # 0x6070d0 <yepCore_Add_V32sV32s_V32s@got.plt>
0x401556 push 0x17
0x40155b jmp 0x4013d0
次に、jmp 0x4013d0
そのGDBを実行した後、にいくつかの指示を進めます
0 No function contains specified address.
次に、次の命令があり、NULL で実行しようとしないと仮定すると、セグメンテーション違反が発生します。それは私が得ることができた限りです。数回微調整した後、../sysdeps/x86_64/dl-trampoline.S
見つからなかったファイルを開こうとします。
Yeppp! それ自体が故障しています。Yeppp! の 1.0 リリース以来、ライブラリが作成されてから数日しか経っていないため、同様の問題や問題を抱えている人をまったく見つけることができませんでした。
PS: プログラミングについて公に質問したのはこれが久しぶりなので、これを解決するためにさらに情報が必要な場合は、喜んで提供します。