August 4, 2010

многопоточность, многоядерность и кэш-линии

Herb Sutter, Maximize Locality, Minimize Contention

Этож надо иметь талант, чтобы простую истину зафигачить в статью аж на три страницы, две диаграммы и несколько кусков исходного кода.

А можно было просто написать:

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

Немного более грамотно эту тему раскрывает Рихтер в 8 главе "Создания эффективных WIN32-приложений", раздел "Кэш-линии".