All streams
Search
Write a publication
Pull to refresh
22
0
Харченко Андрей Владимирович @scumware

User

Send message
Где в справочной документации можно прочитать о сабже?
Любопытно, каких именно фич из новых версий вам недостаёт более всего?
>Я до сих порсижу с AMD HD 5650м + прибавьте то, что экран 3D
>Очень хочется 60 фпс

В шутеры не играешься потому что, иначе первым требованием было бы минимум 40 FPS. Когда активная пальба начинается, то от фрэймрэйта твоя успешность зависит (в сетевых баталиях ещё и от лага). От фрэймрэйта зависит скорость прицеливания. Если на поле брани вот такое происходит, то выживает тот, у кого выше фрэймрэйт и меньше сетевой лаг. Я это ещё по Сталкеру заметил: с низким фпс из пистолета практически невозможно в снорка или тушкана попасть (я в него на слабой видюхе начинал играться).
TDP указывают для пиковых нагрузок. В нормальном режиме видюхи холодные, и вентиляторы почти останавливаются.
>Слабее разве что по памяти, ядро гораздо более производительное на больших частотах.

Я на тесты смотрю, и только если их нет на характеристики.

>У меня БП 180 Вт для ноута…
А у меня 700 Вт. Это ни о чём не говорит.
Разве что, можно предположить, что в пиковых нагрузках просядут линии +3.3 и +5. Видел такое, и именно поэтому вместо БП 400 Вт был куплен брэндовый семисотватник.

L4D2, кстати, не очень требовательная игрушка. Нужно смотреть нечто вот такое:
На диаграммке названия игрушек
image

Зачем нужна хорошая видюха видно из вот этих тестов:
CRYSIS WARHEAD, AntiAliasing+Anisotropy, 1680×1050


Metro 2033, AntiAliasing+Anisotropy, 1680×1050


>мою карту можно разогнать примерно до вашей…
Интересно, что мобильная 880 всё равно оказывается слабее чем полновесной 670. Т.е. разгон ничего не даст.

>Пара 780M это очень даже ничего производительность

Очень любопытно! Я пока не представляю ноута, из которого можно успешно отвести 200 Вт. Это особенно сложно представить потому, что корпус моего компа при максимальных нагрузках прогревается градусов до 40 — 43 (не измерял, но по ощущениям именно столько). Думаю, обычный ноут от такого кол-ва теплоты должен задымиться.
Я своей, не шибко крутой, видюхой руки зимой грею. А тут вообще, фен!
Надо не максимальный и не средний FPS смотреть, а минимальный. Когда на экране взрыв, пламя, дым FPS проваливается в минуса (Crysis, Crysis 3). Нафиг так играть!
Сужу по GTX 670, а она несколько круче чем упомянутая мобильная карточка.
Из-за того, что нормальную/полноценную/полновесную видеокарту не поставить (ибо TDP), а тем более SLI/CrossFire, я не люблю ноутбуки.
Это рассчитано на тех, кто читает очень быстро. При большой скорости чтения, например 500 слов в минуту на критическую оценку текста времени нет, и читатель впитывает всё, что ему написал автор.
Тут есть люди, которые читают по паре-тройке книг в неделю. Они не отдают себе отчёта в том, что не обдумывают прочитанное — они просто поглощают.
Я некоторые книги по полгода читаю, а некоторые вовсе не осилил, при этом часть книг я не читаю, а изучаю с карандашом в руках. В среднем на книгу уходит месяц, иногда больше. То, что можно читать по пути на работу, в метро повиснув между пассажирами, я книгами не считаю.
АДЪ!!!
Так нельзя!
                    Process[] myProcesses2 = Process.GetProcessesByName(process);
                    for (int i = 1; i < myProcesses2.Length; i++) { myProcesses2[i].Kill(); }


Мало того, что вы таким способом можете не убить процесс (закрытие главного окна может не привести к завершению процесса), так ещё и повиснуть этот код может (если, наример, MainWindow будет переоткрываться после закрытия, или, например при попытке закрытия будет выдаваться MessageBox с предложением сохранить результаты работы).
Тщательно проведенные исследования показали, что освещенность в 1,3 лк монохромного синего света или в 100 лк белого света может значительно подавить продукцию мелатонина эпифизом. Значительное снижение уровня мелатонина было обнаружено у добровольцев, подвергнутых в течение 2-х недель прерывистому воздействию света ночью. Подчеркивается, что воздействие света ночью влияет и на другие физиологические механизмы.

bono-esse.ru/blizzard/Farma/Melatonin/melatonin2.html

Полученные результаты могут модернизировать методики светотерапии, используемые при различных нарушениях сна, сбоях суточных ритмов и психических проблемах, например при сезонном аффективном расстройстве (см.: Seasonal affective disorder), в России хорошо известном как «зимняя депрессия», а также для облегчения участи людей, работающих по ночам. Раньше для этого применялся в основном коротковолновой синий свет, возбуждающий меланопсиновые клетки. Но вполне возможно, что более длинноволновой «колбочковый» свет окажется ничуть не менее полезным — либо сам по себе, либо в совокупности с коротковолновым.

elementy.ru/news/431334
Вообще-то синий свет сильно влияет на выработку нейромедиаторов, таких как дофамин и гормонов суточных ритмов (мелатонин).
Я бы не рискнул постоянно носить жёлтые очки — боком может выйти.
В костре разве не частицы сажи излучают?
Их излучение имеет спектр, близкий к спектру абсолютно чёрного тела. А при таких температурах, как в костре, ультрафиолета там кот наплакал — по мощности от фоновой радиации не отличить…
Перед изучение функции протестировал, предварительно выставив атрибут SuppressUnmanagedCodeSecurity для функции memcmp() и RtlCompareMemory()

Результаты
Размер массива  Минимальное время  Unsafe     MemCMP     RtlCompareMemory  Простейший метод
1               279                1 : 001,7  1 : 003,2  1 : 008,8         1 : 001,0
1               278                1 : 001,8  1 : 003,2  1 : 008,9         1 : 001,0
2               325                1 : 001,3  1 : 002,9  1 : 006,1         1 : 001,0
4               374                1 : 001,1  1 : 002,6  1 : 009,0         1 : 001,0
7               422                1 : 001,0  1 : 002,5  1 : 007,0         1 : 001,1
12              426                1 : 001,0  1 : 002,5  1 : 006,9         1 : 001,7
19              490                1 : 001,0  1 : 002,2  1 : 006,0         1 : 001,9
32              560                1 : 001,0  1 : 002,0  1 : 005,3         1 : 002,7
54              622                1 : 001,0  1 : 002,0  1 : 005,4         1 : 003,8
89              802                1 : 001,0  1 : 001,7  1 : 004,3         1 : 004,7
147             1092               1 : 001,0  1 : 001,5  1 : 003,7         1 : 004,0
242             1571               1 : 001,0  1 : 001,4  1 : 003,0         1 : 004,2
398             2328               1 : 001,0  1 : 001,4  1 : 002,7         1 : 004,5
657             3664               1 : 001,0  1 : 001,2  1 : 002,2         1 : 004,6
1082            5519               1 : 001,0  1 : 001,2  1 : 002,1         1 : 005,0
1782            8554               1 : 001,0  1 : 001,2  1 : 002,1         1 : 005,3
2936            13520              1 : 001,0  1 : 001,2  1 : 002,0         1 : 005,5
4837            21771              1 : 001,0  1 : 001,2  1 : 002,0         1 : 005,6
7967            35464              1 : 001,0  1 : 001,2  1 : 001,9         1 : 005,7
13124           58073              1 : 001,0  1 : 001,2  1 : 001,9         1 : 005,7
21618           96457              1 : 001,0  1 : 001,2  1 : 001,9         1 : 005,7
35610           167952             1 : 001,0  1 : 001,1  1 : 001,8         1 : 005,4
58656           285282             1 : 001,0  1 : 001,1  1 : 001,8         1 : 005,3
96617           534712             1 : 001,0  1 : 001,1  1 : 001,6         1 : 004,7
159146          924569             1 : 001,0  1 : 001,1  1 : 001,6         1 : 004,5
262143          1520968            1 : 001,0  1 : 001,1  1 : 001,6         1 : 004,5



Окошки дебагера (смотрите версию библиотеки)



Функция оказалась на удивление маленькой, она вся здесь, под катом. В функции активно используются строковые операции сравнения c префиксом повторения (cmps*).

Например, сравнение DWORD'ов выглядит так:

         while 
          (
            ( 0 != ecx )
          & ( 0 == Compare( (DWORD) RAM[esi], (DWORD) RAM[edi] ) )
          )
         {
            --ecx;
            edi += 4;
            esi += 4;
         }


Почти так же можно представить побайтное сравнение.

То, что функция оказалась медленнее unsafe я могу обяснить только тем, что в unsafe за одну итерацию цикла читаются два соседних DWORD'а для каждого массива, а здесь только один (цикл не развёрнут).

Дизассемблер с комментариями
77A52780  /$  56            push    esi                              ; сохранить значения регистров в стеке
77A52781  |.  57            push    edi

77A52782  |.  FC            cld                                      ; DF  <-- 0

77A52783  |.  8B7424 0C     mov     esi, [esp+0C]                    ; esi <-- Source1
77A52787  |.  8B7C24 10     mov     edi, [esp+10]                    ; edi <-- Source2
77A5278B  |.  8B4C24 14     mov     ecx, [esp+14]                    ; ecx <-- SIZE_T

77A5278F  |.  C1E9 02       shr     ecx, 2                           ; ecx <-- (ecx >> 2) ( делим счётчик на 4)
77A52792  |.- 74 04         jz      short smaller_4                  ; 

77A52794  |.  F3:A7         repe cmpsd                               ; В цикле по ecx сравниваем DWORD'ы;
77A52796  |.- 75 16         jne     short not_zero                   ; if ( !ZF ) goto not_zero;



smaller_4:
77A52798  |>  8B4C24 14     mov     ecx, [esp+14]                    ; ecx <-- SIZE_T

77A5279C  |.  83E1 03       and     ecx, 00000003                    ; ecx &= 3
77A5279F  |.- 74 04         jz      short return_SIZE_T              ; if ( ZF ) goto return_SIZE_T;

77A527A1  |.  F3:A6         repe cmpsb                               ; в цикле сравниваем байты
77A527A3  |.- 75 16         jne     short found_difference



return_SIZE_T:
77A527A5  |>  8B4424 14     mov     eax, [esp+14]                   ; eax <-- SIZE_T
77A527A9  |.  5F            pop     edi                             ; восстанавливаем значения регистров
77A527AA  |.  5E            pop     esi
77A527AB  |.  C2 0C00       ret     0C                              ; return eax


not_zero:
77A527AE  |>  83EE 04       sub     esi, 4                          ; esi -= 4
77A527B1  |.  83EF 04       sub     edi, 4                          ; edi -= 4
77A527B4  |.  B9 04000000   mov     ecx, 4                          ; ecx -= 4
77A527B9  |.  F3:A6         repe cmpsb                              ; в цикле сравниваем байты


found_difference:
77A527BB  |>  4E            dec     esi                             ; --esi
77A527BC  |.  2B7424 0C     sub     esi, [esp+0C]                   ; esi <-- (esi - Source1)
77A527C0  |.  8BC6          mov     eax, esi                        ; eax <-- esi

77A527C2  |.  5F            pop     edi                             ; восстанавливаем значения регистров
77A527C3  |.  5E            pop     esi

77A527C4  \.  C2 0C00       ret     0C                              ; return eax

Не знал, большое спасибо и за подсказку и за внимательность!

Применение атрибута дало хороший эффект. Прогон от 1 байта до 12 Кб дал вот такие результаты:

Размер массива  Минимальное время  Unsafe     PInvoke    Простейший метод  SequenceEqual  IStructuralEquatable
1               273                1 : 001,8  1 : 003,5  1 : 001,0         1 : 010,5      1 : 055,3
1               271                1 : 001,8  1 : 003,5  1 : 001,0         1 : 010,3      1 : 055,6
2               325                1 : 002,4  1 : 003,0  1 : 001,0         1 : 010,9      1 : 092,2
3               326                1 : 002,4  1 : 003,0  1 : 001,0         1 : 010,7      1 : 092,3
4               377                1 : 001,1  1 : 002,7  1 : 001,0         1 : 011,4      1 : 118,7
6               425                1 : 001,0  1 : 002,7  1 : 001,0         1 : 011,6      1 : 138,8
9               426                1 : 001,0  1 : 002,6  1 : 001,2         1 : 013,5      1 : 174,0
13              426                1 : 001,0  1 : 002,7  1 : 001,6         1 : 016,7      1 : 241,4
20              490                1 : 001,0  1 : 002,4  1 : 002,1         1 : 020,5      1 : 330,4
29              490                1 : 001,0  1 : 002,5  1 : 002,7         1 : 026,5      1 : 448,2
43              560                1 : 001,0  1 : 002,2  1 : 003,4         1 : 032,3      1 : 572,4
63              638                1 : 001,0  1 : 002,1  1 : 004,2         1 : 039,8      1 : 731,8
91              806                1 : 001,0  1 : 001,8  1 : 004,7         1 : 044,2      1 : 832,3
133             1012               1 : 001,0  1 : 001,7  1 : 003,9         1 : 052,5      1 : 960,5
195             1335               1 : 001,0  1 : 001,5  1 : 004,1         1 : 057,2      1 : 1066,8
284             1769               1 : 001,0  1 : 001,4  1 : 004,4         1 : 061,7      1 : 1172,5
414             2414               1 : 001,0  1 : 001,3  1 : 004,5         1 : 064,8      1 : 1247,9
603             3380               1 : 001,0  1 : 001,2  1 : 004,6         1 : 066,9      1 : 1292,7
879             4750               1 : 001,0  1 : 001,2  1 : 004,7         1 : 068,6      1 : 1343,9
1282            6423               1 : 001,0  1 : 001,2  1 : 005,0         1 : 073,8      1 : 1449,2
1868            8893               1 : 001,0  1 : 001,2  1 : 005,2         1 : 077,5      1 : 1526,0
2723            12667              1 : 001,0  1 : 001,2  1 : 005,4         1 : 079,0      1 : 1560,1
3969            18042              1 : 001,0  1 : 001,2  1 : 005,4         1 : 080,9      1 : 1598,8
5785            25872              1 : 001,0  1 : 001,2  1 : 005,5         1 : 082,1      1 : 1640,5
8431            37341              1 : 001,0  1 : 001,2  1 : 005,6         1 : 083,2      1 : 1645,5
12288           54115              1 : 001,0  1 : 001,2  1 : 005,6         1 : 083,6      1 : 1653,2


Трэйс от управляемого кода к функции показал всего 50 команд.
main  00540F14                    call    001DC2F4                        ESP=001AEE14
main  001DC2F4                    mov     eax, 1D38D8                     EAX=001D38D8
main  001DC2F9                    mov     ebp, ebp
main  001DC2FB                    jmp     00540F40
main  00540F40                    push    ebp                             ESP=001AEE10
main  00540F41                    mov     ebp, esp                        EBP=001AEE10
main  00540F43                    push    edi                             ESP=001AEE0C
main  00540F44                    push    esi                             ESP=001AEE08
main  00540F45                    push    ebx                             ESP=001AEE04
main  00540F46                    sub     esp, 28                         ESP=001AEDDC
main  00540F49                    mov     [ebp-18], eax
main  00540F4C                    xor     ebx, ebx                        EBX=00000000
main  00540F4E                    mov     [ebp-10], ebx
main  00540F51                    mov     [ebp-14], ebx
main  00540F54                    mov     esi, fs:[0E38]                  ESI=002F2AE0
main  00540F5B                    mov     dword ptr [ebp-30], 645CABC8
main  00540F62                    mov     dword ptr [ebp-34], C28DAB21
main  00540F69                    mov     eax, [esi+0C]                   EAX=001AF09C
main  00540F6C                    mov     [ebp-2C], eax
main  00540F6F                    mov     [ebp-1C], ebp
main  00540F72                    mov     dword ptr [ebp-20], 0
main  00540F79                    lea     eax, [ebp-30]                   EAX=001AEDE0
main  00540F7C                    mov     [esi+0C], eax
main  00540F7F                    xor     ebx, ebx
main  00540F81                    test    ecx, ecx
main  00540F83                    je      short 00540F8F
main  00540F85                    mov     [ebp-10], ecx
main  00540F88                    mov     eax, ecx                        EAX=023B42E4
main  00540F8A                    add     eax, 8                          EAX=023B42EC
main  00540F8D                    mov     ebx, eax                        EBX=023B42EC
main  00540F8F                    xor     edi, edi                        EDI=00000000
main  00540F91                    test    edx, edx
main  00540F93                    je      short 00540F9F

main  00540F95                    mov     [ebp-14], edx
main  00540F98                    mov     eax, edx                        EAX=023B42E4
main  00540F9A                    add     eax, 8                          EAX=023B42EC
main  00540F9D                    mov     edi, eax                        EDI=023B42EC
main  00540F9F                    mov     eax, [ebp-18]                   EAX=001D38D8
main  00540FA2                    mov     eax, [eax+14]                   EAX=001D397C
main  00540FA5                    mov     ecx, [eax]                      ECX=75A97975
main  00540FA7                    push    dword ptr [ebp+0C]              ESP=001AEDD8
main  00540FAA                    push    dword ptr [ebp+8]               ESP=001AEDD4
main  00540FAD                    push    edi                             ESP=001AEDD0
main  00540FAE                    push    ebx                             ESP=001AEDCC
main  00540FAF                    mov     dword ptr [ebp-28], 0
main  00540FB6                    mov     [ebp-24], esp
main  00540FB9                    mov     dword ptr [ebp-20], 540FC6
main  00540FC0                    mov     byte ptr [esi+8], 0
main  00540FC4                    call    ecx                             ESP=001AEDC8


Какова цель — бессмысленный вопрос.
Цель любой коммерческой организации — максимализация прибыли. Microsoft — коммерческая организация, код там пишут не для того чтобы мир улучшить, а для получения прибыли.
Даже если DirectX версии N был бы идеален, то следовало бы придумать причину, по которой надо было бы написать и продвинуть версию N+1.
А это означает, что пользователей обманывали. Не больше и не меньше.
Да, наверное, это я должен был сделать с самого начала.
Сейчас добавлю ссылку в топик.
Так там ведь проверяются длины массивов на равенство. Было бы совсем печально, если бы он этого не сделал.
Кроме того, в исходниках, которые вы запускали, в методе DoMeasurements() присутствует строка:
            result.SequenceEqualTime = result.IStructuralEquatableTime = result.PInvokeTime;
Из-за этого результаты и неверны.

Поправлю опечатки и исходники — обновлю статью, выложу корректные исходники.

Смотрите, проверяйте, перепроверяйте. Увы, у меня без таких обидных ляпов не получается…

Information

Rating
Does not participate
Location
Санкт-Петербург, Санкт-Петербург и область, Россия
Date of birth
Registered
Activity