|
Rarruga
|
|
stranger
|
|
|
|
|
|
|
Рег.: 13.09.2006
|
|
Сообщений: 18
|
|
|
|
Рейтинг: 0
|
|
Re: Увеличение скорости путем разделения цикла
[re: Rott]
01.10.2006 16:04
|
|
|
В общем я потестировал разные размеры векторов и понял, что если все вектора одновременно помещаются в L2, то никакого достоверного ускорения от второго варианта нет. А вот как только все сразу перестает вмещаться в L2 - то скорость второго варианта растет и улучшеное может достигать примерно 80%. Но! Как только два (а не шесть) массива перестают вмещаться в L2 - опять два вариант одинаковы по скорости!
Т.е. как я понимаю здесь дело исключительно в том, вмещаются ли все данные цикла в L2.
|
|
|
Rarruga
|
|
stranger
|
|
|
|
|
|
|
Рег.: 13.09.2006
|
|
Сообщений: 18
|
|
|
|
Рейтинг: 0
|
|
Re: Увеличение скорости путем разделения цикла
[re: Rott]
01.10.2006 16:06
|
|
|
Quote:
Кстати, возможно стоит изменить алгоритм. Если ты перемножаешь большие матрицы, скажем, то они тоже целиком в кеш не влезают, поэтому пользуются алгоритмами блочного перемножения, которые дают прирост производительности в несколько раз.
Я думаю так и сделать. Т.е. при старте программы проверять количество кеша, а потом выбирать тот или иной алгоритм (способ разбиения).
|
|
|
alcogolic
|
|
anonymous
|
|
|
|
|
|
|
Рег.: 01.06.2005
|
|
Сообщений: 1678
|
|
|
|
Рейтинг: 2109
|
|
Re: Увеличение скорости путем разделения цикла
[re: Rarruga]
01.10.2006 16:20
|
|
|
а если testdot() вынести за цикл и сохранить его значение в отдельной переменной - во сколько раз будет прирост скорости? 
|
'НИКАКИХ КРЫЛЬЕВ НЕТ. ПРОСТО УМИРАЕШЬ И ВСЕ' Гусеница |
|
|
Rarruga
|
|
stranger
|
|
|
|
|
|
|
Рег.: 13.09.2006
|
|
Сообщений: 18
|
|
|
|
Рейтинг: 0
|
|
Re: Увеличение скорости путем разделения цикла
[re: alcogolic]
01.10.2006 16:22
|
|
|
Quote:
а если testdot() вынести за цикл и сохранить его значение в отдельной переменной - во сколько раз будет прирост скорости?
Ну епт. Это же только тестовый пример. Не важно что там в testdot, главное чтобы оно лезло в L2 целиком.
|
|
|
Grig
|
|
Carpal Tunnel
|
|
|
|
|
|
|
Рег.: 03.02.2004
|
|
Сообщений: 5344
|
|
Из: Глубокое замкадье
|
|
Рейтинг: 7053
|
|
Re: Увеличение скорости путем разделения цикла
[re: Rarruga]
02.10.2006 10:43
|
|
|
Рекомендуется почитать http://www.citforum.ru/book/optimize/ Мое краткое резюме: 1) Факторов скорости дофига. Насколько данные помещаются в кэш (какого уровня?). Следует учесть принципы адресации. Мегабайтовый кэш может и на 512k переполнится. Насколько набор команд (тело цикла), влезает в коммандный кэш Что происходит с конвейером при переходе на следующую итерацию цикла (или мб компилятор раскрыл цикл?) По каким адресам лезешь в оперативку? В какие блоки попадаешь? Выравнивание? Правильно ли организована предвыборка? Что удается хранить в регистрах? Насколько эффективен механизм виртуальной памяти, стратегия размещения страниц? Насколько ты чередуешь целочисленные операции и операции с плавающей точкой (они могут выполняться параллельно) 2) Хрен ты все эти факторы заботаешь, поэтому Пиши нормальный понятный код, выбрав достаточно быстрый алгоритм (qsort vs пузырек) Компилируй хорошим оптимизирующим компилятором Профилируй и экспериментируй
|
|