LINUX.ORG.RU

История изменений

Исправление rezedent12, (текущая версия) :

Процессор: рабочие частоты процессоров сейчас достигают 5 ГГц. По заявлениям производителей, схемотехнические решения (конвейеры, предсказания и прочие хитрости) позволяют выполнять одну инструкцию за такт. Для округления расчетов возьмем значение тактовой частоты в 4 ГГц что даст нам одну операцию за 0,25 нс.

Оперативная память: возьмем для примера оперативную память нового формата DDR4-2133 с таймингом 15-15-15.

Дано:

процессор Fтакт = 4 ГГц Tтакт = 0,25 нс (по совместительству время выполнения одной операции «условно»)

Оперативная память DDR4-2133 Fтакт = 1066 МГц Fдата = 2133 МГц tтакт = 0,94 нс tдата = 0,47 нс СПДмакс = 2133 МГц * 64 = 17064 Мбайт/с (скорость передачи данных) tRCmin = 50 нс (минимальное время между двумя активациями строк)

Время получения данных

Из регистров и кэша, данные могут быть предоставлены в течении рабочего такта (регистры, кэш 1 уровня) или с задержкой в несколько тактов процессора для кэша 2-го и 3-го уровня.

Для оперативной памяти ситуация похуже:

— время выбора строки составляет: 15 clk * 0,94 нс = 14 нс — время до получения данных с команды выбора столбца: 15 clk * 0,94 нс = 14 нс — время закрытия строки: 15 clk * 0,94 нс = 14 нс (кто бы подумал)

Из чего следует что время между командой запрашивающей данные из ячейки памяти (в случае если в кэш не попали) может варьироваться:

14 нс — данные находятся в уже выбранной строке; 28 нс — данные находятся в невыбранной строке при условии что предыдущая строка уже закрыта (блок в состоянии «idle»); 42-50 нс — данные находятся в другой строке, при этом текущая строка нуждается в закрытии.

Количество операций которые может выполнить (вышеобозначенный) процессор за это время составляет от 56 (14 нс) до 200 (50 нс смена строки). Отдельно стоить отметить что ко времени между командой выбора столбца и получением всего пакета данных добавляется задержка загрузки строки кэша: 8 бит пакета * 0,47 нс = 3,76 нс. Для ситуации когда данные будут доступны «программе» только после загрузки строки кэша (кто знает что и как там накрутили разработчики процессоров, память по спецификации позволяет выдать нужные данные вперед), мы получаем еще до 15-и пропущенных тактов.

https://habrahabr.ru/post/281929/

Посчитаем:

17064 Мбайт/с / 8 ядер = 2133 Мбайт/с на ядро в оптимальном случае.

17064 Мбайт/с / (8 ядер * 200 пропущенных операций) = 10 Мбайт/с на ядро для вырожденного случая.

Исходная версия rezedent12, :

Процессор: рабочие частоты процессоров сейчас достигают 5 ГГц. По заявлениям производителей, схемотехнические решения (конвейеры, предсказания и прочие хитрости) позволяют выполнять одну инструкцию за такт. Для округления расчетов возьмем значение тактовой частоты в 4 ГГц что даст нам одну операцию за 0,25 нс.

Оперативная память: возьмем для примера оперативную память нового формата DDR4-2133 с таймингом 15-15-15.

Дано:

процессор Fтакт = 4 ГГц Tтакт = 0,25 нс (по совместительству время выполнения одной операции «условно»)

Оперативная память DDR4-2133 Fтакт = 1066 МГц Fдата = 2133 МГц tтакт = 0,94 нс tдата = 0,47 нс СПДмакс = 2133 МГц * 64 = 17064 Мбайт/с (скорость передачи данных) tRCmin = 50 нс (минимальное время между двумя активациями строк)

Время получения данных

Из регистров и кэша, данные могут быть предоставлены в течении рабочего такта (регистры, кэш 1 уровня) или с задержкой в несколько тактов процессора для кэша 2-го и 3-го уровня.

Для оперативной памяти ситуация похуже:

— время выбора строки составляет: 15 clk * 0,94 нс = 14 нс — время до получения данных с команды выбора столбца: 15 clk * 0,94 нс = 14 нс — время закрытия строки: 15 clk * 0,94 нс = 14 нс (кто бы подумал)

Из чего следует что время между командой запрашивающей данные из ячейки памяти (в случае если в кэш не попали) может варьироваться:

14 нс — данные находятся в уже выбранной строке; 28 нс — данные находятся в невыбранной строке при условии что предыдущая строка уже закрыта (блок в состоянии «idle»); 42-50 нс — данные находятся в другой строке, при этом текущая строка нуждается в закрытии.

Количество операций которые может выполнить (вышеобозначенный) процессор за это время составляет от 56 (14 нс) до 200 (50 нс смена строки). Отдельно стоить отметить что ко времени между командой выбора столбца и получением всего пакета данных добавляется задержка загрузки строки кэша: 8 бит пакета * 0,47 нс = 3,76 нс. Для ситуации когда данные будут доступны «программе» только после загрузки строки кэша (кто знает что и как там накрутили разработчики процессоров, память по спецификации позволяет выдать нужные данные вперед), мы получаем еще до 15-и пропущенных тактов.

https://habrahabr.ru/post/281929/