Подготовка и сборка для профилирования
Выполните следующие шаги для подготовки структуры дерева проекта в режиме «песочницы», чтобы иметь больше гибкости при изменении и создании файлов.
Шаг 1. Копирование приложения из дерева SDK
Работа с деревом в режиме «песочницы» означает, что у вас есть собственная копия проекта в доступном месте (например, в домашнем каталоге). Для этого выполните команду cp -R
/opt/cell/sdk/demos/FFT16M ~/.
Шаг 2. Подготовка make-файла
Перейдите к созданной структуре проекта и найдите make-файлы. Вы должны найти три таких файла:
- ~/FFT16M/Makefile
- ~/FFT16M/ppu/Makefile
- ~/FFT16M/spu/Makefile
Затем необходимо внести несколько изменений в make-файлы для предотвращения попыток с их стороны установить исполняемые файлы обратно в дерево SDK. Кроме того, добавим необходимые флаги компиляции для данных профилирования. В листинге 1 приведен пример изменения файла ~/FFT16M/ppu/Makefile.
Листинг 1. Изменение файла ~/FFT16M/ppu/Makefile для gcc
#######################################################################
## Target
#######################################################################
#
PROGRAM_ppu= fft
#######################################################################
## Objects
#######################################################################
#
IMPORTS = ../spu/fft_spu.a -lspe2 -lpthread -lm -lnuma
#INSTALL_DIR= $(EXP_SDKBIN)/demos
#INSTALL_FILES= $(PROGRAM_ppu)
LDFLAGS_gcc = -Wl,-q
CFLAGS_gcc = -g
#######################################################################
## buildutils/make.footer
#######################################################################
#
ifdef CELL_TOP
include $(CELL_TOP)/buildutils/make.footer
else
include ../../../../buildutils/make.footer
endif
|
Обратите внимание, что:
- Директивы установки закомментированы.
- Не требуется других изменений, за исключением описанных.
- Имеются специфические изменения, зависящие от того, какой компилятор используется – gcc или xlc.
Теперь взгляните на листинг 2.
Листинг 2. Изменение файла ~/FFT16M/ppu/Makefile для gcc
#######################################################################
## Target
#######################################################################
#
PROGRAM_ppu= fft
#######################################################################
## Objects
#######################################################################
#
PPU_COMPILER = xlc
IMPORTS = ../spu/fft_spu.a -lspe2 -lpthread -lm -lnuma
#INSTALL_DIR= $(EXP_SDKBIN)/demos
#INSTALL_FILES= $(PROGRAM_ppu)
LDFLAGS_xlc = -Wl,-q
CFLAGS_xlc = -g
#######################################################################
## buildutils/make.footer
#######################################################################
#
ifdef CELL_TOP
include $(CELL_TOP)/buildutils/make.footer
else
include ../../../../buildutils/make.footer
endif
|
В код добавлены флаги компиляции -g и
-Wl,-qдля предотвращения перекомпоновки и добавления информации о номерах строк в выходной исполняемый файл. В листинге 3 приведен файл ~/FFT16M/spu/Makefile, измененный для компилятора gcc. В листинге 4 приведен файл ~/FFT16M/spu/Makefile, измененный для компилятора xlc.
Листинг 3. Изменение файла ~/FFT16M/spu/Makefile для gcc
#######################################################################
## Target
#######################################################################
#
PROGRAMS_spu:= fft_spu
LIBRARY_embed:= fft_spu.a
#######################################################################
## Local Defines
#######################################################################
#
CFLAGS_gcc:= -g --param max-unroll-times=1 # needed to keep size of
program down
LDFLAGS_gcc = -Wl,-q -g
#######################################################################
## buildutils/make.footer
#######################################################################
#
ifdef CELL_TOP
include $(CELL_TOP)/buildutils/make.footer
else
include ../../../../buildutils/make.footer
endif
|
Листинг 4. Изменение файла ~/FFT16M/spu/Makefile для xlc
#######################################################################
## Target
#######################################################################
#
SPU_COMPILER = xlc
PROGRAMS_spu:= fft_spu
LIBRARY_embed:= fft_spu.a
#######################################################################
## Local Defines
#######################################################################
#
CFLAGS_xlc:= -g -qnounroll -O5
LDFLAGS_xlc:= -O5 -qflag=e:e -Wl,-q -g
#######################################################################
## buildutils/make.footer
#######################################################################
#
ifdef CELL_TOP
include $(CELL_TOP)/buildutils/make.footer
else
include ../../../../buildutils/make.footer
endif
|
Перед окончательной сборкой убедитесь, что используется компилятор по умолчанию. Для этого выполните команду
/opt/cell/sdk/buildutils/cellsdk_select_compiler [gcc|xlc].
Теперь можно приступать к сборке при помощи команды
cd ~/FFT16M ; CELL_TOP=/opt/cell/sdk make.
|