2013-10-09 3 views
0

У меня есть вопрос об оптимизации файла сборки, который я получил из .cpp-файла! Это мой hw из класса компьютерных организаций. hw выглядит следующим образом. Мне нужно написать программу, которая вычисляет произведение точек двух векторов и сгенерирует файл .asm. Затем я должен оптимизировать файл .asm и сравнить время выполнения с помощью QueryPerformanceCounter в Visual Studio. Я сгенерировал файл .asm и нашел в нем часть цикла. Я пытаюсь изучить базовый язык ассемблера для оптимизации сборки. Однако я не знаю, как выполнить файл .asm. Мой профессор упомянул о связи между .cpp-файлом и сборкой, но не знаю, что это значит. Любая помощь будет назначена.Оптимизация сборки для файла .cpp

+5

Ваш профессор хочет, чтобы вы настроили код сборки, сгенерированный на C++, и не дали вам никаких указаний по сборке asm? Похоже на худший класс в существовании. –

+0

Не пробовал, но появился быстрый поиск [этот учебник] (http://www.codeproject.com/Articles/271627/Assembly-Programming-with-Visual-Studio-2010-2012) на codeproject, который на наименее * выглядит * полезным. Если ваш профессор не настаивает на сборке и подключении в исходном файле внешней сборки, вы также можете попробовать встроенную сборку. – us2012

+0

Он рассказал о том, как сгенерировать код сборки, но не показал, как это сделать. Я решил создать код сборки, и теперь проблема заключается в том, чтобы связать файл .cpp и оптимизированный ассемблерный код. – eChung00

ответ

0

Если я понимаю, что ваш профессор спрашивает, что вам нужно сделать это шаги:

  1. Создать функцию в C++ для вычисления скалярного произведения.

  2. В main(), вызовите эту функцию в цикле много тысяч раз, скажем, 5000.

  3. Добавьте вызов QueryPerformanceCounter до и после этого цикла.

  4. Запустите программу и отметьте общее время, затраченное на вызов вашей функции 5000 раз.

  5. Используйте компилятор для создания сборки для вашей функции. Сохраните эту сборку в файле .asm и затем оптимизируйте ее.

  6. Соберите файл .asm с соответствующим ассемблером, чтобы сгенерировать файл .obj.

  7. Скомпилируйте ваш .cpp-файл и свяжите его с файлом .obj, сгенерированным на шаге выше, чтобы создать файл .exe.

  8. Запустите программу еще раз и обратите внимание на общее время, которое требуется для вызова вашей оптимизированной функции 5000 раз.

  9. Сравните два измерения (и обратите внимание, как компилятор, вероятно, лучше оптимизирован, чем вы).

Вы не говорите, какую компилятор, ассемблер или аппаратную платформу вы используете, поэтому я не могу предоставить более подробную информацию.

+0

Спасибо за комментарий. Я использую визуальную студию на окнах. Шаги, которые вы предложили, выглядят правильно, но я хочу знать, как это сделать. Я сделал до пятого шага. После этого я не знаю, как сгенерировать файл .obj с визуальной студией и связать файл .cpp с .obj-файлом! – eChung00

+0

Вы не можете сгенерировать файл .obj с помощью Visual Studio. Для этого нужен ассемблер. Ваш профессор не предоставил или рекомендовал использовать ассемблер? Предполагая, что вы находитесь на платформе x86, вы можете найти список ассемблеров [здесь] (http://en.wikipedia.org/wiki/Comparison_of_assemblers), некоторые из которых являются свободными и открытыми. Прокрутите страницу до "x86". –

+0

Я действительно не вижу, как этот ответ помогает вообще. http://goo.gl/gYrx2P –

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