Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
_Alexey_
0 / 0 / 0
Регистрация: 08.12.2015
Сообщений: 10
1

Ассоциативность КЭШа

09.05.2016, 13:38. Просмотров 802. Ответов 27
Метки нет (Все метки)

Подскажите пожалуйста, как определить ассоциативность КЭШа второго уровня, использую cpuid ?

У меня есть код вызова моей функции из dll библиотеки:

C
1
2
3
4
5
//Информацию о КЭШе
int CacheInfo[4];
 
//Вызываем функцию и получаем информацию о КЭШе
gPrInf(CacheInfo, ?);
Что надо передать, чтобы получить нужную мне информацию?

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// Определяем наличие Ассоциативности
extern "C" __declspec(dllexport)
void cpuid(int rgs[4], int func)
{
    int ieax, iebx, iecx, iedx;
    __asm
    {
        mov eax, func
        cpuid
        mov ieax, eax
        mov iebx, ebx
        mov iecx, ecx
        mov iedx, edx
    }
    rgs[0] = ieax;
    rgs[1] = iebx;
    rgs[2] = iecx;
    rgs[3] = iedx;
}
Как правильно обработать результат?

Облазил кучу сайтов, но так ничего не нашел.

P.s. В программировании новичок.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.05.2016, 13:38
Ответы с готовыми решениями:

Как на ассемблере организовать чтение кэша
Собственно вопрос, как на ассемблере организовать чтение кэша (сайт работает,...

Коммутативность и ассоциативность
domains s=symbol predicates paralel1(s,s) paralel2(s,s) ...

Ассоциативность операции на множестве
Пусть a, b, c - элементы множества A. И на этом множестве задана операция *....

Ассоциативность произведения матриц
Если A, B и C - матрицы, то истинно ли A*B*C\equiv \left(A*B\right)*C?

Ассоциативность инкремента декремента
Всем привет. Вот такую табличку недавно нашел -...

27
R71MT
5309 / 1470 / 313
Регистрация: 29.07.2014
Сообщений: 2,513
Записей в блоге: 5
09.05.2016, 14:20 2
Цитата Сообщение от _Alexey_ Посмотреть сообщение
Как правильно обработать результат?
Что у тебя в EAX? От него зависит формат выходных данных.
Вот значения EAX для процессоров INTEL, остальные в скрепке:
Код
 EAX    Описание выходных данных
---------------------------------------------------------------------
 00h    EAX - кол-во поддерживаемых команд CPUID
        EBX - ASCII строка "GenuineIntel",
        ECX -     ..распределённая,
        EDX -            ..по-трём регистрам EBX,ECX,EDX
---------------------------------------------------------------------
 01h    EAX - модель, тип, семейство
        EBX - резерв..
        ECX - резерв..
        EDX - дополнительная информация
---------------------------------------------------------------------
 02h    EAX - инфа о встроенном кэше
        EBX - ^^
        ECX - ^^
        EDX - ^^
---------------------------------------------------------------------
 03h    EAX - резерв..
        EBX - резерв..
        ECX - серийный номер процессора
        EDX - ^^
0
Вложения
Тип файла: zip x86_CPUID.zip (31.1 Кб, 5 просмотров)
_Alexey_
0 / 0 / 0
Регистрация: 08.12.2015
Сообщений: 10
09.05.2016, 16:20  [ТС] 3
Нашел что мне нужно.
Добавил строчку, где кладу в регистр ECX 2 - уровень нужного мне КЭШа.

Вопрос. Что это за число: EAX=8000_001Dh?
Если вызвать функцию с таким параметром:
C
1
2
//Вызываем функцию и получаем информацию о КЭШе
gPrInf(CacheInfo, 0x8000001D);
То результат будет следующим:
C
1
2
3
4
CacheInfo[0] = 256
CacheInfo[1] = 576
CacheInfo[2] = 0
CacheInfo[3] = 0
Как мне получить нужную информацию?
0
Миниатюры
Ассоциативность КЭШа  
R71MT
5309 / 1470 / 313
Регистрация: 29.07.2014
Сообщений: 2,513
Записей в блоге: 5
09.05.2016, 17:00 4
Какой процессор у тебя?
Забей сперва fn(0) и посмотри в EAX сколько команд поддерживается.
А твои данные переведи в BIN и смотри по таблице. Как-то так..
Код
256h = 0000 0010 0101 0110
576h = 0000 0101 0111 0110
Добавлено через 1 минуту
Цитата Сообщение от _Alexey_ Посмотреть сообщение
Добавил строчку, где кладу в регистр ECX 2
..нужно в EAX
0
_Alexey_
0 / 0 / 0
Регистрация: 08.12.2015
Сообщений: 10
09.05.2016, 17:44  [ТС] 5
Процессор: Intel Core i3-2350M.

Почему в ECX? Согласно изображению выше, в EAX кладу 0x8000001D, а в ECX кладу 2 (т.к. мне нужен 2 уровень).

Код функции:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// Определяем наличие Ассоциативности
extern "C" __declspec(dllexport)
void cpuid(int rgs[4], int func)
{
    int ieax, iebx, iecx, iedx;
    __asm
    {
        mov eax, func
        mov ecx, 2  //Для КЭШа 2 уровня
        cpuid
        mov ieax, eax
        mov iebx, ebx
        mov iecx, ecx
        mov iedx, edx
    }
    rgs[0] = ieax;
    rgs[1] = iebx;
    rgs[2] = iecx;
    rgs[3] = iedx;
}
Забей сперва fn(0) и посмотри в EAX сколько команд поддерживается.
В смысле положить в EAX 0?
Если да, то результат следующий:
C
1
2
3
4
CacheInfo[0] = 13
CacheInfo[1] = 1970169159
CacheInfo[2] = 1818588270
CacheInfo[3] = 1231384169
Для ассоциативности мне нужен 9 бит. Вопрос, конечно, идиотский, но считать справа?
0
R71MT
5309 / 1470 / 313
Регистрация: 29.07.2014
Сообщений: 2,513
Записей в блоге: 5
09.05.2016, 18:32 6
..да, биты считаются справа-налево, начиная с нуля. (31-0)
у тебя cpuid поддерживает 13 функций. Ни какой ECX там не нужен, только EAX:
Assembler
1
2
mov  eax,8000001Dh
cpuid
Добавлено через 17 минут
..почитай про CPUID
0
_Alexey_
0 / 0 / 0
Регистрация: 08.12.2015
Сообщений: 10
10.05.2016, 11:00  [ТС] 7
Переделал так, как вы сказали:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// Определяем наличие Ассоциативности
extern "C" __declspec(dllexport)
void cpuid(int rgs[4])
{
    int ieax, iebx, iecx, iedx;
    __asm
    {
        mov eax, 8000001Dh
        cpuid
        mov ieax, eax
        mov iebx, ebx
        mov iecx, ecx
        mov iedx, edx
    }
    rgs[0] = ieax;
    rgs[1] = iebx;
    rgs[2] = iecx;
    rgs[3] = iedx;
}
Получаю следующий результат:
C
1
2
3
4
CacheInfo[0] = 7
CacheInfo[1] = 832
CacheInfo[2] = 832
CacheInfo[3] = 0
Рассматривать CacheInfo[1] (он же EBX)?
Код
832h = 0000 0011 0100 0000
Нужный мне бит 9 справа, он 1 -> ассоциативный.
Правильно ли я понял?
0
R71MT
5309 / 1470 / 313
Регистрация: 29.07.2014
Сообщений: 2,513
Записей в блоге: 5
10.05.2016, 11:28 8
..почему бит(9) ты проверяешь в EBX? По таблице этот бит нужно проверять в EAX.

А функцию(4) не пробовал? Она-же тоже проверяет кэш.
И правильно, для кэша нужно указывать ещё и ECX (уровень) , т.е. получится для fn(4):
Assembler
1
2
3
mov  ecx,2
mov  eax,4
cpuid
0
_Alexey_
0 / 0 / 0
Регистрация: 08.12.2015
Сообщений: 10
10.05.2016, 12:34  [ТС] 9
Цитата Сообщение от R71MT Посмотреть сообщение
..почему бит(9) ты проверяешь в EBX? По таблице этот бит нужно проверять в EAX.
Ошибся. Конечно, EAX надо смотреть.

Цитата Сообщение от R71MT Посмотреть сообщение
А функцию(4) не пробовал? Она-же тоже проверяет кэш.
Забил с 4. Результат получил такой:
Код
469778755h = 1 1100 0000 0000 0100 0001 0100 0011
Здесь 9 бит равен 1 -> ассоциативность есть.

Остался последний вопрос. Как мне проверит этот бит, не переводя в 2 сс. ?
0
R71MT
5309 / 1470 / 313
Регистрация: 29.07.2014
Сообщений: 2,513
Записей в блоге: 5
10.05.2016, 12:51 10
Assembler
1
2
3
4
5
   test  eax,9      ; проверяем бит(9)
   jnz    ok        ; если не нуль, то ОК!
   jmp    exit      ; здесь ошибка!
ok:
;.....
0
_Alexey_
0 / 0 / 0
Регистрация: 08.12.2015
Сообщений: 10
10.05.2016, 12:59  [ТС] 11
Думаю это будет аналогично этому:
Код
int cacheAssoc = CacheInfo[0] & 0x9;
В итоге получу 1 -> ассоц.

Правильно?
0
Constantin Cat
2982 / 1116 / 376
Регистрация: 28.02.2015
Сообщений: 2,457
Завершенные тесты: 1
10.05.2016, 13:06 12
R71MT, если 9, получится третий и нулевой биты.


Добавлено через 1 минуту
9-ый бит = 25610
1
R71MT
5309 / 1470 / 313
Регистрация: 29.07.2014
Сообщений: 2,513
Записей в блоге: 5
10.05.2016, 13:14 13
..э точно! Нужно-же в бине:
Assembler
1
test  eax,1000000000b  ; или 200h
0
_Alexey_
0 / 0 / 0
Регистрация: 08.12.2015
Сообщений: 10
10.05.2016, 14:10  [ТС] 14
Цитата Сообщение от R71MT Посмотреть сообщение
..э точно! Нужно-же в бине:
Код
test eax,1000000000b *; или 200h
Если в Си записать так:
C
1
int cacheAssoc = CacheInfo[0] & 0x200;
Это будет аналогично? Просто получается 0.
0
shmkv
1749 / 431 / 59
Регистрация: 21.07.2015
Сообщений: 1,127
10.05.2016, 14:12 15
Цитата Сообщение от Constantin Cat Посмотреть сообщение
9-ый бит = 256
512
0
Constantin Cat
2982 / 1116 / 376
Регистрация: 28.02.2015
Сообщений: 2,457
Завершенные тесты: 1
10.05.2016, 14:12 16
_Alexey_,
256 =0x100
0
shmkv
1749 / 431 / 59
Регистрация: 21.07.2015
Сообщений: 1,127
10.05.2016, 14:20 17
Вообще все не так, 0x8...1D даже в манах интел не фигурирует. Есть штатная функция EAX=80000006H она вернет в ECX:
Bits 07 - 00: Cache Line size in bytes.
Bits 11 - 08: Reserved.
Bits 15 - 12: L2 Associativity field *.
Bits 31 - 16: Cache size in 1K units.
Reserved = 0.
...
NOTES:
* L2 associativity field encodings:
00H - Disabled.
01H - Direct mapped.
02H - 2-way.
04H - 4-way.
06H - 8-way.
08H - 16-way.
0FH - Fully associative.
0
Constantin Cat
2982 / 1116 / 376
Регистрация: 28.02.2015
Сообщений: 2,457
Завершенные тесты: 1
10.05.2016, 14:24 18
shmkv,
Не путайте со тепенью двойки:
0123 4567 89
0000 0000 1
0
R71MT
5309 / 1470 / 313
Регистрация: 29.07.2014
Сообщений: 2,513
Записей в блоге: 5
10.05.2016, 14:24 19
Цитата Сообщение от _Alexey_ Посмотреть сообщение
469778755h = 1 1100 0000 0000 0100 0001 0100 0011
Здесь 9 бит равен 1 -> ассоциативность есть.
..здесь бит(9) равен нуль
0
shmkv
1749 / 431 / 59
Регистрация: 21.07.2015
Сообщений: 1,127
10.05.2016, 14:27 20
Constantin Cat, и что?

Добавлено через 1 минуту
9 бит маска = 1000000000b = 0x200 = 512
0
10.05.2016, 14:27
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.05.2016, 14:27

проанализировать ассоциативность, коммутативность
Задано алгебру А(М;*), де М=а 0 0 0...

Проверка массива на ассоциативность
Вообщем я получаю какой-то массив: array(1, 2, 3, 8, 2) или array('w' =>...

Доказать ассоциативность симметрической разности
не очень получается, может кто-то уже сталкивался с таким?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru