0 / 0 / 0
Регистрация: 12.09.2009
Сообщений: 31
|
|
1 | |
создание функции08.10.2009, 14:45. Показов 2948. Ответов 17
0
|
08.10.2009, 14:45 | |
Ответы с готовыми решениями:
17
создание функции Создание функции
Создание функции |
![]() ![]() 8384 / 3616 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
|
||||||
08.10.2009, 15:30 | 2 | |||||
допустим максимальный элемент матрицы A[169][164] и матрицы B[1055][6216]
Обмен будет таким
2
|
2835 / 1644 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
|
|
08.10.2009, 16:10 | 3 |
0
|
![]() ![]() 8384 / 3616 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
|
|
08.10.2009, 16:15 | 4 |
Somebody, я понимаю, но в С и С++ работает. Это вот в C#, Java и J# убрали такую возможность
0
|
2835 / 1644 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
|
|
08.10.2009, 16:21 | 5 |
Это по сути из разряда i=i++, что в i? Возьмёт и заработает не так с каким-нибудь компилятором.
0
|
146 / 146 / 32
Регистрация: 26.10.2008
Сообщений: 782
|
|
08.10.2009, 16:23 | 6 |
0
|
![]() ![]() 8384 / 3616 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
|
|
08.10.2009, 16:43 | 7 |
Somebody, проверено на Dev-C++, MSVS 6.0/2003/2005/2008/2010, BC 3.1/6.0. Мне кажется, вероятность такого события стремится к 0 или компилятор какой-то ручной сборки. Хотя возможно ты и прав, gcc на такое способен, утверждать не буду.
0
|
эволюционирую потихоньку
468 / 466 / 91
Регистрация: 30.06.2009
Сообщений: 1,401
|
|
08.10.2009, 17:05 | 8 |
здорово, сами придумали или из какой-нить литературы? возьму на заметку.
по затратам тактов есть информация для этого трюка. в плане, что быстрее стандартно поменять две перменные местами, используя буферную третью или вот таким способом? и на сколько?
0
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
|
|
08.10.2009, 17:49 | 9 |
Вот инструкции процессора для первого способа первый
00401414 |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4] 00401417 |. 8945 F4 MOV DWORD PTR SS:[EBP-C],EAX 0040141A |. 8B45 F8 MOV EAX,DWORD PTR SS:[EBP-8] 0040141D |. 8945 FC MOV DWORD PTR SS:[EBP-4],EAX 00401420 |. 8B45 F4 MOV EAX,DWORD PTR SS:[EBP-C] 00401423 |. 8945 F8 MOV DWORD PTR SS:[EBP-8],EAX А вот для второго. 00401414 |. 8B55 F8 MOV EDX,DWORD PTR SS:[EBP-8] 00401417 |. 8D45 FC LEA EAX,DWORD PTR SS:[EBP-4] 0040141A |. 3110 XOR DWORD PTR DS:[EAX],EDX 0040141C |. 8B55 FC MOV EDX,DWORD PTR SS:[EBP-4] 0040141F |. 8D45 F8 LEA EAX,DWORD PTR SS:[EBP-8] 00401422 |. 3110 XOR DWORD PTR DS:[EAX],EDX 00401424 |. 8B55 F8 MOV EDX,DWORD PTR SS:[EBP-8] 00401427 |. 8D45 FC LEA EAX,DWORD PTR SS:[EBP-4] 0040142A |. 3110 XOR DWORD PTR DS:[EAX],EDX Видно, что второй способ пусть ненамного, но дольше. Действительно, при использовании дополнительной переменной переменной получается 1) Кладём переменную в регистр 2) Меняем И так 3 раза, итого 6 инструкций Во втором способе 1) Кладём переменную в регистр 2) Кладём адрес второй переменной в региср 3) Побитовая команда XOR И так 3 раза. Всего 9 команд
1
|
эволюционирую потихоньку
468 / 466 / 91
Регистрация: 30.06.2009
Сообщений: 1,401
|
|
08.10.2009, 19:37 | 10 |
всегда либо производительность, либо объём используемой памяти
![]() однако, все используемые в данных преобразованиях команды процессора выполняются за одинаковое количество тактов? ещё к примеру ускорения работы for(i=N; --i>=0 ![]() выполняется быстрее чем for(i=0; i<N; i++) из-за сравнения в первом случае перменной с нулём, а не с N. Проявляется хорошо при больших N. и второй вопрос, 1 час назад поставил наконец вижуал 2008, где в нём можно нструкции процессора посмотреть?
0
|
![]() ![]() 8384 / 3616 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
|
|
08.10.2009, 19:57 | 11 |
ставишь брейкпоинт - вроде F9. Потом при запуске когда доходит до метки правой кнопкой - Go To Disassembly или как-то так
0
|
эволюционирую потихоньку
468 / 466 / 91
Регистрация: 30.06.2009
Сообщений: 1,401
|
|
08.10.2009, 20:05 | 12 |
не совсем то мне бы хотелось. некоторые программные продукты (скажем IAR) позволяют выводить в фаил полную расшифровку кода с комментариями и объёмом используемых ресурсов как каждой отдельной функцией, так и всем кодом. очень удобно при отладке, сразу видно где неоптимально реализованно чего-нить.
Хотелось бы узнать есть такая возможность в вижуале и где? давно интересно, а спросить стеснялся ![]()
0
|
0 / 0 / 0
Регистрация: 12.09.2009
Сообщений: 31
|
|
10.10.2009, 14:57 [ТС] | 13 |
есть ещё у кого нибудь версии как это сделать?
0
|
![]() 2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
|
||||||
10.10.2009, 17:03 | 14 | |||||
К сожалению, это заблуждение. Современные процессоры имеют два конвейера выполнения и скорость исполнения кода определяется не только числом инструкций, но и возможностью их распараллеливания (спаривания, pairing) в конвейерах.
Конкретно для твоего примера, обе последовательности инструкций выполняются за 6 тактов (инструкции MOV и LEA во втором варианте кода независимы и поэтому выполняются за 1 такт в конвейерах U и V). Первый же вариант кода по Стандарту языка является, кроме того, и небезопасным, порождая Undefined behavior. И то, что наблюдаемые эффекты от этого UB совпадают с "желаемыми" - ничего не значит. Это просто чистое везение. Неизвестно, что произойдет при переносе кода на другой компилятор (например, через N лет на какой-нибудь VC++ 2020 ![]() Добавлено через 18 минут PS: вот любопытства для прогнал тестовую программу под Intel VTune Perfomance Analyzer. Компилятор MSVC++ 2005, Release, оптимизация по скорости выполнения. Результаты:
2
|
эволюционирую потихоньку
468 / 466 / 91
Регистрация: 30.06.2009
Сообщений: 1,401
|
||||||
11.10.2009, 09:25 | 15 | |||||
чтобы окончательно просветить этот вопрос: первый вариант это
отталкиваюсь от
0
|
![]() 2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
|
||||||
11.10.2009, 10:37 | 16 | |||||
Нет, первый вариант - имелась в виду куча XOR'ов (я, похоже, где-то тут запутался....? ):
1
|
2835 / 1644 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
|
|
11.10.2009, 13:07 | 17 |
Если не ошибаюсь, два конвейера (U и V) были очень-очень давно, а уже начиная с Pentium Pro всё намного сложнее.
0
|
0 / 0 / 0
Регистрация: 12.09.2009
Сообщений: 31
|
|
12.10.2009, 20:22 [ТС] | 18 |
опишити ещё по подробней суть моей проблемы пожалста)))))
???
0
|
12.10.2009, 20:22 | |
12.10.2009, 20:22 | |
Помогаю со студенческими работами здесь
18
Создание функции Создание своей функции Создание шаблонной функции
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |