Что-то с памятью моей стало… Сколько стоит доступ в...
TRANSCRIPT
![Page 1: Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим делать / Антон Орлов (Qrator Labs)](https://reader034.vdocuments.mx/reader034/viewer/2022042520/586f90691a28ab54768b79ad/html5/thumbnails/1.jpg)
Что-то с памятью моей сталоСколько стоит доступ в память, и что с этим делать
Антон ОрловQrator Labs
![Page 2: Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим делать / Антон Орлов (Qrator Labs)](https://reader034.vdocuments.mx/reader034/viewer/2022042520/586f90691a28ab54768b79ad/html5/thumbnails/2.jpg)
100 Mpps
![Page 3: Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим делать / Антон Орлов (Qrator Labs)](https://reader034.vdocuments.mx/reader034/viewer/2022042520/586f90691a28ab54768b79ad/html5/thumbnails/3.jpg)
100 Mpps10 нс / пакет
![Page 4: Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим делать / Антон Орлов (Qrator Labs)](https://reader034.vdocuments.mx/reader034/viewer/2022042520/586f90691a28ab54768b79ad/html5/thumbnails/4.jpg)
100 Mpps10 нс / пакет
Image source: http://www.esaitech.com/supermicro-x9drw-7tpf-b-intel-c602-lga-2011-ddr3-1600mhz-proprietary-wio-server-motherboard.html
![Page 5: Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим делать / Антон Орлов (Qrator Labs)](https://reader034.vdocuments.mx/reader034/viewer/2022042520/586f90691a28ab54768b79ad/html5/thumbnails/5.jpg)
100 Mpps10 нс / пакет
1 такт: 3.5 см
Image source: http://www.esaitech.com/supermicro-x9drw-7tpf-b-intel-c602-lga-2011-ddr3-1600mhz-proprietary-wio-server-motherboard.html
![Page 6: Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим делать / Антон Орлов (Qrator Labs)](https://reader034.vdocuments.mx/reader034/viewer/2022042520/586f90691a28ab54768b79ad/html5/thumbnails/6.jpg)
100 Mpps10 нс / пакет
1 такт: 3.5 см1 нс: 11 см
Image source: http://www.esaitech.com/supermicro-x9drw-7tpf-b-intel-c602-lga-2011-ddr3-1600mhz-proprietary-wio-server-motherboard.html
![Page 7: Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим делать / Антон Орлов (Qrator Labs)](https://reader034.vdocuments.mx/reader034/viewer/2022042520/586f90691a28ab54768b79ad/html5/thumbnails/7.jpg)
Время, нс
Размер данных
L1 L2 L3 RAM
The Myth of RAM
Emil Ernerfeldthttps://github.com/emilk/ram_bench
![Page 8: Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим делать / Антон Орлов (Qrator Labs)](https://reader034.vdocuments.mx/reader034/viewer/2022042520/586f90691a28ab54768b79ad/html5/thumbnails/8.jpg)
Время, нс
Размер данных
L1 L2 L3 RAM
The Myth of RAM
Emil Ernerfeldthttps://github.com/emilk/ram_bench
![Page 9: Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим делать / Антон Орлов (Qrator Labs)](https://reader034.vdocuments.mx/reader034/viewer/2022042520/586f90691a28ab54768b79ad/html5/thumbnails/9.jpg)
Время, нс
Размер данных
L1 L2 L3 RAM
The Myth of RAM
Emil Ernerfeldthttps://github.com/emilk/ram_bench
![Page 10: Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим делать / Антон Орлов (Qrator Labs)](https://reader034.vdocuments.mx/reader034/viewer/2022042520/586f90691a28ab54768b79ad/html5/thumbnails/10.jpg)
Время, нс
Размер данных
L1 L2 L3 RAM
The Myth of RAM
Emil Ernerfeldthttps://github.com/emilk/ram_bench
![Page 11: Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим делать / Антон Орлов (Qrator Labs)](https://reader034.vdocuments.mx/reader034/viewer/2022042520/586f90691a28ab54768b79ad/html5/thumbnails/11.jpg)
#define COLUMNS 10#define ROWS (1<<28) // 256MB
int main () {char* mat[COLUMNS];for (int i = 0; i < COLUMNS; i++)
mat[i] = (char*)malloc(ROWS);
for (int j = 0; j < ROWS; j++) {for (int i = 0; i < COLUMNS; i++)
mat[i][j] = (char)j;}
int res = 0;for (int i = 0; i < COLUMNS; i++)
res += mat[i][i];return res;
}
![Page 12: Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим делать / Антон Орлов (Qrator Labs)](https://reader034.vdocuments.mx/reader034/viewer/2022042520/586f90691a28ab54768b79ad/html5/thumbnails/12.jpg)
#define COLUMNS 10#define ROWS (1<<28) // 256MB
int main () {char* mat[COLUMNS];for (int i = 0; i < COLUMNS; i++)
mat[i] = (char*)malloc(ROWS);
for (int j = 0; j < ROWS; j++) {for (int i = 0; i < COLUMNS; i++)
mat[i][j] = (char)j;}
int res = 0;for (int i = 0; i < COLUMNS; i++)
res += mat[i][i];return res;
}
![Page 13: Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим делать / Антон Орлов (Qrator Labs)](https://reader034.vdocuments.mx/reader034/viewer/2022042520/586f90691a28ab54768b79ad/html5/thumbnails/13.jpg)
#define COLUMNS 10#define ROWS (1<<28) // 256MB
int main () {char* mat[COLUMNS];for (int i = 0; i < COLUMNS; i++)
mat[i] = (char*)malloc(ROWS);
for (int j = 0; j < ROWS; j++) {for (int i = 0; i < COLUMNS; i++)
mat[i][j] = (char)j;}
int res = 0;for (int i = 0; i < COLUMNS; i++)
res += mat[i][i];return res;
}
![Page 14: Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим делать / Антон Орлов (Qrator Labs)](https://reader034.vdocuments.mx/reader034/viewer/2022042520/586f90691a28ab54768b79ad/html5/thumbnails/14.jpg)
#define COLUMNS 10#define ROWS (1<<28) // 256MB
int main () {char* mat[COLUMNS];for (int i = 0; i < COLUMNS; i++)
mat[i] = (char*)malloc(ROWS);
for (int j = 0; j < ROWS; j++) {for (int i = 0; i < COLUMNS; i++)
mat[i][j] = (char)j;}
int res = 0;for (int i = 0; i < COLUMNS; i++)
res += mat[i][i];return res;
}
![Page 15: Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим делать / Антон Орлов (Qrator Labs)](https://reader034.vdocuments.mx/reader034/viewer/2022042520/586f90691a28ab54768b79ad/html5/thumbnails/15.jpg)
#define COLUMNS 10#define ROWS (1<<28) // 256MB
int main () {char* mat[COLUMNS];for (int i = 0; i < COLUMNS; i++)
mat[i] = (char*)malloc(ROWS);
for (int j = 0; j < ROWS; j++) {for (int i = 0; i < COLUMNS; i++)
mat[i][j] = (char)j;}
int res = 0;for (int i = 0; i < COLUMNS; i++)
res += mat[i][i];return res;
}
![Page 16: Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим делать / Антон Орлов (Qrator Labs)](https://reader034.vdocuments.mx/reader034/viewer/2022042520/586f90691a28ab54768b79ad/html5/thumbnails/16.jpg)
#define COLUMNS 10#define ROWS (1<<28) // 256MB
int main () {char* mat[COLUMNS];for (int i = 0; i < COLUMNS; i++)
mat[i] = (char*)malloc(ROWS);
for (int j = 0; j < ROWS; j++) {for (int i = 0; i < COLUMNS; i++)
mat[i][j] = (char)j;}
int res = 0;for (int i = 0; i < COLUMNS; i++)
res += mat[i][i];return res;
}
![Page 17: Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим делать / Антон Орлов (Qrator Labs)](https://reader034.vdocuments.mx/reader034/viewer/2022042520/586f90691a28ab54768b79ad/html5/thumbnails/17.jpg)
#define COLUMNS 10#define ROWS (1<<28) // 256MB
int main () {char* mat[COLUMNS];for (int i = 0; i < COLUMNS; i++)
mat[i] = (char*)malloc(ROWS);
for (int j = 0; j < ROWS; j++) {for (int i = 0; i < COLUMNS; i++)
mat[i][j] = (char)j;}
int res = 0;for (int i = 0; i < COLUMNS; i++)
res += mat[i][i];return res;
}
![Page 18: Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим делать / Антон Орлов (Qrator Labs)](https://reader034.vdocuments.mx/reader034/viewer/2022042520/586f90691a28ab54768b79ad/html5/thumbnails/18.jpg)
#define COLUMNS 10#define ROWS (1<<28) // 256MB
int main () {char* mat[COLUMNS];for (int i = 0; i < COLUMNS; i++)
mat[i] = (char*)malloc(ROWS);
for (int j = 0; j < ROWS; j++) {for (int i = 0; i < COLUMNS; i++)
mat[i][j] = (char)j;}
int res = 0;for (int i = 0; i < COLUMNS; i++)
res += mat[i][i];return res;
}
![Page 19: Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим делать / Антон Орлов (Qrator Labs)](https://reader034.vdocuments.mx/reader034/viewer/2022042520/586f90691a28ab54768b79ad/html5/thumbnails/19.jpg)
#define COLUMNS 10#define ROWS (1<<28) // 256MB
int main () {char* mat[COLUMNS];for (int i = 0; i < COLUMNS; i++)
mat[i] = (char*)malloc(ROWS);
for (int j = 0; j < ROWS; j++) {for (int i = 0; i < COLUMNS; i++)
mat[i][j] = (char)j;}
int res = 0;for (int i = 0; i < COLUMNS; i++)
res += mat[i][i];return res;
}
![Page 20: Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим делать / Антон Орлов (Qrator Labs)](https://reader034.vdocuments.mx/reader034/viewer/2022042520/586f90691a28ab54768b79ad/html5/thumbnails/20.jpg)
#define COLUMNS 10#define ROWS (1<<28) // 256MB
int main () {char* mat[COLUMNS];for (int i = 0; i < COLUMNS; i++)
mat[i] = (char*)malloc(ROWS);
for (int j = 0; j < ROWS; j++) {for (int i = 0; i < COLUMNS; i++)
mat[i][j] = (char)j;}
int res = 0;for (int i = 0; i < COLUMNS; i++)
res += mat[i][i];return res;
}
![Page 21: Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим делать / Антон Орлов (Qrator Labs)](https://reader034.vdocuments.mx/reader034/viewer/2022042520/586f90691a28ab54768b79ad/html5/thumbnails/21.jpg)
#define COLUMNS 10#define ROWS (1<<28) // 256MB
int main () {char* mat[COLUMNS];for (int i = 0; i < COLUMNS; i++)
mat[i] = (char*)malloc(ROWS);
for (int j = 0; j < ROWS; j++) {for (int i = 0; i < COLUMNS; i++)
mat[i][j] = (char)j;}
int res = 0;for (int i = 0; i < COLUMNS; i++)
res += mat[i][i];return res;
}
12.32s
![Page 22: Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим делать / Антон Орлов (Qrator Labs)](https://reader034.vdocuments.mx/reader034/viewer/2022042520/586f90691a28ab54768b79ad/html5/thumbnails/22.jpg)
#define COLUMNS 10#define ROWS (1<<28) // 256MB
int main () {char* mat[COLUMNS];for (int i = 0; i < COLUMNS; i++)
mat[i] = (char*)malloc(ROWS);
for (int j = 0; j < ROWS; j++) {for (int i = 0; i < COLUMNS; i++)
mat[i][j] = (char)j;}
int res = 0;for (int i = 0; i < COLUMNS; i++)
res += mat[i][i];return res;
}
12.32s
#define COLUMNS 10#define ROWS (1<<28) // 256MB
int main () {char* mat[COLUMNS];for (int i = 0; i < COLUMNS; i++)
mat[i] = (char*)malloc(ROWS);
int res = 0;for (int i = 0; i < COLUMNS; i++)
res += mat[i][i];return res;
}
![Page 23: Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим делать / Антон Орлов (Qrator Labs)](https://reader034.vdocuments.mx/reader034/viewer/2022042520/586f90691a28ab54768b79ad/html5/thumbnails/23.jpg)
#define COLUMNS 10#define ROWS (1<<28) // 256MB
int main () {char* mat[COLUMNS];for (int i = 0; i < COLUMNS; i++)
mat[i] = (char*)malloc(ROWS);
for (int j = 0; j < ROWS; j++) {for (int i = 0; i < COLUMNS; i++)
mat[i][j] = (char)j;}
int res = 0;for (int i = 0; i < COLUMNS; i++)
res += mat[i][i];return res;
}
12.32s
#define COLUMNS 10#define ROWS (1<<28) // 256MB
int main () {char* mat[COLUMNS];for (int i = 0; i < COLUMNS; i++)
mat[i] = (char*)malloc(ROWS);
for (int j = 0; j < ROWS; j++) {for (int i = 0; i < COLUMNS/2; i++)
mat[i][j] = (char)j;}
int res = 0;for (int i = 0; i < COLUMNS; i++)
res += mat[i][i];return res;
}
![Page 24: Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим делать / Антон Орлов (Qrator Labs)](https://reader034.vdocuments.mx/reader034/viewer/2022042520/586f90691a28ab54768b79ad/html5/thumbnails/24.jpg)
#define COLUMNS 10#define ROWS (1<<28) // 256MB
int main () {char* mat[COLUMNS];for (int i = 0; i < COLUMNS; i++)
mat[i] = (char*)malloc(ROWS);
for (int j = 0; j < ROWS; j++) {for (int i = 0; i < COLUMNS; i++)
mat[i][j] = (char)j;}
int res = 0;for (int i = 0; i < COLUMNS; i++)
res += mat[i][i];return res;
}
12.32s
#define COLUMNS 10#define ROWS (1<<28) // 256MB
int main () {char* mat[COLUMNS];for (int i = 0; i < COLUMNS; i++)
mat[i] = (char*)malloc(ROWS);
for (int j = 0; j < ROWS; j++) {for (int i = 0; i < COLUMNS/2; i++)
mat[i][j] = (char)j;}for (int j = 0; j < ROWS; j++) {
for (int i = COLUMNS/2; i < COLUMNS; i++)mat[i][j] = (char)j;
}int res = 0;for (int i = 0; i < COLUMNS; i++)
res += mat[i][i];return res;
}
![Page 25: Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим делать / Антон Орлов (Qrator Labs)](https://reader034.vdocuments.mx/reader034/viewer/2022042520/586f90691a28ab54768b79ad/html5/thumbnails/25.jpg)
#define COLUMNS 10#define ROWS (1<<28) // 256MB
int main () {char* mat[COLUMNS];for (int i = 0; i < COLUMNS; i++)
mat[i] = (char*)malloc(ROWS);
for (int j = 0; j < ROWS; j++) {for (int i = 0; i < COLUMNS/2; i++)
mat[i][j] = (char)j;}for (int j = 0; j < ROWS; j++) {
for (int i = COLUMNS/2; i < COLUMNS; i++)mat[i][j] = (char)j;
}int res = 0;for (int i = 0; i < COLUMNS; i++)
res += mat[i][i];return res;
}
![Page 26: Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим делать / Антон Орлов (Qrator Labs)](https://reader034.vdocuments.mx/reader034/viewer/2022042520/586f90691a28ab54768b79ad/html5/thumbnails/26.jpg)
#define COLUMNS 10#define ROWS (1<<28) // 256MB
int main () {char* mat[COLUMNS];for (int i = 0; i < COLUMNS; i++)
mat[i] = (char*)malloc(ROWS);
for (int j = 0; j < ROWS; j++) {for (int i = 0; i < COLUMNS/2; i++)
mat[i][j] = (char)j;}for (int j = 0; j < ROWS; j++) {
for (int i = COLUMNS/2; i < COLUMNS; i++)mat[i][j] = (char)j;
}int res = 0;for (int i = 0; i < COLUMNS; i++)
res += mat[i][i];return res;
}
![Page 27: Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим делать / Антон Орлов (Qrator Labs)](https://reader034.vdocuments.mx/reader034/viewer/2022042520/586f90691a28ab54768b79ad/html5/thumbnails/27.jpg)
#define COLUMNS 10#define ROWS (1<<28) // 256MB
int main () {char* mat[COLUMNS];for (int i = 0; i < COLUMNS; i++)
mat[i] = (char*)malloc(ROWS);
for (int j = 0; j < ROWS; j++) {for (int i = 0; i < COLUMNS/2; i++)
mat[i][j] = (char)j;}for (int j = 0; j < ROWS; j++) {
for (int i = COLUMNS/2; i < COLUMNS; i++)mat[i][j] = (char)j;
}int res = 0;for (int i = 0; i < COLUMNS; i++)
res += mat[i][i];return res;
}
![Page 28: Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим делать / Антон Орлов (Qrator Labs)](https://reader034.vdocuments.mx/reader034/viewer/2022042520/586f90691a28ab54768b79ad/html5/thumbnails/28.jpg)
#define COLUMNS 10#define ROWS (1<<28) // 256MB
int main () {char* mat[COLUMNS];for (int i = 0; i < COLUMNS; i++)
mat[i] = (char*)malloc(ROWS);
for (int j = 0; j < ROWS; j++) {for (int i = 0; i < COLUMNS/2; i++)
mat[i][j] = (char)j;}for (int j = 0; j < ROWS; j++) {
for (int i = COLUMNS/2; i < COLUMNS; i++)mat[i][j] = (char)j;
}int res = 0;for (int i = 0; i < COLUMNS; i++)
res += mat[i][i];return res;
}
![Page 29: Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим делать / Антон Орлов (Qrator Labs)](https://reader034.vdocuments.mx/reader034/viewer/2022042520/586f90691a28ab54768b79ad/html5/thumbnails/29.jpg)
#define COLUMNS 10#define ROWS (1<<28) // 256MB
int main () {char* mat[COLUMNS];for (int i = 0; i < COLUMNS; i++)
mat[i] = (char*)malloc(ROWS);
for (int j = 0; j < ROWS; j++) {for (int i = 0; i < COLUMNS/2; i++)
mat[i][j] = (char)j;}for (int j = 0; j < ROWS; j++) {
for (int i = COLUMNS/2; i < COLUMNS; i++)mat[i][j] = (char)j;
}int res = 0;for (int i = 0; i < COLUMNS; i++)
res += mat[i][i];return res;
}
![Page 30: Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим делать / Антон Орлов (Qrator Labs)](https://reader034.vdocuments.mx/reader034/viewer/2022042520/586f90691a28ab54768b79ad/html5/thumbnails/30.jpg)
#define COLUMNS 10#define ROWS (1<<28) // 256MB
int main () {char* mat[COLUMNS];for (int i = 0; i < COLUMNS; i++)
mat[i] = (char*)malloc(ROWS);
for (int j = 0; j < ROWS; j++) {for (int i = 0; i < COLUMNS/2; i++)
mat[i][j] = (char)j;}for (int j = 0; j < ROWS; j++) {
for (int i = COLUMNS/2; i < COLUMNS; i++)mat[i][j] = (char)j;
}int res = 0;for (int i = 0; i < COLUMNS; i++)
res += mat[i][i];return res;
}
![Page 31: Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим делать / Антон Орлов (Qrator Labs)](https://reader034.vdocuments.mx/reader034/viewer/2022042520/586f90691a28ab54768b79ad/html5/thumbnails/31.jpg)
#define COLUMNS 10#define ROWS (1<<28) // 256MB
int main () {char* mat[COLUMNS];for (int i = 0; i < COLUMNS; i++)
mat[i] = (char*)malloc(ROWS);
for (int j = 0; j < ROWS; j++) {for (int i = 0; i < COLUMNS/2; i++)
mat[i][j] = (char)j;}for (int j = 0; j < ROWS; j++) {
for (int i = COLUMNS/2; i < COLUMNS; i++)mat[i][j] = (char)j;
}int res = 0;for (int i = 0; i < COLUMNS; i++)
res += mat[i][i];return res;
}
![Page 32: Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим делать / Антон Орлов (Qrator Labs)](https://reader034.vdocuments.mx/reader034/viewer/2022042520/586f90691a28ab54768b79ad/html5/thumbnails/32.jpg)
#define COLUMNS 10#define ROWS (1<<28) // 256MB
int main () {char* mat[COLUMNS];for (int i = 0; i < COLUMNS; i++)
mat[i] = (char*)malloc(ROWS);
for (int j = 0; j < ROWS; j++) {for (int i = 0; i < COLUMNS/2; i++)
mat[i][j] = (char)j;}for (int j = 0; j < ROWS; j++) {
for (int i = COLUMNS/2; i < COLUMNS; i++)mat[i][j] = (char)j;
}int res = 0;for (int i = 0; i < COLUMNS; i++)
res += mat[i][i];return res;
}
![Page 33: Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим делать / Антон Орлов (Qrator Labs)](https://reader034.vdocuments.mx/reader034/viewer/2022042520/586f90691a28ab54768b79ad/html5/thumbnails/33.jpg)
#define COLUMNS 10#define ROWS (1<<28) // 256MB
int main () {char* mat[COLUMNS];for (int i = 0; i < COLUMNS; i++)
mat[i] = (char*)malloc(ROWS);
for (int j = 0; j < ROWS; j++) {for (int i = 0; i < COLUMNS/2; i++)
mat[i][j] = (char)j;}for (int j = 0; j < ROWS; j++) {
for (int i = COLUMNS/2; i < COLUMNS; i++)mat[i][j] = (char)j;
}int res = 0;for (int i = 0; i < COLUMNS; i++)
res += mat[i][i];return res;
}
![Page 34: Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим делать / Антон Орлов (Qrator Labs)](https://reader034.vdocuments.mx/reader034/viewer/2022042520/586f90691a28ab54768b79ad/html5/thumbnails/34.jpg)
#define COLUMNS 10#define ROWS (1<<28) // 256MB
int main () {char* mat[COLUMNS];for (int i = 0; i < COLUMNS; i++)
mat[i] = (char*)malloc(ROWS);
for (int j = 0; j < ROWS; j++) {for (int i = 0; i < COLUMNS/2; i++)
mat[i][j] = (char)j;}for (int j = 0; j < ROWS; j++) {
for (int i = COLUMNS/2; i < COLUMNS; i++)mat[i][j] = (char)j;
}int res = 0;for (int i = 0; i < COLUMNS; i++)
res += mat[i][i];return res;
}
![Page 35: Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим делать / Антон Орлов (Qrator Labs)](https://reader034.vdocuments.mx/reader034/viewer/2022042520/586f90691a28ab54768b79ad/html5/thumbnails/35.jpg)
#define COLUMNS 10#define ROWS (1<<28) // 256MB
int main () {char* mat[COLUMNS];for (int i = 0; i < COLUMNS; i++)
mat[i] = (char*)malloc(ROWS);
for (int j = 0; j < ROWS; j++) {for (int i = 0; i < COLUMNS/2; i++)
mat[i][j] = (char)j;}for (int j = 0; j < ROWS; j++) {
for (int i = COLUMNS/2; i < COLUMNS; i++)mat[i][j] = (char)j;
}int res = 0;for (int i = 0; i < COLUMNS; i++)
res += mat[i][i];return res;
}
![Page 36: Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим делать / Антон Орлов (Qrator Labs)](https://reader034.vdocuments.mx/reader034/viewer/2022042520/586f90691a28ab54768b79ad/html5/thumbnails/36.jpg)
#define COLUMNS 10#define ROWS (1<<28) // 256MB
int main () {char* mat[COLUMNS];for (int i = 0; i < COLUMNS; i++)
mat[i] = (char*)malloc(ROWS);
for (int j = 0; j < ROWS; j++) {for (int i = 0; i < COLUMNS/2; i++)
mat[i][j] = (char)j;}for (int j = 0; j < ROWS; j++) {
for (int i = COLUMNS/2; i < COLUMNS; i++)mat[i][j] = (char)j;
}int res = 0;for (int i = 0; i < COLUMNS; i++)
res += mat[i][i];return res;
}
![Page 37: Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим делать / Антон Орлов (Qrator Labs)](https://reader034.vdocuments.mx/reader034/viewer/2022042520/586f90691a28ab54768b79ad/html5/thumbnails/37.jpg)
#define COLUMNS 10#define ROWS (1<<28) // 256MB
int main () {char* mat[COLUMNS];for (int i = 0; i < COLUMNS; i++)
mat[i] = (char*)malloc(ROWS);
for (int j = 0; j < ROWS; j++) {for (int i = 0; i < COLUMNS/2; i++)
mat[i][j] = (char)j;}for (int j = 0; j < ROWS; j++) {
for (int i = COLUMNS/2; i < COLUMNS; i++)mat[i][j] = (char)j;
}int res = 0;for (int i = 0; i < COLUMNS; i++)
res += mat[i][i];return res;
}
![Page 38: Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим делать / Антон Орлов (Qrator Labs)](https://reader034.vdocuments.mx/reader034/viewer/2022042520/586f90691a28ab54768b79ad/html5/thumbnails/38.jpg)
#define COLUMNS 10#define ROWS (1<<28) // 256MB
int main () {char* mat[COLUMNS];for (int i = 0; i < COLUMNS; i++)
mat[i] = (char*)malloc(ROWS);
for (int j = 0; j < ROWS; j++) {for (int i = 0; i < COLUMNS; i++)
mat[i][j] = (char)j;}
int res = 0;for (int i = 0; i < COLUMNS; i++)
res += mat[i][i];return res;
}
12.32s
#define COLUMNS 10#define ROWS (1<<28) // 256MB
int main () {char* mat[COLUMNS];for (int i = 0; i < COLUMNS; i++)
mat[i] = (char*)malloc(ROWS);
for (int j = 0; j < ROWS; j++) {for (int i = 0; i < COLUMNS/2; i++)
mat[i][j] = (char)j;}for (int j = 0; j < ROWS; j++) {
for (int i = COLUMNS/2; i < COLUMNS; i++)mat[i][j] = (char)j;
}int res = 0;for (int i = 0; i < COLUMNS; i++)
res += mat[i][i];return res;
}
1.96s
![Page 39: Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим делать / Антон Орлов (Qrator Labs)](https://reader034.vdocuments.mx/reader034/viewer/2022042520/586f90691a28ab54768b79ad/html5/thumbnails/39.jpg)
Время, сек
Количество колонок
![Page 40: Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим делать / Антон Орлов (Qrator Labs)](https://reader034.vdocuments.mx/reader034/viewer/2022042520/586f90691a28ab54768b79ad/html5/thumbnails/40.jpg)
Как понять, что происходит?# likwid-perfctr -E L1Found 13 event(s) with search key L1:
PAGE_WALKER_LOADS_ITLB_L1
MEM_LOAD_UOPS_RETIRED_L1_HIT
MEM_LOAD_UOPS_RETIRED_L1_MISS
MEM_LOAD_UOPS_RETIRED_L1_ALL
L2_TRANS_L1D_WB
L1_POWER_CYCLES
L1D_PEND_MISS_PENDING
L1D_PEND_MISS_PENDING_CYCLES
L1D_PEND_MISS_OCCURRENCES
L1D_REPLACEMENT
CYCLE_ACTIVITY_CYCLES_L1D_MISS
CYCLE_ACTIVITY_STALLS_L1D_MISS
PAGE_WALKER_LOADS_DTLB_L1
https://github.com/RRZE-HPC/likwid
![Page 41: Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим делать / Антон Орлов (Qrator Labs)](https://reader034.vdocuments.mx/reader034/viewer/2022042520/586f90691a28ab54768b79ad/html5/thumbnails/41.jpg)
Как понять, что происходит?Events:
• L1D_REPLACEMENT 911,569,595 51,124,840
• L2_TRANS_L1D_WB 957,062,801 54,446,831
Metric:
• L2 data volume [GBytes] 119.5931 6.7568
![Page 42: Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим делать / Антон Орлов (Qrator Labs)](https://reader034.vdocuments.mx/reader034/viewer/2022042520/586f90691a28ab54768b79ad/html5/thumbnails/42.jpg)
Адресация в 8-канальном 32КБ кэше
063
![Page 43: Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим делать / Антон Орлов (Qrator Labs)](https://reader034.vdocuments.mx/reader034/viewer/2022042520/586f90691a28ab54768b79ad/html5/thumbnails/43.jpg)
Адресация в 8-канальном 32КБ кэше
04863
![Page 44: Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим делать / Антон Орлов (Qrator Labs)](https://reader034.vdocuments.mx/reader034/viewer/2022042520/586f90691a28ab54768b79ad/html5/thumbnails/44.jpg)
• Кэш-линия: 64 = 26 байт
Адресация в 8-канальном 32КБ кэше
064863
![Page 45: Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим делать / Антон Орлов (Qrator Labs)](https://reader034.vdocuments.mx/reader034/viewer/2022042520/586f90691a28ab54768b79ad/html5/thumbnails/45.jpg)
• Кэш-линия: 64 = 26 байт• Всего кэш-линий: 32 КБ / 64 Б = 512
Адресация в 8-канальном 32КБ кэше
064863
![Page 46: Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим делать / Антон Орлов (Qrator Labs)](https://reader034.vdocuments.mx/reader034/viewer/2022042520/586f90691a28ab54768b79ad/html5/thumbnails/46.jpg)
• Кэш-линия: 64 = 26 байт• Всего кэш-линий: 32 КБ / 64 Б = 512
Адресация в 8-канальном 32КБ кэше
064863
8
![Page 47: Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим делать / Антон Орлов (Qrator Labs)](https://reader034.vdocuments.mx/reader034/viewer/2022042520/586f90691a28ab54768b79ad/html5/thumbnails/47.jpg)
Адресация в 8-канальном 32КБ кэше
064863
64
8
• Кэш-линия: 64 = 26 байт• Всего кэш-линий: 32 КБ / 64 Б = 512• Бакетов: 512 / 8 = 64 = 26
![Page 48: Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим делать / Антон Орлов (Qrator Labs)](https://reader034.vdocuments.mx/reader034/viewer/2022042520/586f90691a28ab54768b79ad/html5/thumbnails/48.jpg)
Адресация в 8-канальном 32КБ кэше
06124863
64
8
• Кэш-линия: 64 = 26 байт• Всего кэш-линий: 32 КБ / 64 Б = 512• Бакетов: 512 / 8 = 64 = 26
idx
![Page 49: Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим делать / Антон Орлов (Qrator Labs)](https://reader034.vdocuments.mx/reader034/viewer/2022042520/586f90691a28ab54768b79ad/html5/thumbnails/49.jpg)
Адресация в 8-канальном 32КБ кэше
06124863
64
8
• Кэш-линия: 64 = 26 байт• Всего кэш-линий: 32 КБ / 64 Б = 512• Бакетов: 512 / 8 = 64 = 26
tag idx
![Page 50: Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим делать / Антон Орлов (Qrator Labs)](https://reader034.vdocuments.mx/reader034/viewer/2022042520/586f90691a28ab54768b79ad/html5/thumbnails/50.jpg)
Адресация в 8-канальном 32КБ кэше
06124863
64
8
• Кэш-линия: 64 = 26 байт• Всего кэш-линий: 32 КБ / 64 Б = 512• Бакетов: 512 / 8 = 64 = 26
• В каждом бакете:у адресов совпадают 6 бит idx
tag idx
![Page 51: Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим делать / Антон Орлов (Qrator Labs)](https://reader034.vdocuments.mx/reader034/viewer/2022042520/586f90691a28ab54768b79ad/html5/thumbnails/51.jpg)
#define COLUMNS 10#define ROWS (1<<28) // 256MB
int main () {char* mat[COLUMNS];for (int i = 0; i < COLUMNS; i++)
mat[i] = (char*)malloc(ROWS);
for (int j = 0; j < ROWS; j++) {for (int i = 0; i < COLUMNS; i++)
mat[i][j] = (char)j;}
int res = 0;for (int i = 0; i < COLUMNS; i++)
res += mat[i][i];return res;
}
12.32s
![Page 52: Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим делать / Антон Орлов (Qrator Labs)](https://reader034.vdocuments.mx/reader034/viewer/2022042520/586f90691a28ab54768b79ad/html5/thumbnails/52.jpg)
#define COLUMNS 10#define ROWS (1<<28) // 256MB
int main () {char* mat[COLUMNS];for (int i = 0; i < COLUMNS; i++)
mat[i] = (char*)malloc(ROWS + 64*i) + 64*i;
for (int j = 0; j < ROWS; j++) {for (int i = 0; i < COLUMNS; i++)
mat[i][j] = (char)j;}
int res = 0;for (int i = 0; i < COLUMNS; i++)
res += mat[i][i];return res;
}
![Page 53: Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим делать / Антон Орлов (Qrator Labs)](https://reader034.vdocuments.mx/reader034/viewer/2022042520/586f90691a28ab54768b79ad/html5/thumbnails/53.jpg)
#define COLUMNS 10#define ROWS (1<<28) // 256MB
int main () {char* mat[COLUMNS];for (int i = 0; i < COLUMNS; i++)
mat[i] = (char*)malloc(ROWS + 64*i) + 64*i;
for (int j = 0; j < ROWS; j++) {for (int i = 0; i < COLUMNS; i++)
mat[i][j] = (char)j;}
int res = 0;for (int i = 0; i < COLUMNS; i++)
res += mat[i][i];return res;
}
![Page 54: Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим делать / Антон Орлов (Qrator Labs)](https://reader034.vdocuments.mx/reader034/viewer/2022042520/586f90691a28ab54768b79ad/html5/thumbnails/54.jpg)
#define COLUMNS 10#define ROWS (1<<28) // 256MB
int main () {char* mat[COLUMNS];for (int i = 0; i < COLUMNS; i++)
mat[i] = (char*)malloc(ROWS + 64*i) + 64*i;
for (int j = 0; j < ROWS; j++) {for (int i = 0; i < COLUMNS; i++)
mat[i][j] = (char)j;}
int res = 0;for (int i = 0; i < COLUMNS; i++)
res += mat[i][i];return res;
}
![Page 55: Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим делать / Антон Орлов (Qrator Labs)](https://reader034.vdocuments.mx/reader034/viewer/2022042520/586f90691a28ab54768b79ad/html5/thumbnails/55.jpg)
#define COLUMNS 10#define ROWS (1<<28) // 256MB
int main () {char* mat[COLUMNS];for (int i = 0; i < COLUMNS; i++)
mat[i] = (char*)malloc(ROWS + 64*i) + 64*i;
for (int j = 0; j < ROWS; j++) {for (int i = 0; i < COLUMNS; i++)
mat[i][j] = (char)j;}
int res = 0;for (int i = 0; i < COLUMNS; i++)
res += mat[i][i];return res;
}
![Page 56: Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим делать / Антон Орлов (Qrator Labs)](https://reader034.vdocuments.mx/reader034/viewer/2022042520/586f90691a28ab54768b79ad/html5/thumbnails/56.jpg)
#define COLUMNS 10#define ROWS (1<<28) // 256MB
int main () {char* mat[COLUMNS];for (int i = 0; i < COLUMNS; i++)
mat[i] = (char*)malloc(ROWS + 64*i) + 64*i;
for (int j = 0; j < ROWS; j++) {for (int i = 0; i < COLUMNS; i++)
mat[i][j] = (char)j;}
int res = 0;for (int i = 0; i < COLUMNS; i++)
res += mat[i][i];return res;
}
2.12s
![Page 57: Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим делать / Антон Орлов (Qrator Labs)](https://reader034.vdocuments.mx/reader034/viewer/2022042520/586f90691a28ab54768b79ad/html5/thumbnails/57.jpg)
Кэш L1 и виртуальная память
06124863
64
8
Виртуальный адрес:
tag idx
![Page 58: Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим делать / Антон Орлов (Qrator Labs)](https://reader034.vdocuments.mx/reader034/viewer/2022042520/586f90691a28ab54768b79ad/html5/thumbnails/58.jpg)
Кэш L1 и виртуальная память
06124863
64
8
Виртуальный адрес:
tag idx
Страница: 4096 байт (12 бит адреса)
![Page 59: Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим делать / Антон Орлов (Qrator Labs)](https://reader034.vdocuments.mx/reader034/viewer/2022042520/586f90691a28ab54768b79ad/html5/thumbnails/59.jpg)
Кэш L1 и виртуальная память
06124863
64
8
Виртуальный адрес:
tag idx
061245
Физический адрес:
tag idx
Страница: 4096 байт (12 бит адреса)
![Page 60: Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим делать / Антон Орлов (Qrator Labs)](https://reader034.vdocuments.mx/reader034/viewer/2022042520/586f90691a28ab54768b79ad/html5/thumbnails/60.jpg)
Кэш L1 и виртуальная память
06124863
64
8
Виртуальный адрес:
tag idx
061245
Физический адрес:
tag idx
Страница: 4096 байт (12 бит адреса)
TLB: кэш для трансляции адресов
![Page 61: Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим делать / Антон Орлов (Qrator Labs)](https://reader034.vdocuments.mx/reader034/viewer/2022042520/586f90691a28ab54768b79ad/html5/thumbnails/61.jpg)
Проблема мелких страниц
64
8
1. Страница: 4 КБ
![Page 62: Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим делать / Антон Орлов (Qrator Labs)](https://reader034.vdocuments.mx/reader034/viewer/2022042520/586f90691a28ab54768b79ad/html5/thumbnails/62.jpg)
64
8Проблема мелких страниц1. Страница: 4 КБ2. L1 = 8 × 4 КБ = 32 КБ
![Page 63: Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим делать / Антон Орлов (Qrator Labs)](https://reader034.vdocuments.mx/reader034/viewer/2022042520/586f90691a28ab54768b79ad/html5/thumbnails/63.jpg)
64
8Проблема мелких страниц1. Страница: 4 КБ2. L1 = 8 × 4 КБ = 32 КБ
Что делать?• Повышать ассоциативность (канальность)• Виртуальные адреса в кэше
![Page 64: Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим делать / Антон Орлов (Qrator Labs)](https://reader034.vdocuments.mx/reader034/viewer/2022042520/586f90691a28ab54768b79ad/html5/thumbnails/64.jpg)
64
8Проблема мелких страниц1. Страница: 4 КБ2. L1 = 8 × 4 КБ = 32 КБ
Что делать?• Повышать ассоциативность (канальность)• Виртуальные адреса в кэше
3. TLB маленький!64 × 4 КБ = 512 КБ
![Page 65: Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим делать / Антон Орлов (Qrator Labs)](https://reader034.vdocuments.mx/reader034/viewer/2022042520/586f90691a28ab54768b79ad/html5/thumbnails/65.jpg)
1. Страница: 4 КБ2. L1 = 8 × 4 КБ = 32 КБ
Что делать?• Повышать ассоциативность (канальность)• Виртуальные адреса в кэше
3. TLB маленький!64 × 4 КБ = 512 КБ
4. Количество страниц256 ГБ / 4 КБ = 64 М!
Проблема мелких страниц
64
8
![Page 66: Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим делать / Антон Орлов (Qrator Labs)](https://reader034.vdocuments.mx/reader034/viewer/2022042520/586f90691a28ab54768b79ad/html5/thumbnails/66.jpg)
Source: http://mechanical-sympathy.blogspot.ru/2013/02/cpu-cache-flushing-fallacy.html
![Page 67: Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим делать / Антон Орлов (Qrator Labs)](https://reader034.vdocuments.mx/reader034/viewer/2022042520/586f90691a28ab54768b79ad/html5/thumbnails/67.jpg)
Source: http://mechanical-sympathy.blogspot.ru/2013/02/cpu-cache-flushing-fallacy.html
![Page 68: Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим делать / Антон Орлов (Qrator Labs)](https://reader034.vdocuments.mx/reader034/viewer/2022042520/586f90691a28ab54768b79ad/html5/thumbnails/68.jpg)
Source: http://mechanical-sympathy.blogspot.ru/2013/02/cpu-cache-flushing-fallacy.html
![Page 69: Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим делать / Антон Орлов (Qrator Labs)](https://reader034.vdocuments.mx/reader034/viewer/2022042520/586f90691a28ab54768b79ad/html5/thumbnails/69.jpg)
Source: http://mechanical-sympathy.blogspot.ru/2013/02/cpu-cache-flushing-fallacy.html
![Page 70: Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим делать / Антон Орлов (Qrator Labs)](https://reader034.vdocuments.mx/reader034/viewer/2022042520/586f90691a28ab54768b79ad/html5/thumbnails/70.jpg)
Source: http://mechanical-sympathy.blogspot.ru/2013/02/cpu-cache-flushing-fallacy.html
![Page 71: Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим делать / Антон Орлов (Qrator Labs)](https://reader034.vdocuments.mx/reader034/viewer/2022042520/586f90691a28ab54768b79ad/html5/thumbnails/71.jpg)
Source: http://mechanical-sympathy.blogspot.ru/2013/02/cpu-cache-flushing-fallacy.html
![Page 72: Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим делать / Антон Орлов (Qrator Labs)](https://reader034.vdocuments.mx/reader034/viewer/2022042520/586f90691a28ab54768b79ad/html5/thumbnails/72.jpg)
Source: http://mechanical-sympathy.blogspot.ru/2013/02/cpu-cache-flushing-fallacy.html
![Page 73: Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим делать / Антон Орлов (Qrator Labs)](https://reader034.vdocuments.mx/reader034/viewer/2022042520/586f90691a28ab54768b79ad/html5/thumbnails/73.jpg)
Row hammer
Source: https://en.wikipedia.org/wiki/Row_hammerSource: https://www.akkadia.org/drepper/cpumemory.pdf
![Page 74: Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим делать / Антон Орлов (Qrator Labs)](https://reader034.vdocuments.mx/reader034/viewer/2022042520/586f90691a28ab54768b79ad/html5/thumbnails/74.jpg)
Row hammer
Source: https://en.wikipedia.org/wiki/Row_hammerSource: https://www.akkadia.org/drepper/cpumemory.pdf
![Page 75: Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим делать / Антон Орлов (Qrator Labs)](https://reader034.vdocuments.mx/reader034/viewer/2022042520/586f90691a28ab54768b79ad/html5/thumbnails/75.jpg)
Row hammer
Source: https://en.wikipedia.org/wiki/Row_hammerSource: https://www.akkadia.org/drepper/cpumemory.pdf
![Page 76: Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим делать / Антон Орлов (Qrator Labs)](https://reader034.vdocuments.mx/reader034/viewer/2022042520/586f90691a28ab54768b79ad/html5/thumbnails/76.jpg)
Summary
• Меньше памяти — лучше!• Доступ в память — не O(1)• Меньше промахов в кэши и TLB• Меньше задержки на линках (RDIMM, LRDIMM, ECC)
![Page 77: Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим делать / Антон Орлов (Qrator Labs)](https://reader034.vdocuments.mx/reader034/viewer/2022042520/586f90691a28ab54768b79ad/html5/thumbnails/77.jpg)
Summary
• Меньше памяти — лучше!• Доступ в память — не O(1)• Меньше промахов в кэши и TLB• Меньше задержки на линках (RDIMM, LRDIMM, ECC)
• Важно помнить про иерархию• Cчетчики• Через уровни можно прыгать
![Page 78: Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим делать / Антон Орлов (Qrator Labs)](https://reader034.vdocuments.mx/reader034/viewer/2022042520/586f90691a28ab54768b79ad/html5/thumbnails/78.jpg)
Future
1. Parallel → Serial• HMC
2. 3D stacking• 3D TSV RLDIMM• HBM
3. NVRAM
![Page 79: Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим делать / Антон Орлов (Qrator Labs)](https://reader034.vdocuments.mx/reader034/viewer/2022042520/586f90691a28ab54768b79ad/html5/thumbnails/79.jpg)
Source: http://www.intelsalestraining.com/infographics/memory/3DXPointc.pdf
![Page 80: Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим делать / Антон Орлов (Qrator Labs)](https://reader034.vdocuments.mx/reader034/viewer/2022042520/586f90691a28ab54768b79ad/html5/thumbnails/80.jpg)
NVRAM в качестве основной памяти?
1: node = nvm_alloc(sizeof(node_t));2: node->value = val;3: node->next = head;4: head = node;
Source: http://www.hpl.hp.com/techreports/2012/HPL-2012-236.pdf
![Page 81: Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим делать / Антон Орлов (Qrator Labs)](https://reader034.vdocuments.mx/reader034/viewer/2022042520/586f90691a28ab54768b79ad/html5/thumbnails/81.jpg)
NVRAM в качестве основной памяти?
1: node = nvm_alloc(sizeof(node_t));2: node->value = val;3: node->next = head;4: head = node;
Intel:● CLWB (Cache Line Write Back)● PCOMMIT (to Persistent storage COMMIT)
Source: http://www.hpl.hp.com/techreports/2012/HPL-2012-236.pdf
![Page 82: Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим делать / Антон Орлов (Qrator Labs)](https://reader034.vdocuments.mx/reader034/viewer/2022042520/586f90691a28ab54768b79ad/html5/thumbnails/82.jpg)
NVRAM в качестве основной памяти?
1: node = nvm_alloc(sizeof(node_t));2: node->value = val;3: node->next = head;4: head = node;
Intel:● CLWB (Cache Line Write Back)● PCOMMIT (to Persistent storage COMMIT)
Source: http://www.hpl.hp.com/techreports/2012/HPL-2012-236.pdf
![Page 83: Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим делать / Антон Орлов (Qrator Labs)](https://reader034.vdocuments.mx/reader034/viewer/2022042520/586f90691a28ab54768b79ad/html5/thumbnails/83.jpg)
Спасибо за внимание!Вопросы?“What Every Programmer Should Know About Memory”
Ulrich Drepper, 2007
https://www.akkadia.org/drepper/cpumemory.pdf
![Page 84: Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим делать / Антон Орлов (Qrator Labs)](https://reader034.vdocuments.mx/reader034/viewer/2022042520/586f90691a28ab54768b79ad/html5/thumbnails/84.jpg)
Другие полезные ссылки• Dick Sites, Datacenter Computers: modern challenges in CPU designВидео: https://www.youtube.com/watch?v=QBu2Ae8-8LMСлайды: http://www.pdl.cmu.edu/SDI/2015/slides/DatacenterComputers.pdf
• What's new in CPUs since the 80s and how does it affect programmers?http://danluu.com/new-cpu-features/
• Row hammer Android exploit https://www.vusec.net/projects/drammer/
• Kumud Bhandari, Dhruva R. Chakrabarti, Hans-J. Boehm, Implications of CPU Caching on Byte-addressable Non-Volatile Memory Programminghttp://www.hpl.hp.com/techreports/2012/HPL-2012-236.pdf
![Page 85: Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим делать / Антон Орлов (Qrator Labs)](https://reader034.vdocuments.mx/reader034/viewer/2022042520/586f90691a28ab54768b79ad/html5/thumbnails/85.jpg)
RDIMM LRDIMM
Source: https://habrahabr.ru/company/hostkey/blog/272063/
![Page 86: Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим делать / Антон Орлов (Qrator Labs)](https://reader034.vdocuments.mx/reader034/viewer/2022042520/586f90691a28ab54768b79ad/html5/thumbnails/86.jpg)
2.5 ГБ
![Page 87: Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим делать / Антон Орлов (Qrator Labs)](https://reader034.vdocuments.mx/reader034/viewer/2022042520/586f90691a28ab54768b79ad/html5/thumbnails/87.jpg)
2.5 ГБ
![Page 88: Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим делать / Антон Орлов (Qrator Labs)](https://reader034.vdocuments.mx/reader034/viewer/2022042520/586f90691a28ab54768b79ad/html5/thumbnails/88.jpg)
2.5 ГБ
L1 TLB
![Page 89: Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим делать / Антон Орлов (Qrator Labs)](https://reader034.vdocuments.mx/reader034/viewer/2022042520/586f90691a28ab54768b79ad/html5/thumbnails/89.jpg)
2.5 ГБ
L2 TLB
![Page 90: Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим делать / Антон Орлов (Qrator Labs)](https://reader034.vdocuments.mx/reader034/viewer/2022042520/586f90691a28ab54768b79ad/html5/thumbnails/90.jpg)
256 ГБ
L2 TLB