Здравствуйте, vdimas, Вы писали:
V>Я уже озвучил:
V>V>По классике наилучший результат из наивных даёт схема kji.
V>Т.е. на внешнем цикле запись, на втором — пробегание по памяти "скачками", и на внутреннем цикле пробегание по памяти упорядоченно.
Что сдерживает вас от написания трёх строчек кода? Зачем все вот эти литературные упражнения?
for(k = 0; k < n; k++ )
for(j = 0; j < n; j++ )
for(i = 0 i < n; i++ )
C[j * n + i] += A[j * n + k] * B[k * n + i];
Вы имеете в виду вот этот порядок?
V>В гугле есть сразу несколько ссылок.
Я не нашёл ни одной. Нашел пару ссылок про то, как можно улучшить MKL. Сравнения MKL c наивным кодом не нашёл.
V>Но мне нравится твоя ссылка, бо она хорошо показывает, что библиотеки — не панацея.
Она хорошо показывает ложность утверждения "А для Интел как ни крути — ничего уже особо не накрутишь."
V>Матрицы матрицам рознь.
V>Там для небольших матриц избыточность телодвижений.
Ну, если мы говорим про матрицы 4*4 — да, избыточно. На всякий случай напомню, что статья про Эльбрус гоняет тесты для матриц размером 1000*1000.
Может, надо запустить код автора на небольшой матрице, и посмотреть, что там с гигафлопсами?
V>В либах так и происходит — обязательно есть ветвления (чаще по switch).
V>Как в самом начале — по размерностям матриц, так и при обслуживании "хвостов" некратных размеров.
Всё верно. Вопрос-то в чём?
V>Для заведомо известных размеров кучу телодвижений можно нивелировать, ес-но.
Тем более.
V>Да всё можно сделать.
V>Мы тут переливаем из пустого в порожнее вокруг первого же моего утверждения:
V>- готовые библиотеки дают хороший старт;
V>- при надобности конкретные места можно уже вылизывать врукопашную.
V>Мне хотелось обратить внимание, что для Эльбруса как либы, так и рукопашное вылизывание дают, не побоюсь пафоса, чудовищный профит.
Вы всё ещё не показали цитату, где рукопашное вылизывание на Эльбрусе объехало библиотеку.
V>Да без проблем — допили тот код до работы с произвольными размерами матриц и замерь.
V>Дай бог получить результаты как у интеловской либы, а замеров по ней в сети хватает.
Интеловская либа, судя по найденным мной статьям — ещё не предел.
V>А как они могут гоняться совместно? ))
Ну, вас же не смутила ссылка, где совместно гоняется EML и наивный код на Интеле. Вот надо точно так же, только вместо
for(i=0....) — MKL.
V>В статье про Эльбрус они дали всё.
Где именно?
V>Не таймингов, а архитектуры ядер.
И таймингов и архитектуры.
V>Это верно и для регистров SSE.
V>Т.е. конкретные твои интриситки либо расчитаны на SSE1-SSE4 (8 регистров XMMx), либо на AVX+ (16 регистров YMMx)
Либо на 32 регистра ZMMx
При этом, когда я пишу интринсики, они компилируются ровно в нужные мне векторные команды. А не случайно параллелятся компилятором в зависимости от фазы луны.
V>Я лишь указал, что вместо того, чтобы руками писать на ассемблере-интистиках (как по твоей ссылке), для Эльбруса (по моей ссылке) был использован вариант, где код генерится компилятором, которому лишь подсказывают степень раскрутки цикла.
Осталось показать, как код с подсказками догоняет код с интринсиками.
V>При смене версии SSE/AVX в твоём случае придётся переписывать код. ))
Для AVX у нас хотя бы есть гарантия, что код на следующем процессоре будет исполняться
не хуже.
Я не уверен в том же для Эльбруса.
V>Это тебе нет, хотя конкретно тебе говорили, как оно будет, и оно так и было.
V>Зато ты фантазировал безудержно, помнится.
V>(не только ты, но ты громче всех)
И в итоге оказалось, что всё произошло так, как я говорил, хоть и не сразу
V>Джава давно повернулась лицом к опенсорсу, но огромного кол-ва ревьюверов джава-машинки я не наблюдаю.
А я — наблюдаю. Просто вы не вращаетесь в тех кругах, где принято пилить JVM.
V>Если джава не повторит за дотнетом поворачивание лицом к таким людям — постепенно уйдёт примерно туда же, куда ушел популярный когда-то Perl.
Увы, не уйдёт. Но это оффтоп к данной дискуссии.
V>Сначала стали контрибутить нейтивные фишки, и только затем подтянулась широкая общественность.
V>Т.е. между тем, как открыли в опенсорс и тем, как подтянулось приличное кол-во людей, прошло прилично времени.
Хм. А кто контрибутил нейтивные фишки?
V>Разумеется, конкретно ты был не при чём, просто ты был тогда удобным мальчиком для битья, полезным сам знаешь кем, который безо-всякого принуждения озвучивал точку зрения именно тех людей, из-за ущербности мыслительного аппарата которых IT так обделалось, что аж на десятилетие. Пинать тебя было банально удобно. Жаль, ты не понимал и половины того, что тебе говорили, бо обитаешь в своём параллельном мире, связь с реальностью минимальная. ))
Меньше пафоса, больше дела.