Я пытаюсь отлаживать инструкции AVX-512 на эмулируемом процессоре, используя Intel® Software Development Emulator, но он не работает должным образом после установки точки останова. Я следил за этим сообщением в блоге: Отладка эмулируемого кода в Linux*
В окне №1:
~$ g++ -g -O0 -mavx512f main.cpp -o main # compile main.cpp file
~$ sde -debug -- ./main # enable debugging
Application stopped until continued from debugger.
Start GDB, then issue this command at the (gdb) prompt:
target remote :54105
В окне №2
# run debugger
~$ gdb ./main
GNU gdb (Ubuntu 9.2-0ubuntu1~20.04) 9.2
Copyright (C) 2020 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from ./main...
# set target "target remote :portnumber"
(gdb) target remote :54105
Remote debugging using :54105
warning: remote target does not support file transfer, attempting to access files from local filesystem.
Reading symbols from /lib64/ld-linux-x86-64.so.2...
(No debugging symbols found in /lib64/ld-linux-x86-64.so.2)
0x00007fa7bbbcc100 in ?? () from /lib64/ld-linux-x86-64.so.2
# suspend program at main function
(gdb) break main
Breakpoint 1 at 0x2c9c: file /home/borrow/source/repos/se-test/main.cpp, line 165.
# start program execution from the beginning of the program
(gdb) run
The "remote" target does not support "run". Try "help target" or
"continue".
# step to next line of code
(gdb) step
Cannot find bounds of current function
# continue executing until next break point
(gdb) c
Continuing.
warning: Probes-based dynamic linker interface failed.
Reverting to original interface.
[Inferior 1 (Remote target) exited normally]
В окне №2: как видите
gdb run
должен запустить программу, но она не работает. gdb c
также должен работать до следующей точки останова, но выполняет программу и завершается. Эта команда дает мне следующее предупреждающее сообщение:
предупреждение: сбой интерфейса динамического компоновщика на основе зондов.
В окне №1: Программа запускается и завершается (без остановки).
Код программы выглядит так:
// main.cpp
#include <immintrin.h>
const int N=64;
int64_t srcA[N] = {0};
int64_t srcB[N] = {0};
int64_t dst[N] = {0};
void foo()
{
__m512i result,B,C;
for ( int i=0; i<N; i+=8 ){
B = _mm512_loadu_si512(&srcA[i]);
C = _mm512_loadu_si512(&srcB[i]);
result = _mm512_add_epi64(B,C);
_mm512_storeu_si512(&dst[i], result);
}
}
int main() {
...
foo();
...
}
Я попытался запустить код AVX2 без эмулятора SDE, используя gdb, и это сработало. Сначала я запускаю его на эмулированном процессоре с SDE, он не работает. Как я могу решить эту проблему?
gdb ./main
, чтобы символы появились сразу, до подключения к пульту? - person Peter Cordes   schedule 27.04.2021alignas(64)
для ваших массивов; AVX-512 выигрывает от выравнивания гораздо больше, чем AVX2. (Например, замедление на 20 % из-за неправильного выравнивания по сравнению с всего парой % с AVX2 из-за зацикливания массива, который не попадает в кэш, в DRAM.) - person Peter Cordes   schedule 27.04.2021warning: remote target does not support file transfer, attempting to access files from local filesystem.
, похоже, указывает на то, что GDB не знал, какой файл отлаживать, пока не подключился к удаленному. IDK, если бы у вас были другие результаты, если бы вы сообщили GDB, какой файл является частью запуска GDB, поэтому вы можете установить точки останова. Конечно, на самом деле вы не запускаете программу AVX-512 внутри GDB, вы по-прежнему используете командуremote
, но я думаю, вы уже сказали ей устанавливать точки останова. - person Peter Cordes   schedule 27.04.2021gdb ./a.out
для установки точек останова перед использованиемtarget remote
не помогает и даже не устраняет предупреждение о передаче файлов. О, так много для этого предположения. Я почти уверен, что раньше это работало, что в прошлом я использовал SDE для одношагового кода AVX-512. - person Peter Cordes   schedule 28.04.2021