Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |

 

  Вопрос: Разгоняем CHR : Почти в 2 раза! Добавлено: 08.05.05 22:08  

Автор вопроса:  Morpheus | Web-сайт: xury.zx6.ru

Ответить

  Ответы Всего ответов: 125  

Номер ответа: 91
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #91 Добавлено: 12.05.05 16:15
Эффективность кеша сильно зависит от линейности кода. Если в программе мало команд ветвления - она будет максимальной, на деле же непрерывный кусок кода редко составляет 10-15 команд. Кроме того, для кеша справедливы те же правила что и для динамической памяти.
Про регистры я сказал к тому, что программа не может держать в них все данные. Если ты пишешь на асме - ты можешь выделить для себя наиболее частоиспользуемые. Как поступит компилятор - сказать нельзя. Скорее всего не так :)

Ответить

Номер ответа: 92
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #92
Добавлено: 12.05.05 16:17

При считывании данных из ОЗУ (например, локальных переменных, для примера пусть их будет 5-6 двордов), при считывании первой переменной, соответствующей вершине стека (esp), данные из памяти не поступают непосредственно в регистры. Они сначала попадают в L1. Причём при чтении первой переменной в кэш попадут все наши 5-6 переменных, т.к. процессор подгружает в кэш данные порциями по 32 (или 2х32, в зависимости от проца) байт.

 Да, но предварительная загрузка из памяти в кэш используется в то время, пока ты к памяти не обращаешся (работешь только с регистрами). Получается что сначала нужно осонвательно поработать с регистрами, пока память загрузится в кэш, а потом уже смело её использовать ;)

Ответить

Номер ответа: 93
Автор ответа:
 Morpheus



Вопросов: 224
Ответов: 3777
 Web-сайт: xury.zx6.ru
 Профиль | | #93
Добавлено: 12.05.05 16:22
а в регистр влезут все переменные?

Ответить

Номер ответа: 94
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #94 Добавлено: 12.05.05 16:22
2Morpheus :))
Я говорю про тип данных Boolean, а не про булевые операции. То что ты предложил будет раза в два медленнее.

Ответить

Номер ответа: 95
Автор ответа:
 Morpheus



Вопросов: 224
Ответов: 3777
 Web-сайт: xury.zx6.ru
 Профиль | | #95
Добавлено: 12.05.05 16:23
LamerOnLine:

раза в 2 медленне чем что? (чем not?)

Ответить

Номер ответа: 96
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #96 Добавлено: 12.05.05 16:34
Разумеется.

Private Declare Function GetTickCount Lib "kernel32" () As Long

Private Sub Form_Load()
Dim Ticks As Long
Dim i As Long
Dim a As Long
Dim b As Long
Ticks = GetTickCount
For i = 1 To 100000000
a = Not b
Next i
Text1.Text = GetTickCount - Ticks
Ticks = GetTickCount
For i = 1 To 100000000
a = 1 - b
Next i
Text2.Text = GetTickCount - Ticks
End Sub

Первый вариант - 188
Второй вариант - 344
Как видишь, не поленился :)
При ненулевом b=5 второй вариант - 422
При b=100000000 соответственно снова 344.
Выводы...

Ответить

Номер ответа: 97
Автор ответа:
 Morpheus



Вопросов: 224
Ответов: 3777
 Web-сайт: xury.zx6.ru
 Профиль | | #97
Добавлено: 12.05.05 16:42
Дык низя же выполнить Not с long'ом ?!

Ответить

Номер ответа: 98
Автор ответа:
 HOOLIGAN



Вопросов: 0
Ответов: 1066
 Профиль | | #98 Добавлено: 12.05.05 16:48
CyRax
По поводу "предварительная загрузка из памяти в кэш используется в то время, пока ты к памяти не обращаешся" - у меня есть некоторые сомнения, насколько я знаю, данные грузятся в кэш только при чтении их из ОЗУ. Даже при записи в ОЗУ они не грузятся, т.к. не нужны в кэше, а тем более грузить их когда не происходит обращений к данным - нерационально, они ведь могут вообще не понадобиться, зачем делать лишнюю работу? Имхо, это так.

Morpheus, регистров, относительно просто доступных для манипуляций - 8 штук (eax,ecx,edx,ebx,esp,ebp,esi,edi). Если кол-во твоих переменных не превышает этого количества, то извратившись, ты сможешь обойтись одними регистрами. Но за счёт усложнения алгоритма и некоторой потери "читабельности" кода. И опять же не применительно к VB.

А вообще, оптимизировать по большому счёту в VB очень сложно. Практически максимум, что можно сделать - это по возможности использовать лонги и по возможности располагать более длинные данные раньше чем более короткие, использовать строки, длиной кратные 4, в остальном понадеявшись на "интеллект" компилятора VB :)
Ну ещё в структурах делать пустые поля, чтобы
дополнять предыдущие поля до адресов, кратных 4.

Ответить

Номер ответа: 99
Автор ответа:
 Morpheus



Вопросов: 224
Ответов: 3777
 Web-сайт: xury.zx6.ru
 Профиль | | #99
Добавлено: 12.05.05 16:49
А не, понял , ок-ся можно, извиняюсь. У меня вот так получилось:

Dim i As Long

Private Sub Form_Load()
i = False
i = Not i
If i = True Then MsgBox "TRue"
End
End Sub

Ответить

Номер ответа: 100
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #100 Добавлено: 12.05.05 16:51
В смысле? Ты о чем?

Ответить

Номер ответа: 101
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #101 Добавлено: 12.05.05 16:54
пример

Private Sub Form_Load()
MsgBox Not 5
MsgBox Not 255
MsgBox Not 21314143
End Sub

Результат
-6
-256
-21314144

Ответить

Номер ответа: 102
Автор ответа:
 Morpheus



Вопросов: 224
Ответов: 3777
 Web-сайт: xury.zx6.ru
 Профиль | | #102
Добавлено: 12.05.05 16:55
2 LamerOnLine

Это ко мне? Да, глюконул малость (#97) щас врубился

Ответить

Номер ответа: 103
Автор ответа:
 Morpheus



Вопросов: 224
Ответов: 3777
 Web-сайт: xury.zx6.ru
 Профиль | | #103
Добавлено: 12.05.05 16:57
Дело в том, что есть соблазн подумать, что переменная типа Boolean занимает 1 бит, ведь принимает по большому счёту всего два значения хотя и известно, что у Истины диапазон значений кажись :-/

Ответить

Номер ответа: 104
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #104 Добавлено: 12.05.05 16:58
Ну, никто и не надеется оптимизировать код на VB. Но зло, несомое компилятором, можно свести к минимуму. Если есть такая возможность - ИМХО, нужно ей пользоваться, VB не настолько hi-speed платформа чтобы этой возможностью пренебрегать. Даже в ущерб другим параметрам, таким как размер и читабельность кода и т.п.

Ответить

Номер ответа: 105
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #105 Добавлено: 12.05.05 17:01
Соблазн может и есть, но занимает она два байта. За каким - трудно сказать, может для скорости оптимизировали. В сях так вообще четыре. Конечно, бредово использовать 32 бита, из которых значащий только один, но такова жизнь программиста...

Ответить

Страница: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам