deLight каких конструкций? xchg eax,edx ? просто балласт. хотите - уберите. давайте ваше проще. если заодно проверите отчего иногда задержка сразу после начала, вообще хорошо будет. не думаю, что это своп. память почти пустая. я только проц грузил. думаю, это место стека в кэш проца перечитывается.
А обязательно НТ? Может можно взять какую-нибудь ОС реального режима, однозадачную (нпр. ДОС хотя-бы) и выполнить этот участок кода на ней? И там будет всё точно без всяких поправок-чистое время? И просто! Идея asmlamo тоже кажется интересной - посчитать все команды и перемножить каждую на количество тактов для каждой команды. Нечто подобное ведь делает компилятор при оптимизации. Хотя труд будет велик, но продукт будет универсальный.
gaeprust, ну коль сюда пригласили из другого топика. 1. Что делает код? Какими ресурсами/системными вызовами/библиотеками пользуется? 2. Зачем вам нужна такая точность? Имеет ли смысл вообще что-то замерять, когда скорость будет зависеть от конкретной модели процессора?
Да не будет. Вы же не знаете заранее состояние кэшей, не знаете результаты предсказания переходов, предсказания аппаратных префетчей, предсказания спекулятивного доступа к памяти. А от этого время исполнения будет варьироваться очень сильно.
Не понятен, смысл всей этой затеи. Если постоянно крутить какие-то проверки, то в лучшем случае можно либо 1) просто провести квазинаучное исследование того, как часто и насколько прерывается поток (как-то давно один чел тут даже какую-то красивую гистограммку приводил распределения задержек), 2) в рабочем варианте тестирования времени исполнения некого кода можно пытаться определять начало кванта и т.п. Но как можно определять\обнаруживать какие-то прерывания во время работы самого тестируемого куска, не насовав в него "левых" проверок (которые в итоге исказят реальное время работы больше, чем все прерывания) - совершенно не понятно и похоже на попытку "вытащить себя за волосы"
leo у меня 1 нырок в ядро и возврат слипом(0) занимает ~600 тактов. прерывание отнимет больше. любое переключение контекста займет гораздо больше времени чем квант. потому, можно просто ориентироваться на то чтоб время участка было меньше кванта. а вот что исказит, так это подчитывания в кэш. просто, как любопытная задачка. возможно, когда нибудь пригодится. например, счас мне интересно досрочно завершить квант потока из самого потока, но нормально получить очередной квант. пока что ясно, что слипом(0) этого не сделать. и слип(1) ведет себя не так как бы хотелось.
qqwe Если измеряемое время заведомо (а еще лучше существенно) меньше кванта, то все эти приблуды нафиг не нужны - достаточно поднять приоритет потока до реал-тайма, провести серию из 5-10 измерений и выбрать из них наименьшие повторяющиеся значения См: 1) общие измышлизмы а ля А.Фог, 2) видимо последний из завалявшихся вар-тов wintest
deLight Регистр Gs никакого отношения с планированию не имеет. Цикл бесконечный: Код (Text): mov ax,ds mov gs,ax @@: mov ax,gs test ax,ax jnz @b
leo -> Sleep(0) не ждет начала кванта. я тоже так думал, но тест приведенный выше говорит, что он просто ныряет в ядро и сразу же выходит в том же кванте.
qqwe Не понятно что ваш код делает. Если представить работу потока, как на скрине выше, то необходимо обождать окончание прерывания и новый квант как задний фронт импульса не диаграмме. Например выполняем цикл ожидания сброса RPL. Когда окажется сброшен, то произошёл возврат из прерывания. Новый квант потока начинается с возврата из прерывания. Пусть T0 - время(в тиках TSC) возврата из прерывания. T1 - последнее значение TSC, до сброса RPL. Тогда рабочее время потока будет Tr = T0 - T1. Длительность прерывания Tint = T0' - T1, где T0' - время следующего возврата из прерывания. Длительность кванта будет равна сумме длительностей обработки прерываний и рабочих длительностей. Tint = Tidle(время, в течении которого процессор отдан другому треду, тоесть простой). Разницу можно определить из значения Cr0. Сумма Tidle, как и Tr за несколько десятков квантов должна быть фактически константой(гипотетически).
gaeprust ну, у меня идея простая. общая мысль там такая: 1) между квантами проходит очень много времени. этой аномальной задержки и ждет первый цикл. (там проверочку лучше удлинить раз так в 10-100 чтоб цикл не реагировал на мелкие задержки) 2) меряется квант. опять же, на измерении времени кода. появление слишком большой задержки распознается как конец счета 3) вывод результатов. у меня получается в в большинстве случаев 165xxxx с копейками (частота проца ~1.6 Ггц. 1мс квант выходит). но наврядли это лучшая мысль. простая просто. думаю, вы предложите лучше.
qqwe Наверное правильнее сказать, что sleep(0) не обязана ждать начала кванта, т.к. если в системе на данный момент нет потоков того же приоритета, готовых к исполнению на том же ядре\процессоре, то ес-но система может продолжить исполнение твоего потока. Для определенности вместо sleep(0) можно юзать SwitchToThread, которая возвращает BOOL, показывающий произошло ли переключение на другой поток, или нет
У меня получился следующий результат: Код (Text): Cqint = 0x00000010, dTq = 0x02C87789, SdTr = 0x02C4D72D, SdTi = 0x000466D1, dTq/SdTr = 0x00000001, dTq/SdTi = 0x000000A1, SdTr/SdTi = 0x000000A1, dTr = 0x002CA4C5, dTi = 0x0000D0D4, Err = 0x0000C674 Cqint = 0x00000010, dTq = 0x02C8F152, SdTr = 0x02C54CFF, SdTi = 0x0004E0D0, dTq/SdTr = 0x00000001, dTq/SdTi = 0x00000092, SdTr/SdTi = 0x00000091, dTr = 0x002CB7B2, dTi = 0x0001471A, Err = 0x00013C7C Cqint = 0x00000010, dTq = 0x02C84013, SdTr = 0x02C4B95F, SdTi = 0x0004345D, dTq/SdTr = 0x00000001, dTq/SdTi = 0x000000A9, SdTr/SdTi = 0x000000A8, dTr = 0x002CB578, dTi = 0x0000B7DE, Err = 0x0000ADA8 Cqint = 0x00000010, dTq = 0x02C82455, SdTr = 0x02C3EEF7, SdTi = 0x000989B1, dTq/SdTr = 0x00000001, dTq/SdTi = 0x0000004A, SdTr/SdTi = 0x0000004A, dTr = 0x002C5C0E, dTi = 0x00055EBA, Err = 0x00055452 Cqint = 0x00000025, dTq = 0x02C186D3, SdTr = 0x02BBC36E, SdTi = 0x000665A5, dTq/SdTr = 0x00000001, dTq/SdTi = 0x0000006E, SdTr/SdTi = 0x0000006D, dTr = 0x002CB005, dTi = 0x0000BAD4, Err = 0x0000A23F Cqint = 0x00000010, dTq = 0x02C4DBBE, SdTr = 0x02C147B7, SdTi = 0x000CE4C4, dTq/SdTr = 0x00000001, dTq/SdTi = 0x00000036, SdTr/SdTi = 0x00000036, dTr = 0x002CAB20, dTi = 0x00095B0D, Err = 0x000950BC Cqint = 0x00000010, dTq = 0x02AC6438, SdTr = 0x02A83D21, SdTi = 0x0005BAEC, dTq/SdTr = 0x00000001, dTq/SdTi = 0x00000077, SdTr/SdTi = 0x00000076, dTr = 0x002CB7DF, dTi = 0x00019E8D, Err = 0x000193D4 Cqint = 0x00000010, dTq = 0x02C7A1A3, SdTr = 0x02C3CD5D, SdTi = 0x00049782, dTq/SdTr = 0x00000001, dTq/SdTi = 0x0000009A, SdTr/SdTi = 0x0000009A, dTr = 0x002CB570, dTi = 0x0000CD8C, Err = 0x0000C33B Cqint = 0x00000010, dTq = 0x02C94BE8, SdTr = 0x02C53799, SdTi = 0x000501B3, dTq/SdTr = 0x00000001, dTq/SdTi = 0x0000008E, SdTr/SdTi = 0x0000008D, dTr = 0x002CB53C, dTi = 0x0000F7CB, Err = 0x0000ED63 Cqint = 0x00000010, dTq = 0x02C824E3, SdTr = 0x02C4E929, SdTi = 0x0007691E, dTq/SdTr = 0x00000001, dTq/SdTi = 0x00000060, SdTr/SdTi = 0x0000005F, dTr = 0x002C9F87, dTi = 0x000437E9, Err = 0x00042D63 Cqint = 0x00000010, dTq = 0x02CADEE3, SdTr = 0x02C763C2, SdTi = 0x000497F8, dTq/SdTr = 0x00000001, dTq/SdTi = 0x0000009B, SdTr/SdTi = 0x0000009A, dTr = 0x002CB19A, dTi = 0x0001278C, Err = 0x00011CD6 Cqint = 0x00000010, dTq = 0x02C76DD7, SdTr = 0x02C3C6CC, SdTi = 0x0024D1F5, dTq/SdTr = 0x00000001, dTq/SdTi = 0x00000013, SdTr/SdTi = 0x00000013, dTr = 0x002CB3A7, dTi = 0x00213522, Err = 0x00212AE9 Cqint = 0x00000010, dTq = 0x02AD26ED, SdTr = 0x02AA3050, SdTi = 0x0003F478, dTq/SdTr = 0x00000001, dTq/SdTi = 0x000000AD, SdTr/SdTi = 0x000000AC, dTr = 0x002CB5FF, dTi = 0x00010876, Err = 0x0000FDDA Cqint = 0x00000010, dTq = 0x02C403E3, SdTr = 0x02BFF7C5, SdTi = 0x0005373C, dTq/SdTr = 0x00000001, dTq/SdTi = 0x00000087, SdTr/SdTi = 0x00000086, dTr = 0x002C983B, dTi = 0x00013585, Err = 0x00012B1D Cqint = 0x00000010, dTq = 0x02C8A2BF, SdTr = 0x02C5345F, SdTi = 0x00055C4B, dTq/SdTr = 0x00000001, dTq/SdTi = 0x00000084, SdTr/SdTi = 0x00000084, dTr = 0x002CA1CF, dTi = 0x0001F833, Err = 0x0001EDEA Cqint = 0x00000010, dTq = 0x02C55A83, SdTr = 0x02C1E33C, SdTi = 0x0007A82C, dTq/SdTr = 0x00000001, dTq/SdTi = 0x0000005C, SdTr/SdTi = 0x0000005C, dTr = 0x002CA293, dTi = 0x00043CB7, Err = 0x000430E4 Cqint = 0x00000010, dTq = 0x02C3E3BF, SdTr = 0x02C081FF, SdTi = 0x00250AD9, dTq/SdTr = 0x00000001, dTq/SdTi = 0x00000013, SdTr/SdTi = 0x00000013, dTr = 0x002CAFD1, dTi = 0x0021B466, Err = 0x0021A918 Cqint = 0x00000010, dTq = 0x02C9980D, SdTr = 0x02C64A8A, SdTi = 0x0004B878, dTq/SdTr = 0x00000001, dTq/SdTi = 0x00000097, SdTr/SdTi = 0x00000096, dTr = 0x002CB7B2, dTi = 0x00017527, Err = 0x00016AF4 Cqint = 0x00000010, dTq = 0x02CC0E84, SdTr = 0x02C85FCE, SdTi = 0x0004A931, dTq/SdTr = 0x00000001, dTq/SdTi = 0x00000099, SdTr/SdTi = 0x00000098, dTr = 0x002CB7DF, dTi = 0x00010635, Err = 0x0000FA7A Cqint = 0x00000010, dTq = 0x02C9A5CA, SdTr = 0x02C59208, SdTi = 0x00040A09, dTq/SdTr = 0x00000001, dTq/SdTi = 0x000000B0, SdTr/SdTi = 0x000000AF, dTr = 0x002D8915, dTi = 0x000000B4, Err = 0x000009B9 Cqint = 0x00000010, dTq = 0x02C57AB5, SdTr = 0x02C23D9B, SdTi = 0x0025096F, dTq/SdTr = 0x00000001, dTq/SdTi = 0x00000013, SdTr/SdTi = 0x00000013, dTr = 0x002CB7C8, dTi = 0x0021D680, Err = 0x0021CC54 Cqint = 0x00000010, dTq = 0x02C61FD4, SdTr = 0x02C2B522, SdTi = 0x00072DB5, dTq/SdTr = 0x00000001, dTq/SdTi = 0x00000062, SdTr/SdTi = 0x00000062, dTr = 0x002CAEC3, dTi = 0x0003CDAE, Err = 0x0003C302 Cqint = 0x00000010, dTq = 0x02C649ED, SdTr = 0x02C3287B, SdTi = 0x0003181A, dTq/SdTr = 0x00000001, dTq/SdTi = 0x000000E5, SdTr/SdTi = 0x000000E4, dTr = 0x00313DA0, dTi = 0x000000DA, Err = 0x00000958 Cqint = 0x00000019, dTq = 0x00DEF1CC, SdTr = 0x00DBB7FB, SdTi = 0x00071543, dTq/SdTr = 0x00000001, dTq/SdTi = 0x0000001F, SdTr/SdTi = 0x0000001F, dTr = 0x002CA6F7, dTi = 0x0003ED8F, Err = 0x0003DB71 Cqint = 0x00000010, dTq = 0x02EBE6BA, SdTr = 0x02E806F9, SdTi = 0x0003D5F1, dTq/SdTr = 0x00000001, dTq/SdTi = 0x000000C2, SdTr/SdTi = 0x000000C1, dTr = 0x004EA8DB, dTi = 0x0000008E, Err = 0x000009D0 Cqint = 0x00000010, dTq = 0x02C7F4FD, SdTr = 0x02C46E10, SdTi = 0x0004ACDE, dTq/SdTr = 0x00000001, dTq/SdTi = 0x00000098, SdTr/SdTi = 0x00000097, dTr = 0x002CB6BB, dTi = 0x00013047, Err = 0x000125F0 Cqint = 0x00000010, dTq = 0x02C87A0D, SdTr = 0x02C4AD23, SdTi = 0x000523EE, dTq/SdTr = 0x00000001, dTq/SdTi = 0x0000008A, SdTr/SdTi = 0x00000089, dTr = 0x002CAFBA, dTi = 0x0001612D, Err = 0x00015703 Cqint = 0x00000010, dTq = 0x02C8F82D, SdTr = 0x02C58EB2, SdTi = 0x000747A2, dTq/SdTr = 0x00000001, dTq/SdTi = 0x00000061, SdTr/SdTi = 0x00000061, dTr = 0x002CB5F0, dTi = 0x0003E8A3, Err = 0x0003DE26 Cqint = 0x00000010, dTq = 0x02CAA2C5, SdTr = 0x02C73F15, SdTi = 0x00042B1A, dTq/SdTr = 0x00000001, dTq/SdTi = 0x000000AB, SdTr/SdTi = 0x000000AA, dTr = 0x002CB6D1, dTi = 0x0000D1BC, Err = 0x0000C769 Cqint = 0x00000010, dTq = 0x02C6E0CE, SdTr = 0x02C354A8, SdTi = 0x002529F5, dTq/SdTr = 0x00000001, dTq/SdTi = 0x00000013, SdTr/SdTi = 0x00000013, dTr = 0x002CB7BA, dTi = 0x0021A94B, Err = 0x00219DCE Cqint = 0x00000010, dTq = 0x02C9D60A, SdTr = 0x02C69CCF, SdTi = 0x0003E237, dTq/SdTr = 0x00000001, dTq/SdTi = 0x000000B7, SdTr/SdTi = 0x000000B6, dTr = 0x002CB543, dTi = 0x0000B388, Err = 0x0000A8FB Cqint = 0x00000010, dTq = 0x02C9A1FB, SdTr = 0x02C5F0FC, SdTi = 0x0004E138, dTq/SdTr = 0x00000001, dTq/SdTi = 0x00000092, SdTr/SdTi = 0x00000091, dTr = 0x002CB785, dTi = 0x00013AD3, Err = 0x00013038 Код такой: Код (Text): %SET_INT_TRIGGER macro mov cx,RPL_MASK mov es,cx endm %GET_INT_TRIGGER macro mov cx,es test cx,cx endm CR0_MP equ 0010B CR0_TS equ 1000B %SET_QNT_TRIGGER macro fnop endm %GET_QNT_TRIGGER macro smsw eax ; 16i test al,CR0_TS endm %WAIT_NEXT_QUANTUM macro %SET_QNT_TRIGGER .repeat %GET_QNT_TRIGGER .until !Zero? endm %TSC macro Storage1, Storage2 rdtsc mov dword ptr [Storage1],eax mov dword ptr [Storage1 + 4],edx ifdef Storage2 mov dword ptr [Storage2],eax mov dword ptr [Storage2 + 4],edx endif endm %DTSC macro Storage, T0, T1 ifdef T1 mov eax,dword ptr [T1] mov edx,dword ptr [T1 + 4] else rdtsc endif sub eax,dword ptr [T0] sbb edx,dword ptr [T0 + 4] mov dword ptr [Storage],eax mov dword ptr [Storage + 4],edx endm %SDTSC macro Storage, dT mov eax,dword ptr [dT] mov edx,dword ptr [dT + 4] add dword ptr [Storage],eax adc dword ptr [Storage + 4],edx endm %INIT macro dT mov dword ptr [dT],0 mov dword ptr [dT + 4],0 endm $Msg CHAR "Cqint = 0x%p, dTq = 0x%p, SdTr = 0x%p, SdTi = 0x%p, dTq/SdTr = 0x%p, dTq/SdTi = 0x%p, SdTr/SdTi = 0x%p, dTr = 0x%p, dTi = 0x%p, Err = 0x%p", 13, 10, 0 Entry proc Local Cqint:ULONG ; Счётчик прерываний за время кванта. Local Tq:LARGE_INTEGER ; TSC начала кванта. Local Tr0:LARGE_INTEGER ; TSC возврата из прерывания(начала рабочего интервала). Local Tr1:LARGE_INTEGER ; TSC прихода прерывания(окончания рабочего интервала). Local dTr:LARGE_INTEGER ; dTSC рабочего интервала. Local dTq:LARGE_INTEGER ; dTSC кванта. Local dTi:LARGE_INTEGER ; dTSC прерывания(Tint) или холостого интервала(Tidle). Local SdTr:LARGE_INTEGER ; Сумма dTr за время кванта. Local SdTi:LARGE_INTEGER ; Сумма dTi за время кванта. invoke SetProcessAffinityMask, -1, 1 mov ebx,32 Log: ; Ожидаем новый квант. %WAIT_NEXT_QUANTUM Next: %INIT SdTr %INIT SdTi mov Cqint,0 %SET_QNT_TRIGGER %TSC Tq ; TSC начала кванта. Квант начинается с возврата из прерывания. Iwait: %TSC Tr0 ; Ожидаем прерывание. %SET_INT_TRIGGER .repeat %TSC Tr1 ; Сохраняем TSC. %GET_INT_TRIGGER .until Zero? inc Cqint %DTSC dTi, Tr1 %SDTSC SdTi, dTi %DTSC dTr, Tr0, Tr1 %SDTSC SdTr, dTr %GET_QNT_TRIGGER jz Iwait cmp Cqint,16 jb Next ; Новый квант. %DTSC dTq, Tq, Tr1 mov eax,dword ptr [dTq] sub eax,dword ptr [SdTr] sub eax,dword ptr [SdTi] .if Carry? not eax .endif ; Err = dTq - SdTr - SdTi push eax push dword ptr [dTi] push dword ptr [dTr] ; SdTr/SdTi xor edx,edx mov eax,dword ptr [SdTr] div dword ptr [SdTi] push eax ; dTq/SdTi xor edx,edx mov eax,dword ptr [dTq] div dword ptr [SdTi] push eax ; dTq/SdTr xor edx,edx mov eax,dword ptr [dTq] div dword ptr [SdTr] push eax push dword ptr [SdTi] push dword ptr [SdTr] push dword ptr [dTq] push Cqint push offset $Msg Call DbgPrint add esp,11*4 dec ebx jnz Log int 3 Видимо нужно ввести поправки для не учтённых(пропущенных) прерываний.
gaeprust Код (Text): Cqint = 0x11, dTq = 0x1acb144, SdTr = 0x1a377ca, SdTi = 0x9375f, dTq/SdTr = 0x1, dTq/SdTi = 0x2e, SdTr/SdTi = 0x2d, dTr = 0x1979a7, dTi = 0x4b, Err = 0x21b Cqint = 0x11, dTq = 0x1acff7c, SdTr = 0x19d3dd7, SdTi = 0x1018db, dTq/SdTr = 0x1, dTq/SdTi = 0x1a, SdTr/SdTi = 0x19, dTr = 0xb01c5, dTi = 0x5972, Err = 0x5735 Cqint = 0x11, dTq = 0x1ae3602, SdTr = 0x1acc136, SdTi = 0x1ba40, dTq/SdTr = 0x1, dTq/SdTi = 0xf9, SdTr/SdTi = 0xf8, dTr = 0x193e00, dTi = 0x47a4, Err = 0x4573 Cqint = 0x11, dTq = 0x1ae1cba, SdTr = 0x1ac2d62, SdTi = 0x225a3, dTq/SdTr = 0x1, dTq/SdTi = 0xc8, SdTr/SdTi = 0xc7, dTr = 0x1936e9, dTi = 0x3842, Err = 0x364a Cqint = 0x12, dTq = 0x1ab91a8, SdTr = 0x1a9ac57, SdTi = 0x2280d, dTq/SdTr = 0x1, dTq/SdTi = 0xc6, SdTr/SdTi = 0xc5, dTr = 0x1933b0, dTi = 0x44d6, Err = 0x42bb Cqint = 0x11, dTq = 0x1ae2800, SdTr = 0x1abd013, SdTi = 0x294a8, dTq/SdTr = 0x1, dTq/SdTi = 0xa6, SdTr/SdTi = 0xa5, dTr = 0x1928b9, dTi = 0x3ef5, Err = 0x3cba Cqint = 0x11, dTq = 0x1ad2f2e, SdTr = 0x1a48a61, SdTi = 0x8e259, dTq/SdTr = 0x1, dTq/SdTi = 0x30, SdTr/SdTi = 0x2f, dTr = 0x193916, dTi = 0x4018, Err = 0x3d8b Cqint = 0x14, dTq = 0x1ae87d5, SdTr = 0x19be837, SdTi = 0x13f506, dTq/SdTr = 0x1, dTq/SdTi = 0x15, SdTr/SdTi = 0x14, dTr = 0x1939d1, dTi = 0x1582d, Err = 0x15567 Cqint = 0x14, dTq = 0x17e61c2, SdTr = 0x171f3f7, SdTi = 0xd41f7, dTq/SdTr = 0x1, dTq/SdTi = 0x1c, SdTr/SdTi = 0x1b, dTr = 0x192cd3, dTi = 0xd6da, Err = 0xd42b Cqint = 0x16, dTq = 0x1ae2d3e, SdTr = 0x19d5c89, SdTi = 0x1125c4, dTq/SdTr = 0x1, dTq/SdTi = 0x19, SdTr/SdTi = 0x18, dTr = 0x1079e4, dTi = 0x5808, Err = 0x550e Cqint = 0x14, dTq = 0x1ae255f, SdTr = 0x1a673c6, SdTi = 0x9293b, dTq/SdTr = 0x1, dTq/SdTi = 0x2e, SdTr/SdTi = 0x2e, dTr = 0x19367b, dTi = 0x17a44, Err = 0x177a1 Cqint = 0x12, dTq = 0x1614e2a, SdTr = 0x154ad02, SdTi = 0xd6a83, dTq/SdTr = 0x1, dTq/SdTi = 0x1a, SdTr/SdTi = 0x19, dTr = 0x1933da, dTi = 0xcbd6, Err = 0xc95a Cqint = 0x15, dTq = 0x194c2ce, SdTr = 0x186e536, SdTi = 0x2b0b3f, dTq/SdTr = 0x1, dTq/SdTi = 0x9, SdTr/SdTi = 0x9, dTr = 0x142af2, dTi = 0x1d307c, Err = 0x1d2da6 Cqint = 0x14, dTq = 0x1ad55a9, SdTr = 0x19e76ad, SdTi = 0xedca4, dTq/SdTr = 0x1, dTq/SdTi = 0x1c, SdTr/SdTi = 0x1b, dTr = 0x19a652, dTi = 0x5f, Err = 0x258 Cqint = 0x16, dTq = 0x1ae1acb, SdTr = 0x1a291b5, SdTi = 0xc0408, dTq/SdTr = 0x1, dTq/SdTi = 0x23, SdTr/SdTi = 0x22, dTr = 0x193e2a, dTi = 0x7e1b, Err = 0x7af1 Cqint = 0x15, dTq = 0x1b416b0, SdTr = 0x1a0ee7a, SdTi = 0x13251b, dTq/SdTr = 0x1, dTq/SdTi = 0x16, SdTr/SdTi = 0x15, dTr = 0x1f1ec3, dTi = 0x84, Err = 0x31b Cqint = 0x14, dTq = 0x1a74fc9, SdTr = 0x19eee15, SdTi = 0x9de2e, dTq/SdTr = 0x1, dTq/SdTi = 0x2a, SdTr/SdTi = 0x2a, dTr = 0x193a9b, dTi = 0x17efe, Err = 0x17c79 Cqint = 0x17, dTq = 0x1ae14f6, SdTr = 0x1aa42ad, SdTi = 0x4286b, dTq/SdTr = 0x1, dTq/SdTi = 0x67, SdTr/SdTi = 0x66, dTr = 0x19355d, dTi = 0x58f7, Err = 0x5621 Cqint = 0x13, dTq = 0x17b7de8, SdTr = 0x17379d4, SdTi = 0xf781d, dTq/SdTr = 0x1, dTq/SdTi = 0x18, SdTr/SdTi = 0x18, dTr = 0x192d33, dTi = 0x77681, Err = 0x77408 Cqint = 0x17, dTq = 0x18d0426, SdTr = 0x170f18e, SdTi = 0x249cdf, dTq/SdTr = 0x1, dTq/SdTi = 0xa, SdTr/SdTi = 0xa, dTr = 0x193a89, dTi = 0x88f72, Err = 0x88a46 Cqint = 0x15, dTq = 0x1ad4b94, SdTr = 0x1a1f3a9, SdTi = 0xbd831, dTq/SdTr = 0x1, dTq/SdTi = 0x24, SdTr/SdTi = 0x23, dTr = 0x16b8e7, dTi = 0x8308, Err = 0x8045 Cqint = 0x16, dTq = 0x1ae74a9, SdTr = 0x19f0898, SdTi = 0xf6903, dTq/SdTr = 0x1, dTq/SdTi = 0x1b, SdTr/SdTi = 0x1a, dTr = 0x129253, dTi = 0x5f, Err = 0x30e Cqint = 0x16, dTq = 0x1aebab0, SdTr = 0x19d5706, SdTi = 0x11fc5d, dTq/SdTr = 0x1, dTq/SdTi = 0x17, SdTr/SdTi = 0x16, dTr = 0x18c877, dTi = 0x9e55, Err = 0x98b2 Cqint = 0x14, dTq = 0x1acf641, SdTr = 0x1a019f3, SdTi = 0xd38ce, dTq/SdTr = 0x1, dTq/SdTi = 0x20, SdTr/SdTi = 0x1f, dTr = 0x193c32, dTi = 0x5f49, Err = 0x5c7f Cqint = 0x17, dTq = 0x1ae12d6, SdTr = 0x19e6b5c, SdTi = 0x1026f7, dTq/SdTr = 0x1, dTq/SdTi = 0x1a, SdTr/SdTi = 0x19, dTr = 0x1356de, dTi = 0x82df, Err = 0x7f7c Cqint = 0x15, dTq = 0x1a68b67, SdTr = 0x1959651, SdTi = 0x115daa, dTq/SdTr = 0x1, dTq/SdTi = 0x18, SdTr/SdTi = 0x17, dTr = 0xc81bd, dTi = 0x6b56, Err = 0x6893 Cqint = 0x15, dTq = 0x1a7683f, SdTr = 0x186f153, SdTi = 0x21b0b6, dTq/SdTr = 0x1, dTq/SdTi = 0xc, SdTr/SdTi = 0xb, dTr = 0x192d87, dTi = 0x141b0, Err = 0x139c9 Cqint = 0x15, dTq = 0x1ae5334, SdTr = 0x19ecc7c, SdTi = 0xf8301, dTq/SdTr = 0x1, dTq/SdTi = 0x1b, SdTr/SdTi = 0x1a, dTr = 0x243ac, dTi = 0x4b, Err = 0x3b7 Cqint = 0x16, dTq = 0x1a3a2ff, SdTr = 0x193524a, SdTi = 0x10b887, dTq/SdTr = 0x1, dTq/SdTi = 0x19, SdTr/SdTi = 0x18, dTr = 0x19327c, dTi = 0x6b20, Err = 0x67d1 Cqint = 0x16, dTq = 0x1ad0761, SdTr = 0x1a89d02, SdTi = 0x4cdcc, dTq/SdTr = 0x1, dTq/SdTi = 0x59, SdTr/SdTi = 0x58, dTr = 0x17af96, dTi = 0x66b4, Err = 0x636c Cqint = 0x13, dTq = 0x1ae38e6, SdTr = 0x1845ac3, SdTi = 0x2ad9a6, dTq/SdTr = 0x1, dTq/SdTi = 0xa, SdTr/SdTi = 0x9, dTr = 0x1938ad, dTi = 0x103b6, Err = 0xfb82 Cqint = 0x18, dTq = 0x1ae2385, SdTr = 0x1a79163, SdTi = 0x6ee2e, dTq/SdTr = 0x1, dTq/SdTi = 0x3e, SdTr/SdTi = 0x3d, dTr = 0x38b1f, dTi = 0x5f11, Err = 0x5c0b