Модератор: gaidar
Vovik писал(а):Собсно, это реально на VB?
Чисто средствами VB проверить на поддержку MMX, SSE ну и соответственно заменить CopyMem..tyomitch писал(а):Что конкретно нужно?
Чисто средствами VB проверить на поддержку MMX, SSE ну и соответственно заменить CopyMem..
#Compile Exe
#Dim All
Function CPU (ByVal TI As Long) As Long
#Register None
Local L As Long
! pushad
! pushfd
! mov eax, 1
! cpuid
! mov L, edx
! popfd
! popad
L = IsTrue(Bit(L, TI) = 1)
Function = L
End Function
Function PBMain () As Long
If CPU(23)<0 Then MsgBox "Поддерживатеся MMX"
If CPU(25)<0 Then MsgBox "Поддерживатеся SSE"
If CPU(26)<0 Then MsgBox "Поддерживатеся SSE2"
If CPU(0)<0 Then MsgBox "Поддерживатеся SSE3"
If CPU(28)<0 Then MsgBox "Поддерживатеся Hyper Threading Technology"
If CPU(30)<0 Then MsgBox "Поддерживатеся 3DNow extensions"
If CPU(31)<0 Then MsgBox "Поддерживатеся 3DNow"
If CPU(7)<0 Then MsgBox "Поддерживатеся Speed Step Technology"
If CPU(29)<0 Then MsgBox "Поддерживатеся Thermal Monitor V1"
If CPU(8)<0 Then MsgBox "Поддерживатеся Thermal Monitor V2"
End Function
Темыч, если тебе не сложно, не мог бы ты наваять примерчик...tyomitch писал(а):Что это не чистый VB, ессно.
Там для вызова асмовских вставок перезаписывают VTbl класса.
Ничем не лучше и не проще, чем с CallWindowProc.
Option Explicit
Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (lpfn As Any, ByVal param) As Long
Function Cpuid1() As Long
Cpuid1 = CallWindowProc(ByVal "j" + Chr$(1) + "XS" + Chr$(15) + Chr$(162) + "[" + Chr$(146) + Chr$(194) + Chr$(16), Null)
End Function
Sub Main()
If Cpuid1 And 2 ^ 23 Then MsgBox "Поддерживатеся MMX"
If Cpuid1 And 2 ^ 25 Then MsgBox "Поддерживатеся SSE"
If Cpuid1 And 2 ^ 26 Then MsgBox "Поддерживатеся SSE2"
If Cpuid1 And 2 ^ 0 Then MsgBox "Поддерживатеся SSE3"
If Cpuid1 And 2 ^ 28 Then MsgBox "Поддерживатеся Hyper Threading Technology"
If Cpuid1 And 2 ^ 30 Then MsgBox "Поддерживатеся 3DNow extensions"
If Cpuid1 < 0 Then MsgBox "Поддерживатеся 3DNow"
If Cpuid1 And 2 ^ 7 Then MsgBox "Поддерживатеся Speed Step Technology"
If Cpuid1 And 2 ^ 29 Then MsgBox "Поддерживатеся Thermal Monitor V1"
If Cpuid1 And 2 ^ 8 Then MsgBox "Поддерживатеся Thermal Monitor V2"
End Sub
Vovik писал(а):Кстати, прога не показывает поддержку 3DNow и напротив, показывает, что мой проц держит SSE3, хотя EVEREST говорит обратное...
Vovik писал(а):Кстати, прога не показывает поддержку 3DNow и напротив, показывает, что мой проц держит SSE3, хотя EVEREST говорит обратное...
tyomitch писал(а):Ну откуда я знаю, может у них в PB биты в обратном порядке нумеруются?
Пусть дальше jangle разбирается, которому как два пальца.
А если это использовать в цикле, как думаешь, будет выигрышь (например, в игре)?iGrok писал(а):Тебе это так, для эксперимента? Или есть практическое применение?
MMX и SSE - они ведь только дают 64 / 128 битные регистры.. За счет этого копирование происходит немного быстрее, но это имеет смысл при большом объеме копируемых данных.
Мало того, все равно для их использования тебе придется писать процедурку на ассемблере, и встраивать в программу на vb.
Есть подозрение, что с практической точки зрения игра не стоит свеч.
как копировать из одной переменной в другую с помощью SSE и MMX
mov esi, Source
mov edi, Dest
mov ecx, CntOfQWords
lab0:
movq mm0, [esi]
movq [edi], mm0
add esi, 8
add edi, 8
loop lab0
Знаешь, я уже хватаюсь за все, что только можно.... Оптимизирую все, что могу... Вот и решил поэксперементировать с mmx, sse...Mikle писал(а):Но сомневаюсь, что это будет быстрее, чем обычный rep movsd. Ты не там ищешь потерю скорости.
Все дело в том, что копирование данных происходит в цикле и, если, и копирование (допустим перекидывание из массива в массив) будет происходить быстрее, то время цикла уменьшится, что даст выигрыш в фпс.iGrok писал(а):А какой объем? Если ты пару гигов туда-сюда кидаешь - то будет быстрее..
Вернуться в Раздел для Профессионалов
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2