?

Log in

No account? Create an account
Что изучать российским призывникам в Научные Роты? - Юрий Панчул [entries|archive|friends|userinfo]
Money can buy bandwidth. Latency requires bribing God.

[ website | My Website ]
[ userinfo | livejournal userinfo ]
[ archive | journal archive ]

Что изучать российским призывникам в Научные Роты? [Sep. 29th, 2013|11:11 pm]
Yuri Panchul
natalya_polyakovaМесяц назад Русская Интеллигенция (фото справа) возмущалась, что я не протестую против заведенных недавно в России "Научных Рот", в частности для программистов. Я же говорил, что это лучше, чем обычная служба в армии и не похоже на "шарашки". А также, что изолированные от компьютерных игр и интернета молодые люди могли бы сосредоточенно выучить какое-нибудь полезное для гражданки ремесло:


Yuri Panchul: Я читал про туполевские шарашки. Но это похоже другое. Туполевская шарашка была все-таки формой тюрьмы, пусть даже с хорошим питанием и творческой работой. А эти "научные роты" - замена обычной службы в армии. От практики такого рода студенту может быть даже польза, если ее правильно организовать.

Yuri Panchul: где я написал, что шарашки - это хорошо? Покажите мне мои слова. Давайте формулировать мысли точно. Шарашки - плохо. Обязательная армия - плохо. Но если обязательная армия в России присутствует и с этим фактом ничего нельзя сделать, то есть три выхода: 1) заплакать; 2) попросить Обаму оккупировать Россию; 3) попытаться каким-либо образом компенсировать недостатки ситуации и/или по возможности извлечь из нее пользу для ее участников. Вариант (1) ни к чему не ведет. Вариант (2) не одобрит Конгресс. Остается вариант (3). Или я чего-то пропустил?


Сегодня я решил написать пост, какого рода материал могли бы изучать призывники "Научных Рот", чтобы получить от него пользу для Шойгу, призывников и западных компаний. В негативе останется только русская интеллигенция, но они стерпят, ибо были в меланхолии еще со времен "Курсистки" Ярощенко.

Пример занятия Научной Роты в области программирования микроконтроллеров

Майор Строгов: Рота! Равняйсь! Смирно! ... Товарищи призывники, сегодня мы проведем учения по оптимизации производительности микроконтроллеров вероятностного противника PIC32MX320128H. ... Призывник Иванов!

Призывник Иванов: Я!

Майор Строгов: Объявите цель сегодняшних маневров.

Призывник Иванов: Согласно сведениям нашей разведки, вероятностный противник поставляет изделие PIC32MX320128H с конфигурацией для наиболее консервативного сценария использования, в обстановке критических боевых температур и с минимумом включенных устройств. С помощью компиляторных оптимизаций и простой манипуляции содержимых контрольных регистров кэша и префетчера можно повысить скоростре... то бишь производительность изделия для некоторых приложений более чем в 20 раз.

Майор Строгов: Отлично. Призывник Петров!

Призывник Петров: Я!

Майор Строгов: Вас призвали из МИФИ?

Призывник Петров: Так точно!

Майор Строгов: Вот и отлично. Зачитайте объяснение о функционировании кэша из методички профессора Московского Инженерно-Физического Института И.И.Шагурина.

Призывник Петров: Есть!



Кэш-память представляет собой быстродействующую буферную память ограниченного объема, которая располагается между процессором и ОЗУ.

В процессе работы микропроцессорной системы отдельные блоки информации копируются из ОЗУ в кэш-память. Процедура загрузки информации из ОЗУ в кэш-память называется кэширование. Когда процессор обращается за командой или данными, то сначала проверяется их наличие в кэш-памяти. Если необходимая информация находится там, то она быстро извлекается, так как обращение к кэш-памяти производится с тактовой частотой процессора. Такой случай обращения называют кэш-попаданием. Если необходимая информация в кэш-памяти отсутствует, то она выбирается из ОЗУ и одновременно заносится в кэш-память. Такой случай называют кэш-пpомахом. При этом производится обращение к ОЗУ по системной шине.

Повышение быстродействия вычислительной системы достигается в том случае, когда кэш-попадания реализуются намного чаще, чем кэш-пpомахи. Высокий процент кэш-попаданий обеспечивается благодаря тому, что в большинстве случаев программы обращаются к ячейкам памяти, расположенным вблизи от ранее использованных. Это свойство, которое называют локальностью программ, обеспечивает эффективность использования кэш-памяти.



Майор Строгов: Вольно, садись. Но, как вам известно, товарищи призывники, текст товарища Шагурина относится к отечественному изделию 1890ВМ2Т, которое с середины 1980-х используется для оперативно-тактических комплексов, авиационных и других объектов. А сегодня мы изучем что, призывник Сидоров?

Призывник Сидоров: Я! Микроконтроллер вероятностного противника PIC32MX320128H. Разрешите доложить?

Майор Строгов: Докладывайте.

Призывник Сидоров: Кэш, описанный в методичке профессора Шагурина - это двухканальный множественно-ассоциативный кэш (на языке вероятностного противника two-way set associative cache), предназначенный для ускорения работы с медленной оперативной памятью. Изделие 1890ВМ2Т содержит два таких кэша размером по 8 Кбайт, один для работы с памятью программ, другой для работы с памятью данных. Эти похожи на двухканальные множественно-ассоциативные кэши изделия вероятностного противника семейства PIC32MZ, но не PIC32MX320128H.

Майор Строгов: Правильное замечание. А что из себя представляет кэш PIC32MX, мы попросим рассказать Сунь Ли, призывницу по студенческому обмену из Китайской Народной Республики.

Призывница по студенческому обмену из Китайской Народной Республики Сунь Ли: Есть, майор Строгов! Кэш PIC32MX320128H представляет собой небольшой полностью ассоциативный кэш (на языке вероятностного противника fully associative cache), предназначенный для ускорения работы с флэш-памятью. Так как полностью ассоциативный кэш - дорогое удовольствие в смысле хардверных ресурсов, то он имеет небольшой размер - всего 16 линий по 4 32-битных слова. Кэш скомбинирован с префетчером, который механически подгружает в специальный буфер линию из слов, следущую по адресам программы за текущей.

Майор Строгов: Зачем это нужно? Почему вероятностный противник не поставил в микроконтроллер флэш-память, работающую с тактовой частотой процессора?


Призывница Сунь Ли: Инженерное дело - искусство компромисса. Быстрая флэш память потребляет много электроэнергии. Вы же не хотите, чтобы у вас в полевых условиях закончилась батарейка? Что тогда подумает о вас противник?

Майор Строгов: Это верно, призывница Сунь Ли. Есть ли у кого вопросы, дополнения?

Призывник Щаранский: Разрешите доложить!

Майор Строгов: Докладывайте.





Призывник Щаранский: Тактовая частота PIC32MX может варьироваться нуля до 80 мегагерц, а тактовая частота флэша равна 30 мегагерц. Поэтому для разработчика системы есть много способов балансировать между производительностью и энергопотреблением:

  • При низкой тактовой частоте процессор потребляет мало и работает не быстрее, чем флэш-память.


  • При высокой тактовой частоте для доступа к флэш-памяти приходится вставлять дополнительный циклы ожидания (как говорит вероятностный противник, wait states). Теперь, чтобы избежать замедления, нужно включать кэш и префетчер, которые работают на одинаковой с процессором частоте.


Майор Строгов: Очень хорошо. Садитесь. Призывница Сунь Ли!

Призывница Сунь Ли: Я!

Майор Строгов: Чего вы замечтались? У призывника Щаранского невеста есть. В далекой стране, хе-хе. Вы не краснейте, а лучше ответьте на вопрос.

Призывница Сунь Ли: Слушаю, товарищ майор!

Майор Строгов: Имеет ли смысл включать кэш и префетчер, когда частота процессора ниже частоты, на которой работает флэш?

Призывница Сунь Ли: Иногда имеет, товарищ майор! Энергопотребление во время чтения из кэша ниже, чем энергопотребление во время чтения из флэша.

Майор Строгов: Правильно, призывница Сунь Ли. Объявляю вам благодарность!

Призывница Сунь Ли: Служу Советскому Союзу, товарищ майор! ... Ой, я что-то не то сказала?

Майор Строгов: Неважно. Рота! Ровняйсь! Смирно! Сделаем небольшой перерыв и перейдем перейдем к практическим занятиям. Вольно! Разойдись!







Майор Строгов: Рота! Равняйсь! Смирно! ... Продолжим наши занятия. Призывник Радуллов!

Призывник Радуллов: Я!

Майор Строгов: Хм, интересная фамилия. А зовут тебя как?

Призывник Радуллов: Осмелюсь доложить, Абдулла!

Майор Строгов: Абдулла Радуллов. А кто у тебя маменька?


Майор Строгов: А, впрочем неважно. У той Радуловой в фамилии была одна "л".

Призывник Радуллов: Что изволите приказать, товарищ майор?!

Майор Строгов: Призывник Радуллов, доложите способ постановки эксперимента для анализа работы кэша и префетчера изделия PIC32MX320128H.

Призывник Радуллов: Докладываю: Для получения данных первого приближения я написал две программы, выполняющие простое действие - сложение чисел из небольшого массива.

Одна программа использует небольшой цикл, которые должен полностью помещаться в кэше:
    int i, n = 0;

    for (i = 0; i < n_array_elements; i ++)
        n += a [i];

Вторая программа представляет собой длинный линейный участок инструкций, эксплуатирующий функцию префетчера.
    n +=   a [ 0] + a [ 1] + a [ 2] + a [ 3]
         + a [ 4] + a [ 5] + a [ 6] + a [ 7]
         + a [ 8] + a [ 9] + a [10] + a [11]
         + a [12] + a [13] + a [14] + a [15];


Далее я написал восемь функций с всеми возможными комбинациями:

  • 4 функции исполняют компактный цикл, 4 функции исполняют линейный участок

  • 4 функции исполняют код из флэша, 4 функции исполняют код из ОЗУ, конкретно SRAM

  • 4 функции работают с массивом, находящимся в флэше, 4 функции работают с массивом находящимся в SRAM



Майор Строгов: Каким образом вы даете знать компилятору и линкеру, что функция должна находится во флэше или в SRAM?

Призывник Радуллов: С помощью специального зарезервированного слова __longramfunc__. Оно указывает компилятору и линкеру, что во время начала работы программы в микроконтроллере код функции должен быть переписан из флэша в SRAM:
__longramfunc__ int program_in_ram___data_in_ram____loop (void)


Майор Строгов: Каким образом вы даете знать компилятору и линкеру, что массив чисел должен находится во флэше или в SRAM?

Призывник Радуллов: Чтобы массив находился во флэше, его нужно инициализоровать поставить для его типа аттрибут "const":
const int array_in_flash [n_array_elements]
    = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 };


А вот для массива в SRAM я поставил аттрибут "volatile":
volatile int array_in_ram [n_array_elements]
    = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 };


Если не поставить "volatile", то компилятор будет удалять "лишние" по его мнению обращения к памяти, и сравнение программы с циклом с программой без цикла будет некорректным.

Майор Строгов: А почему вы не поставили и атрибут "const", и "volatile" для массива в флэше?

Призывник Радуллов: Если так сделать, то компилятор поместит массив в некэшируемый регион памяти, и мы не сможем проверить эффект включения / выключения кэша при работе с этим массивом.

Майор Строгов: А зачем вообще проверять массив данных во флэше? Кэш PIC32MX вообще работает с чтением и записью данных? Или он предназначен только для выборки программ?

Призывник Радуллов (бледнея): Ой. ... Я забыл...


pushkin
Майор Строгов: А кто знает, Пушкин?

Призывник Пушкин: Я!

Майор Строгов: Призывник Пушкин, объясните призывнику Радуллову про линии данных в кэше PIC32MX.

Призывник Пушкин: Есть!

Призывник Пушкин: Программист может контролировать кэш изделия PIC32MX320128H с помощью нескольких контрольных регистров. Поле DCSZ регистра CHECON позволяет выделить одну, две или четыре линии кэша для данных:
    CHECONbits.DCSZ = 3;  // Выделить 4 линии кэша для данных
    CHECONbits.DCSZ = 2;  // Выделить 2 линии кэша для данных
    CHECONbits.DCSZ = 1;  // Выделить 1 линию кэша для данных
    CHECONbits.DCSZ = 0;  // Запретить кэширование данных флэша



Майор Строгов: Расскажите про доступные программистам контрольные регистры изделия PIC32MX320128H поподробнее.

Призывник Пушкин: Есть!

Программист микроконтроллера PIC32MX320128H может получить статистику попаданий, промахов и прерванных префетчей из контрольных регистров CHEHIT, CHEMIS и CHEPFABT, которые можно читать и обнулять. Также существует регистр CHELRU, который отражает, какие из линий кэша долго не использовались - эта статистика скорее важна хардверным дизайнерам кэша, чем программистам.

Самыми интересными регистрами являются CHEACC и CHETAG, которые позволяют программистам подсмотреть текущее состояние линий кэша. Для этого нужно просто присвоить CHEACC номер линии, после чего считать состояние линии - LVALID, LLOCK, LTYPE из CHETAG, вычислить адрес линии используя поля LTAGBOOT и LTAG и считать содержимое линии из регистров CHEW0, CHEW1, CHEW2, CHEW3.

Наиболее интересным трюком с кэшем является использование регистра маски CHEMSK для кэширования входа на обработчики прерывания для разных векторов, используя одну и ту же локированную линию кэша. Подробнее об этом можно прочитать в документации на изделие PIC32MX320128H.





Майор Строгов: Хорошо, садитесь. ... Призывник Лермонтов!

Призывник Лермонтов: Я!

Майор Строгов: Вы можете наглядно продемонстрировать линии кода, находящиеся в кэше?

Призывник Лермонтов: Так точно! Возьмем нашу программу с циклом и посмотрим на листинг ее компиляции c ассемблерными инструкциями и словами команд:

39:                  int program_in_flash_data_in_flash__loop (void)
9D000030  24E50040   ADDIU A1, A3, 64
40:                  {
41:                      const volatile int * a = array_in_flash;
42:                  
43:                      int i, k, n = 0;
9D000024  00001021   ADDU V0, ZERO, ZERO
44:                  
45:                      for (k = 0; k < times_to_repeat; k ++)
9D000020  00003021   ADDU A2, ZERO, ZERO
9D000028  3C079D00   LUI A3, -25344
9D00002C  24E73884   ADDIU A3, A3, 14468
9D000034  0B400016   J 0x9D000058
9D000038  240803E8   ADDIU T0, ZERO, 1000
9D00004C  24C60001   ADDIU A2, A2, 1
9D000050  10C80003   BEQ A2, T0, 0x9D000060
9D000054  00000000   NOP
9D000058  0B40000F   J 0x9D00003C
9D00005C  00E01821   ADDU V1, A3, ZERO
46:                      {
47:                          for (i = 0; i < n_array_elements; i ++)
9D000044  1465FFFD   BNE V1, A1, 0x9D00003C
9D000048  00441021   ADDU V0, V0, A0
48:                              n += a [i];
9D00003C  8C640000   LW A0, 0(V1)
9D000040  24630004   ADDIU V1, V1, 4
49:                      }
50:                  
51:                      return n;
52:                  }
9D000060  03E00008   JR RA
9D000064  00000000   NOP


Майор Строгов: И что?


Призывник Лермонтов: А теперь запустим ее на микроконтроллере и с помощью написанной мною утилиты распечатаем содержание кэша через UART подсоединенный к консольному окну на ротном ноутбуке:

************************************************************
*                                                          *
*       Enable flash data caching                          *
*                                                          *
************************************************************
program_in_flash_data_in_flash__loop                   50015
*********  prefetch cache report  *********

Cache Coherency setting on a PFM Program Cycle bit:
    Invalidate all data lines and instruction lines that are not locked

Data Cache Size: Enable, 4 lines

Predictive Prefetch Cache:
    Enable for both cacheable and non-cacheable regions

PFM Access Time: 3 SYSCLK wait states

LRU: 00318C40

Counters

    Hit            :      80190
    Miss           :       5015
    Prefetch Abort :      75018

Cache lines:

     0 1D0011D0 valid        instruction mask:    0   24420001:1445FFFA:00471825:00001021
     1 1D000020 valid        instruction mask:    0   00003021:00001021:3C079D00:24E738C8
     2 1D000040 valid        instruction mask:    0   24630004:1465FFFD:00441021:24C60001
     3 
     4 1D0011C0 valid        instruction mask:    0   ACC34010:8C834020:7C0318C4:AC834020
     5 1D0011F0 valid        instruction mask:    0   0040F809:02002021:3C030001:3463D4C0
     6 1D000050 valid        instruction mask:    0   10C80003:00000000:0B40000F:00E01821
     7 
     8 1D000030 valid        instruction mask:    0   24E50040:0B400016:240803E8:8C640000
     9 1D000060 valid        instruction mask:    0   03E00008:00000000:00003821:00001021
    10 
    11 1D0011E0 valid        instruction mask:    0   40824800:000000C0:3C02A000:244230E0
    12 1D0038D0 valid        data        mask:    0   00000002:00000003:00000004:00000005
    13 1D0038E0 valid        data        mask:    0   00000006:00000007:00000008:00000009
    14 1D0038F0 valid        data        mask:    0   0000000A:0000000B:0000000C:0000000D
    15 1D003900 valid        data        mask:    0   0000000E:0000000F:27BDFFA8:AFB60048 


Призывник Лермонтов: Теперь мы можем легко найти например линию кэша 00003021:00001021:3C079D00:24E738C8 в листинге от компилятора. Хотя с непривычки это может быть неочевидно, так как команды в листинге не всегда идут по порядку адресов. Также обратите внимание на линию с кешированными данными 00000002:00000003:00000004:00000005.

Майор Строгов: Отлично. У вас все?

Призывник Лермонтов: О, забыл сказать: читать линии кэша таким образом желательно кодом, который сам не находится в кэше, во избежание очевидных недоразумений. Этот код должен находиться либо в некэшируемом адресном пространстве флэша, либо в статической памяти.

Майор Строгов: И?

Призывник Лермонтов: Также не рекомендуется локировать несколько линий кэша с одним и тем же адресом.

Майор Строгов: Именно так! Да, за такое локирование при определенных обстоятельствах можно и под трибунал попасть. Спасибо за утилиту, призывник Лермонтов!

Призывник Лермонтов: Служу России!

. . .


Майор Строгов: Призывник Островский!

Призывник Островский: Я!

Майор Строгов: Каким образом производится точное измерение скорости исполнения функций, написанных призывником Радулловым?

Призывник Островский: Мы используем регистр-счетчик COUNT системного сопроцессора (Coprocessor 0) процессорного ядра MIPS M4K, которое используется в микроконтроллерах семейства PIC32MX. Значение этого регистра автоматически увеличивается на единицу каждые два цикла тактового сигнала процессора, независимо от форвардинга и задержек конвейера CPU.

Майор Строгов: Приведите используемый для измерения код.

Призывник Островский: Есть!

    unsigned double_clock_cycles;

    _CP0_SET_COUNT (0);  // Обнулить счетчик

    double_clock_cycles = _CP0_GET_COUNT ();
    result = f ();
    double_clock_cycles = _CP0_GET_COUNT () - double_clock_cycles;


Призывник Островский: В этом способе измерений есть небольшая очевидная погрешность, но, так как мы запускаем тестовую последовательность много раз, этой погрешностью можно пренебречь.

Майор Строгов: Хорошо. Доложите последовательность изменений конфигурации с функциями, написанными призывником Радулловым.

Призывник Островский: Есть! Прежде всего, мы включаем компиляторные оптимизации и сравниваем скорость без оптимизаций со скоростью с включенными оптимизациями первого уровня (опция -O1).

Майор Строгов: Сильно ли отличается генерируемый компилятором код без оптимизаций от кода с оптимизациями?

Призывник Островский: Сильно. Например, код без оптимизаций использует стек и обращения к памяти даже для временных переменных функций, а код с оптимизациями использует для временных переменных регистры. Регистров в архитектуре MIPS много, поэтому использование неоптимизированного кода с переменными, хранящимися в медленной памяти - приводит к неоправданному замедлению наших функций примерно в три раза. Это может быть допустимо для отладки и нетребовательных приложений, но не для измерения производительности.

Майор Строгов: Хорошо, включили оптимизации. Что дальше?

Призывник Островский: Дальше мы шаг за шагом делаем следущие действия:


1. Снижаем количество циклов ожидания при чтении из флэш-памяти по сравнению с чрезмерно консервативными семью циклами, выствленными по умолчанию. Так как флэш работает на 30 MHz, а процессор на 80 MHz, то для безопасной работы достаточно (80 + 30 - 1) / 30 = 3 циклов:
    CHECONbits.PFMWS
        = (SYSCLK_FREQUENCY + FLASH_FREQUENCY - 1) / FLASH_FREQUENCY;

2. Включаем префетчер:
    CHECONbits.PREFEN = 3;

3. Включаем кэш с помощью включения кэширования сегмента памяти Kseg0 (см. документацию):

Это можно сделать с помощью библиотечной функции, поставляемой Microchip Technology:
    CheKseg0CacheOn ();

Или, альтернативно, включить кэширование сегмента Kseg0 можно с помощью манипуляции регистрами системного сопроцессора (Coprocessor 0) ядра MIPS M4K:
    unsigned config = _mfc0 (_CP0_CONFIG, _CP0_CONFIG_SELECT);

    config &= ~ _CP0_CONFIG_K0_MASK;
    config |= 3 << _CP0_CONFIG_K0_POSITION;

    _mtc0 (_CP0_CONFIG, _CP0_CONFIG_SELECT, config);

4. Включаем кэширование данных флэша:
    CHECONbits.DCSZ = 3;  // Enable data caching with a size of 4 Lines

5. Ставим нулевое количество циклов ожидания доступа к статической памяти. Это может не работать для всех режимов работы микроконтроллера, но мы проверяем результаты операций, так что если это не сработает, мы сможем это идентифицировать:

С помощью библиотечной функции, поставляемой Microchip Technology:
    mBMXDisableDRMWaitState ();

С помощью прямого доступа к регистрам микроконтроллера:
    BMXCONbits.BMXWSDRM = 0;





Майор Строгов: Очень хорошо, садитесь, призывник Островский. А вот докладывать результаты мы попросим кого-нибудь другого.



Майор Строгов: Призывник Тургенев!

Призывник Тургенев: Ммммм.....

Майор Строгов: Вы в порядке? Что с вами?


Призывник Маяковский: Разрешите доложить! Призывник Тургенев - немой!

Майор Строгов: Хм, это не помешает ему проходить службу в нашей роте. ... Хотя я честно говоря не знал, что в нашей армии могут служить люди с особенностями этого типа.

Призывник Маяковский: Это все вероятностный противник! Наш президент встретил ихнего президента в Санкт-Петербурге, и они заключили сделку: мы вводим политкорректность и reasonable accommodations в нашей армии, а они ослабляют экспортный контроль!

Майор Строгов: Надо же! Иногда меня приятно удивляет государственная мудрость нашего политического руководства! Что ж, призывник Тургенев и этот джентлемен справа...

Призывник Маяковский: Это призывник Безруков!

Майор Строгов: Да, призывники Тургенев и Безруков - выходите к доске, Тургенев будет рисовать диаграммы, а Безруков их объяснять. Объясните вот эту диаграмму.




Призывник Безруков: Есть, товарищ майор!

Сравним данные по двум (оптимизированным) тестовым функциям с циклами - у первой и программа, и данные находятся во флэше, у второй - в SRAM.

Функция во флэше изначально почти в три с половиной раза медленее, чем функция в SRAM.

Далее, как и можно было бы ожидать, первая функция ускоряется примерно вдвое, когда мы снижает количество циклов доступа к флэш-памяти с семи до трех. Вторая функция при этом совсем не ускоряется, так как она не зависит от флэша.

Затем первая функция несколько ускоряется при включении префетча, после чего - еще в два раза, когда мы включаем кэш, и наконец, еще немного, когда мы включаем кэширование данных. Вторая функция при этом снова не ускоряется.

Теперь функция, работающая с флешем, более чем в два раза быстрее, чем функция, работающая с SRAM. Мы ускорили функцию, работающую с кэшем - более чем в 7 раз!

Наконец, мы отключаем цикл ожидания SRAM (делать это можно не во всех условиях), и скорость функции, работающей с SRAM, приближается к скорости работы функции с оптимизированным кэшем.


olshansky_931182_586072238080265_1788933928_n

Майор Строгов: Спасибо, призывник Безруков! Можете садится. Теперь призывнику Тургеневу поможет призывник Ольшанский.

Призывник Ольшанский: Я протестую! Я не призывник! Меня случайно схватили на улице и забрали в армию, когда я шел к инвестору искать деньги на издание своего литературного журнала! Я против армии для себя и тем более этих "научных рот"! Я получал в школе колы по математике и только по Русской Речи был отличником! И России "научные роты" не нужны!

Майор Строгов: Призывник Ольшанский, вы хотите, чтобы наша Родина Россия экспортировала на мировой рынок только нефть и женщин?

Призывник Ольшанский: Нет, не только! Еще художественную литературу! Мы будем экспортировать Русскую Художественную Литературу! Мои эротические рассказы например! И журнал "Русская Жизнь" про нацию, которая их читает!

Майор Строгов: Понятно. Сейчас мы вас перевоспитаем. Призывник Ольшанский! Ровняйсь! Смирно! Вольно! Разъясните вот эту диаграмму:



Призывник Ольшанский, надрывно: Вынужден повиноваться, наступить на горло моей внутренней Толоконниковой!

Призывник Ольшанский, после паузы, разглядывая диаграмму: Ой, я по-моему понимаю! Мы сравниваем две функции, которые находятся в флэш-памяти и работают с данными во флэш-памяти. Одна функция имплементирована с помощью компактного цикла, а другая - с помощью длинной последовательности инструкций без условного перехода.

Сначала цикл медленнее простой последовательности из-за дополнительной инструкции перехода.

Потом мы видим, что префетч дает относительно лучший эффект на последовательности, так как он всегда "смотрит" вперед, а в цикле часто происходит переход назад.

А вот кэш дает гораздо бОльший эффект на компактный цикл, который помещается в кэш полностью.

На меня нашло просветление! Я понял Дао префетч кэша устройства PIC32MX320128H! Я должен бежать домой, устроить костер из этих бессмысленных Набоковых и Гумилевых, чтобы они не мешали моему развитию!

Майор Строгов: Только не надо экстремизма! Я рад, призывник Ольшанский, что вы все поняли!

Майор Строгов: Товарищи призывники! Ровняйсь! Смирно! Объявляю всем благодарность!

Призывники, хором: Служу России!

Майор Строгов: Вольно! Разойдись! ... Сегодня на обед будут свиные ребра, прямо как у вероятностного противника в Аризоне.




Исходники примера:

http://code.google.com/p/pic32-examples/source/browse/trunk/showroom/pic32mx_prefetch_cache

В частности тест для анализа полезности префетчера и префетч-кэша PIC32MX
http://code.google.com/p/pic32-examples/source/browse/trunk/showroom/pic32mx_prefetch_cache/main.c

В частности утилита для распечатки состояния префетч-кэша PIC32MX
http://code.google.com/p/pic32-examples/source/browse/trunk/showroom/pic32mx_prefetch_cache/prefetch_cache.c

Русскую Интеллигенцию в споре представляли Наталья Полякова и Владимир Шпилберг.


Кто из персонажей повествования вам больше всего понравился?

Майор Строгов
6(15.8%)
Призывник Иванов
0(0.0%)
Призывник Петров
0(0.0%)
Призывник Сидоров
0(0.0%)
Призывник Щаранский
0(0.0%)
Призывница по студенческому обмену из Китайской Народной Республики Сунь Ли
15(39.5%)
Призывник Абдулла Радуллов
4(10.5%)
Призывник Пушкин
0(0.0%)
Призывник Лермонтов
0(0.0%)
Призывник Островский
0(0.0%)
Призывник Тургенев
0(0.0%)
Призывник Маяковский
2(5.3%)
Призывник Безруков
1(2.6%)
Призывник Ольшанский
2(5.3%)
Из-за бугра плюете?
8(21.1%)
LinkReply

Comments:
Page 1 of 3
<<[1] [2] [3] >>
[User Picture]From: archaicos
2013-09-30 06:30 am (UTC)
Регистры ЧЁ-ТАГ? и ЧЕВО? прекрасны. Каждая уважающая себя система должна иметь хотя бы парочку таких регистров. :)

Мне Sarah Palin померещилась на первой фотке. Даже подумал, что после Радуловой ты за неё решил взяться. :)

С таким талантом фантастику надо писать. :)
(Reply) (Thread)
[User Picture]From: panchul
2013-09-30 06:51 am (UTC)
А почему собственно фантастика? У тебя другие представления, как должен выглядеть материал "научных рот" для программистов? Какие?
(Reply) (Parent) (Thread) (Expand)
[User Picture]From: papasha_mueller
2013-09-30 06:31 am (UTC)
Замечательно.
Советую только ввести еще два персонажа:
Поручик Голицын и поручик Ржевский.
Так - пойдет.

ЗЫ. А еще - призывник Гарри Поттер и вольнонаемная Радулова...



Edited at 2013-09-30 06:33 am (UTC)
(Reply) (Thread)
[User Picture]From: panchul
2013-09-30 06:36 am (UTC)
Хорощо, приберегу для сиквела про кэши PIC32MZ!
(Reply) (Parent) (Thread)
[User Picture]From: spamsink
2013-09-30 06:33 am (UTC)
В оригинале противник был "вероятный", а не "вероятностный".

(Reply) (Thread)
[User Picture]From: panchul
2013-09-30 06:52 am (UTC)
Ты еще про волновые функции противника вспомни - в связи с квантовым компьютером это может стать актуальным.
(Reply) (Parent) (Thread)
[User Picture]From: alex_bykov
2013-09-30 06:43 am (UTC)
Ржал местами. Особенно в месте "просветления".

Есть же кат. Простыня заняла почти всю ленту...
(Reply) (Thread)
[User Picture]From: panchul
2013-09-30 06:55 am (UTC)
Ладно, буду сейчас пост фигурно упрятывать под кат - фрагмент за фрагментом.
(Reply) (Parent) (Thread)
[User Picture]From: chuk_and_gek
2013-09-30 07:19 am (UTC)
б-гг, невозбранно взоржал!
токмо, в техописаниях обычно не использут все эти инородческие флеш и кэш. будут заменены на "твердотельных устройств хранения информации" и "промежуточная память с быстрым доступом"
(Reply) (Thread)
[User Picture]From: gineer
2013-10-03 04:09 pm (UTC)
ТУХло и ППСБД :))
(Reply) (Parent) (Thread)
[User Picture]From: fabless
2013-09-30 08:38 am (UTC)
Контроллеры в армии просто внедрять. Например, чтобы девайс периодически опрашивал часового - не спит ли, а тот кнопочку в ответ нажимал.
(Reply) (Thread)
[User Picture]From: archaicos
2013-09-30 10:55 am (UTC)
Часовой подсоединит к этому девайсу другой девайс и будет спать. :)

Помнится, я в старом компе контакт кнопки «стрелять» на джойстике подсоединил к ножке микросхемы, где импульсы пробегали с удобной частотой. :)
(Reply) (Parent) (Thread) (Expand)
[User Picture]From: fabless
2013-09-30 08:41 am (UTC)
По теме Prefetch, есть ли у MIPS что-то типа программируемого streamer'а данных из памяти в параллельные регистры?
(Reply) (Thread)
[User Picture]From: panchul
2013-09-30 04:41 pm (UTC)
Если говорить про ядра MIPS как таковые, функциональность этого типа может быть имплементирована при дизайне системы на кристалле (СнК) в custom блоках ScratchPad RAM и Coprocessor 2. В самой же микроархитектуре процессоров MIPS есть много разнообразных буферов, предсказаний и т.д., но конкретно это поведение не программируется пользователем.

Также если говорить про PIC32 - в нем есть DMA контроллер, которые позволяет направлять данные из порта в порт, в том числе из порта, подсоединенного к медленной памяти - в порт, подсоединенный к быстрой памяти.
(Reply) (Parent) (Thread)
[User Picture]From: sergegers1
2013-09-30 10:06 am (UTC)
НИИЧАВО 2.0 или шматование голубого сала. Только всё будет по-другому. А скорее всего не будет никак.
(Reply) (Thread)
[User Picture]From: livejournal
2013-09-30 12:04 pm (UTC)

Материал какого типа можно было бы изучать в &quot;Научны

User expalex referenced to your post from Материал какого типа можно было бы изучать в "Научных Ротах" saying: [...] Оригинал взят у в Материал какого типа можно было бы изучать в "Научных Ротах" [...]
(Reply) (Thread)
[User Picture]From: Dim Dimon
2013-09-30 04:24 pm (UTC)
Главный предмет для изучения - Имперский Культ Путина и Его святых!
(Reply) (Thread)
[User Picture]From: panchul
2013-09-30 04:28 pm (UTC)
Вы выдаете вами желаемое за действительное
(Reply) (Parent) (Thread)
[User Picture]From: m_borysp
2013-09-30 04:38 pm (UTC)
В 1984-66 гг поработал в так называемом "отраслевом НИИ" тоже таскал круглое и катал квадратное + стройки + сельхозработы + овощебазы. Как-то посчитал -- отвлечения достигали 3-4 месяцев в году. И какая тут наука? Наука не делается строем и по команде, это творчество
(Reply) (Thread)
[User Picture]From: panchul
2013-09-30 04:47 pm (UTC)
Для того, чтобы владеть любым навыком на уровне рефлекса и интуиции (от конструирования мышеловок до сочинения музыки и проведения нейрохирургии), человек должен пройти через серьезный период изучения кучи сухого материала, а также "набивания руки" не очень творческими упражнениями. Это вполне можно делать и строем. Более того - строем даже лучше, чтобы видеть разброс решений и ошибок у других обучающихся. А вот потом на этом можно строить творчество. "Творчество" с постоянным подглядыванием в стравочник и ляпами - это не творчество, а в лучшем случае хобби.

(Reply) (Parent) (Thread) (Expand)
[User Picture]From: maxdz
2013-09-30 05:10 pm (UTC)
Раньше, толковые рассеянские студенты шли в науку, да в разработку - теперь будут год мести плац в "научных ротах". Прогресс... :)
(Reply) (Thread)
[User Picture]From: panchul
2013-09-30 05:18 pm (UTC)
Ничего, вот Солженицын небось написал часть своих трудов на лесоповале. Если уж лесоповал существует, то его можно по-крайней мере полезно употребить!
(Reply) (Parent) (Thread) (Expand)
[User Picture]From: vv_ulanov
2013-09-30 05:56 pm (UTC)
Браво, Юрий! В "Хрестоматии Радиолюбителя" (Энергия, 1971, Бурлянд&Жеребцов) есть раздел "Транзистор?... Это очень просто!" (из Энергия, 1967, Айсберг) изложенный таким же живым и актуальным для того времени по применённым приёмам языком - сразу вспомнилось. Требуйте полставки за популяризацию архитектуры с рыцарского окружения )))
К сожалению на просторах бывшего СССР MIPS нонче в загоне, граждане даже не в курсе какая архитектура хранит их спокойный сон (меня, кстати, впечатлило исполнение комплексного 64 битного умножения в крайних работах НИИСИ за 7 тактов конвейера с параллельной загрузкой-выгрузкой регистров, но то военные дела и свой сопроцессор СP2)
ST с кортексом со своими копеечными discovery окучили поляну по самые опушки, не смотря на черезжопность реализации и ядра и периферии в отличие от... печально конечно, но это больше проЁблема маркетологов. Ingenic вон тоже родил 4780 и ждёт опять возможности урвать большую партию силикона как с 4770 (Ainol и NEO-GEO), а раньше с Dingoo, читалками и автомобильными навигаторами... трудные товарищи некоторые ваши лицензиаты, увы 8(
(Reply) (Thread)
[User Picture]From: _iga
2013-09-30 06:15 pm (UTC)
> К сожалению на просторах бывшего СССР MIPS нонче в загоне

И даже в Китае, не смотря на ихний Loongson.

> ST с кортексом со своими копеечными discovery окучили поляну по самые опушки

Именно так.

> Ingenic вон тоже родил 4780

Board на котором невозможно купить, в отличие от того же Discovery.
(Reply) (Parent) (Thread) (Expand)
[User Picture]From: _iga
2013-09-30 06:11 pm (UTC)
"вероятностный противник", какая прелесть...
(Reply) (Thread)
[User Picture]From: vv_ulanov
2013-09-30 07:01 pm (UTC)
вероятный конечно, да, Юрий даже не пиджак, простительно. ничего не поменялось, давешняя фраза президента Обамы "нет мы таки сука уникальные и вот почему..." подразумевает что без нас было бы легче себя такими чувствовать, но очко то жмёт, бгг. так с 1945 г. и живём ))
(Reply) (Parent) (Thread)
[User Picture]From: dip_au
2013-09-30 06:22 pm (UTC)
Юрий, скажите пожалуйста.. Про "внутреннюю Толоконникову".

А это для всех является хорошим тоном "ловко поддеть" и "удачно ввернуть" человека, объявившего голодовку, отнюдь не от скуки (и далеко не ради себя одной), в одной из самых суровых колоний страны?

Или это допустимо долько для тех, кто считает себя особо успешным и состоявшимся в профессиональном плане?

p.s. Не спрашивали - как там Ваша книжечка, дошла ли до неё? Читает ли?

(Reply) (Thread)
[User Picture]From: panchul
2013-09-30 07:30 pm (UTC)
Я вовсе не поддеваю Толоконникову. Она сама решила стать брендом, как Че Гевара. Я просто этот бренд использую.

Книжка до нее, судя по трекингу, дошла.
(Reply) (Parent) (Thread) (Expand)
Page 1 of 3
<<[1] [2] [3] >>