Документ взят из кэша поисковой машины. Адрес оригинального документа : http://www.snto-msu.net/showflat.php?Number=5151703&src=arc&showlite=
Дата изменения: Unknown
Дата индексирования: Wed Apr 13 08:03:51 2016
Кодировка: Windows-1251
Увеличение скорости путем разделения цикла - Public forum of MSU united student networks
Root | Google | Yandex | Mail.ru | Kommersant | Afisha | LAN Support
  
Technical >> Development (Archive)

Страницы: 0 | 20 | показать все
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 пузырек)
Компилируй хорошим оптимизирующим компилятором
Профилируй и экспериментируй


Страницы: 0 | 20 | показать все

Technical >> Development (Archive)

Дополнительная информация
0 зарегистрированных и 0 анонимных пользователей просматривают этот форум.

Модераторы:  DarkGray 

Печать темы

Права
      Вы можете создавать новые темы
      Вы можете отвечать на сообщения
      HTML отключен
      UBBCode включен

Рейтинг:
Просмотров темы:

Переход в