2014-10-01 6 views
2

Я новичок в переполнении стека и надеюсь получить некоторые советы о том, как подойти к проблеме, которую я испытываю. Имея небольшой опыт сборки, я испытываю трудные времена, рассуждая о характеристиках производительности за штуку кода, который у меня есть. Код написан на C на архитектуре PowerPC (старый Apple G5). Запустив код с помощью O3 и некоторой другой оптимизации, код на самом деле работает примерно на 30% медленнее, чем с O3. Разница между кодом сборки сводится к нескольким инструкциям (например, 3-4) и их расположению.Анализ производительности ассемблерного кода

Моя проблема связана с моей неопытной работой. У меня возникли трудности с пониманием того, почему производительность сборки хуже работает на корпусе и лучше в другом. Инструменты, такие как oprofile, здесь не очень полезны, и, глядя на официальную учебную инструкцию IBM, нет никакой информации (по крайней мере, о том, что я видел, по крайней мере, по крайней мере), о характеристиках производительности perticular. Как можно подойти к таким проблемам анализа? Как уже упоминалось, у меня мало опыта в анализе сборки и трубопровода, и поэтому я был бы признателен за любые предложения о том, как обычно подходят такие проблемы. Есть ли инструменты, которые могут мне помочь?

Кроме того, меня не очень интересует, почему компилятор сгенерировал код так, как он сделал (и в некотором смысле мне неинтересно, как работает исходный код C), меня действительно интересует только понимание анализ производительности сборки.

Update

Я просто хочу, чтобы дать краткую справку о проблеме - с помощью тренажера PowerPC трубопровода от IBM можно было увидеть, что именно произошло в трубопроводе и, таким образом, стало намного легче понять проблема (это оказалось проблемой, связанной с заполнением очереди заявок и формированием групп отправки). Я предлагаю всем, кто ищет похожие проблемы, использовать симулятор конвейера, он поможет вам в понимании производительности вашей программы! Из-за сложности мощных машин, кажется, очень сложно проанализировать эксплуатационные характеристики программы без использования симулятора трубопровода. Это, вероятно, означает, что для того, чтобы действительно понять, как ваша программа влияет на производительность, необходимо понять архитектуру, в которой выполняется код.

+2

Это большая тема и вопрос слишком широк для StackOverflow как это стенды - попробуйте выбрать небольшой конкретный пример, затем опубликуйте исходный код и код сборки и задайте очень конкретный вопрос. –

+0

Я понимаю, что это большой и широкий предмет, но любые указания на все, что может помочь мне подойти к проблеме, приветствуются. Я попытаюсь добавить примерный код сборки завтра – YoungPadawan

+0

Каковы инструкции, которые кажутся медленнее? – Dko

ответ

1

[...] Как уже упоминалось, у меня мало опыта с анализом сборки и трубопровода, и поэтому я был бы признателен за любые предложения о том, как обычно подходят такие проблемы. [...]

Я бы предложил следующие материалы и примеры использования. Несмотря на то, что они основаны на IBM POWER7 (+), идеи и объяснения там могут дать вам некоторый контекст:

"Commonly Used Metrics for Performance Analysis – POWER7" [0] 
    (First, this paper briefly covers the POWER7 execution pipeline and the PMU hardware. ...) 

"Comprehensive PMU Event Reference – POWER7" [0] (Performance Monitor 
Unit instrumentation. These events can be measured using tools 
like...) 

"Evaluate performance for Linux on POWER" (developerWorks) (Learn to evaluate Linux on POWER® performance issues that focus on compiled language (such as C or C++) environments...) 

"Java performance improvements seen on POWER7+" (PowerLinux Community) 
    (The processors feature a built-in Performance Monitoring Unit (PMU), designed to provide instrumentation for performance monitoring, workload characterization, and code analysis....) 

Source

Смежные вопросы