?

Log in

No account? Create an account
программистское - Поклонник деепричастий [entries|archive|friends|userinfo]
Anatoly Vorobey

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

Links
[Links:| English-language weblog ]

программистское [ноя. 23, 2007|06:02 pm]
Anatoly Vorobey
Я считаю, что каждому программисту будет полезно прочитать

What Every Programmer Should Know About Memory (PDF)

Почему это полезно:

- подробное объяснение того, как работает память, обращение к ней
- как устроены кэши процессора, когда они помогают, когда не очень
- как писать программы и оптимизировать код с учетом всех этих особенностей

Что не очень хорошо:

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

Если не нравится формат PDF, есть ссылки на HTML-версию.
СсылкаОтветить

Comments:
[User Picture]From: os80
2007-11-23 05:02 pm
Мне не нравится формат PDF. The file is damaged and could not be repaired.
(Ответить) (Thread)
[User Picture]From: kot_ivanovich
2007-11-23 06:11 pm
Нормально открывается (Reader 7.0), попробуйте ещё...
(Ответить) (Parent) (Thread)
[User Picture]From: _navi_
2007-11-23 06:06 pm
как писать программы и оптимизировать код с учетом всех этих особенностей
Согласен с тем, что это полезно прочитать, но сильно не понравилась неполнота аргументации, выраженная фактически только это строчкой (которая вдобавок может быть проинтерпретированна как упирающая исключительно на оптимизацию). К сожалению, хорошо сформулировать, почему “нужно понимать, как всё работает на самом деле”, тоже не могу.
(Ответить) (Thread)
[User Picture]From: malfet_
2007-11-23 06:12 pm
Очень интересный, хотя и немного длинный, writeup.
Вот только я не понимаю, что значит "No redistribution allowed." для интернет публикации. И "All rights reserved." на работу одного из ключевых сотдруников компании, делющий ставку на GPL - это очень странно. Drepper правда вообще очень неоднозначная фигура.
(Ответить) (Thread)
[User Picture]From: avva
2007-11-23 08:29 pm
Мягко говоря неоднозначная. Но, в общем, начхать на его тараканов, объясняет хорошо и подробно.
(Ответить) (Parent) (Thread)
From: pesec
2007-11-23 06:18 pm
Классно, весь цикл.
(Ответить) (Thread)
[User Picture]From: kot_ivanovich
2007-11-23 06:18 pm
Спас, просмотрю обязательно, спасибо. Меня недавно поразило, что в задаче 2D FFT чуть ли не самым сложным куском является транспонирование матрицы. Причем для разных CPU оказываются оптимальными разные алгоритмы, поэтому fftw, например, знает их около дюжины и при создании плана FFT просто пробует все, замеряет время, и включает в план тот, который оказался быстрее.
(Ответить) (Thread)
From: dmpogo
2007-11-23 08:25 pm
Да, помните еще в детстве объясняли что в фортране надо матрицы считывать колонками, а в C - строками :)
(Ответить) (Parent) (Thread)
[User Picture]From: kot_ivanovich
2007-11-23 08:46 pm
Этот замечательный совет жив до сих пор. Проблема в том, что, когда ты транспонируешь матрицу, то если ты считываешь строками, то пишешь колонками, и наоборот. В результате современные алгоритмы транспонирования выписывают сложные пируэты, пытаясь и cache line полностью затоптать (ведь прочли всю уже, не пропадать же добру!) и на cache associativity не наступить. При этом программист заранее не знает ни размеров L1, ни размеров L2, ни associativity – мало ли какой CPU у пользователя, и мало ли чего еще Intel с AMD успеют напридумывать за время жизни программы...
(Ответить) (Parent) (Thread)
From: dmpogo
2007-11-25 01:23 am
Разумеется, я о том же что уже из этого известного примера видно что транспонирование нетривиально.
(Ответить) (Parent) (Thread)
[User Picture]From: ygam
2007-11-23 09:11 pm
Спасибо! Не ожидал, что протокол когерентности памяти бесплатно реализует транзакции!
(Ответить) (Thread)
[User Picture]From: avva
2007-11-23 09:20 pm
Да, мне описание протокола памяти тоже очень понравилось.
(Ответить) (Parent) (Thread)
From: (Anonymous)
2007-11-24 03:22 am
Bug in GCC:
    #include 
[Error: Irreparable invalid markup ('<stdio.h>') in entry. Owner must fix manually. Raw contents below.]

Bug in GCC:
<ul><pre>
#include <stdio.h>
#include <stdlib.h>

int main(void) {
int a = 2;
if ((-10)*abs(a-1)==(10)*abs(a-1)) {
printf("OMG! -10 == 10!!!\n");
} else {
printf("Nothing special\n");
}
return 0;
}
</pre></ul>
(4.2.2. has it allright)
(Ответить) (Thread)
[User Picture]From: avva
2007-11-25 06:41 am
Да, я это тоже увидел недавно в другом месте. Прекрасно!
(Ответить) (Parent) (Thread)
From: qaraabayna
2007-11-24 03:35 pm

offtop

На /. висит вот это

http://politics.slashdot.org/article.pl?sid=07/11/24/1334251

Особая статья юмора для русских иммигрантов - как западная техномидия высасывает темы русполитновостей из инфопотока...
(Ответить) (Thread)
[User Picture]From: dimrub
2007-11-26 03:07 pm
Интересная штука. Скачал, читаю.
(Ответить) (Thread)