когерентный кеш под мютексом )))
Oct. 11th, 2011 01:13 amОчередная мультитредная страшилка, на этот раз от Скотта Мейерса.
http://skillsmatter.com/podcast/home/cpu-caches-and-why-you-care на 0.35:00 вплоть до начала 37-й минуты.
Оказывается, когерентный кеш имеет страаашную проблему - если два процессора одновременно доступаются до одного и того же участка памяти - один с операцией чтения, а другой с операцией записи - когерентность кэша (кешей) будет нарушена. В чем это будет заключаться - Скотт вроде бы не поясняет, но угрожает страшными последствиями тем, кто не будет обращаться к разделяемому участку памяти под... мютексом или с помощью интерлок-операций! Хорошо хоть про интерлоки сказал, а то я б так и не догадался, как с подобной проблемой справляется код самих мютексов. )))
Я, конечно, не большой специалист по когерентности кешей. Поиск по интеловской процессорной документации ничего подобного не обнаружил, ну да может я плохо искал?
Забавно что сразу после этого Скотт рассуждает про false sharing, т.е. про использование несколькими процессорами приватных (не разделяемых) данных, находящихся на одной линии кеша, которое приводит к потере производительности. И там же говорит, что вообще вся эта механика кешей работает на уровне кеш-линий, а не на уровне отдельных слов памяти. Ну вот казалось бы, в этом самом месте нужно либо заявить, что на этом самом false sharing код должен вообще ЛОМАТЬСЯ, поскольку это вот ровно тот случай доступа к разделяемой кеш-линии без всяких мютексов и интерлоков, т.е. заявить, что практически ЛЮБОЙ мультитредный код сегодня может работать неверно, либо хлопнуть себя по лбу и сказать, что вообще-то когерентный кеш он на то и когерентный, что он когерентный ВСЕГДА и безо всяких исключений, а предыдущий пассаж с предупреждением об опасностях для кеша доступа без мютекса был полнейшей пургой.
Остался от этого пассажа в полнейшем недоумении.
http://skillsmatter.com/podcast/home/cpu-caches-and-why-you-care на 0.35:00 вплоть до начала 37-й минуты.
Оказывается, когерентный кеш имеет страаашную проблему - если два процессора одновременно доступаются до одного и того же участка памяти - один с операцией чтения, а другой с операцией записи - когерентность кэша (кешей) будет нарушена. В чем это будет заключаться - Скотт вроде бы не поясняет, но угрожает страшными последствиями тем, кто не будет обращаться к разделяемому участку памяти под... мютексом или с помощью интерлок-операций! Хорошо хоть про интерлоки сказал, а то я б так и не догадался, как с подобной проблемой справляется код самих мютексов. )))
Я, конечно, не большой специалист по когерентности кешей. Поиск по интеловской процессорной документации ничего подобного не обнаружил, ну да может я плохо искал?
Забавно что сразу после этого Скотт рассуждает про false sharing, т.е. про использование несколькими процессорами приватных (не разделяемых) данных, находящихся на одной линии кеша, которое приводит к потере производительности. И там же говорит, что вообще вся эта механика кешей работает на уровне кеш-линий, а не на уровне отдельных слов памяти. Ну вот казалось бы, в этом самом месте нужно либо заявить, что на этом самом false sharing код должен вообще ЛОМАТЬСЯ, поскольку это вот ровно тот случай доступа к разделяемой кеш-линии без всяких мютексов и интерлоков, т.е. заявить, что практически ЛЮБОЙ мультитредный код сегодня может работать неверно, либо хлопнуть себя по лбу и сказать, что вообще-то когерентный кеш он на то и когерентный, что он когерентный ВСЕГДА и безо всяких исключений, а предыдущий пассаж с предупреждением об опасностях для кеша доступа без мютекса был полнейшей пургой.
Остался от этого пассажа в полнейшем недоумении.