|
9 / 9 / 9
Регистрация: 19.09.2011
Сообщений: 272
|
|||||||||||
Инлайн-функция замедляет работу11.04.2013, 16:12. Показов 2204. Ответов 16
Метки нет (Все метки)
Здравствуйте! видимо что-то делаю неправильно...имею код. Запускаю скомпилированную программу - работает с одной скоростью. Копипастю код в инлайн функцию - скорость выполнения резко уменьшается.
если кому интересно - вот начальный код
0
|
|||||||||||
| 11.04.2013, 16:12 | |
|
Ответы с готовыми решениями:
16
Насколько кортеж со строками замедляет работу Замедляет ли работу программы использование библиотек?
|
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
| 11.04.2013, 16:21 | |
|
IcyWind, Инлайтить большие функции - это как-то грустно, не находите? К слову, совсем не факт, что функция будет заинлайнена
0
|
|
|
9 / 9 / 9
Регистрация: 19.09.2011
Сообщений: 272
|
|
| 11.04.2013, 17:00 [ТС] | |
|
Хорошо. Допустим, что она не инлайнится в функцию мейн. Тогда единственным накладным расходом будет именно вызов этой функции. Тогда всё-равно непонятно! Ведь, когда я замеряю производительность внутри самой функции - то получаю ту же картину - падение производительности примерно в 2 раза
0
|
|
|
500 / 474 / 63
Регистрация: 26.01.2011
Сообщений: 2,033
|
|
| 11.04.2013, 17:29 | |
|
вам уже сказали , что инлайнить большие функции нельзя , почитайте про это , да и ещё компилятор видать совсем идиот если даёт это делать.Удачи
0
|
|
|
503 / 352 / 94
Регистрация: 22.03.2011
Сообщений: 1,112
|
|
| 11.04.2013, 17:39 | |
|
Инлайнить большие функции можно, если нужно. Но есть одно ограничение inline это всего лишь пожелание к компилятору, а не строгое указание. Поэтому он оставляет за собой право встроить или нет (в данном случае нет ибо есть цикл). В вашем случае при инлайне не срабатывает #pragma omp parallel. Если вы знаете с чем работаете читайте маны, если нет, то мой вам совет не трогайте код.
2
|
|
|
9 / 9 / 9
Регистрация: 19.09.2011
Сообщений: 272
|
||
| 11.04.2013, 19:45 [ТС] | ||
|
И, кстати, если в функции полностью закомментировать директивы openmp, то производительность нормализуется. Не подскажете, как обернуть функцию в параллельную секцию? или статьи на эту тему? и, если есть идеи как ускорить алгоритм, не используя ассемблерные вставки или другие низкоуровневые конструкции, буду очень благодарен) то, что выложил - пока предел моих знаний)
0
|
||
|
500 / 474 / 63
Регистрация: 26.01.2011
Сообщений: 2,033
|
|||
| 11.04.2013, 22:09 | |||
|
Добавлено через 1 минуту
0
|
|||
|
503 / 352 / 94
Регистрация: 22.03.2011
Сообщений: 1,112
|
|
| 12.04.2013, 02:37 | |
|
2Игорь с++ Компилятор меня не пошлет с инлайнами в любом случае, даже при -Wall и -pedantic. Что значит большие инлайны? Сколько строк? Каков их смысл? За примерами смотрите исходники webkita.
2IcyWind Ээээ батюшка да Вы невнимательно копипастите посмотрите на num_tread(), а я та замахнулся на компилятор грешить. Кстате Ваш алгоритм уже оптимизирован оочень сильно в нем учтена оптимизация на уровне инструкций, а это последняя оптимизация распаралеливания.
0
|
|
|
9 / 9 / 9
Регистрация: 19.09.2011
Сообщений: 272
|
|||||||
| 12.04.2013, 02:53 [ТС] | |||||||
|
Что-то не могу найти косяк копипаста...вы имеете ввиду это?
кстати, я эту всю штуку написал для использования потом в алгоритме блочного перемножения...пока тестил, нашёл ошибку в своей логике...она касается расположения блоков в массиве... довольно трудно "выцепить" именно тот блок, который мне нужен. Для этого придумал пересчитывать индекс матрицы...при заполнении...чтобы элементы в памяти хранились последовательно по блокам. Таким образом, написанный алгоритм можно не менять нормальное ли это решение? или есть что-нибудь более интересное?
0
|
|||||||
|
503 / 352 / 94
Регистрация: 22.03.2011
Сообщений: 1,112
|
|
| 12.04.2013, 13:21 | |
|
А время вы тоже засекали на 1 потоке? Если да, то возможно повлияла синхронизация. Но чтобы точно быть знать, если интересно и есть время, дизассемблируйте обе версии посмотрите в чем разница.
0
|
|
|
|
||
| 12.04.2013, 13:47 | ||
|
А значит дело в другом( ну или это косвенно влияет) ... то есть для чистоты эксперемента уберите распараллеливание. Вполне возможно что inline мешает работе omp - поэтому проигрыш.
0
|
||
|
9 / 9 / 9
Регистрация: 19.09.2011
Сообщений: 272
|
|
| 12.04.2013, 15:06 [ТС] | |
|
Сначала загорелся желанием дизасемблировать...но потом понял, что это надолго...опыта то у меня нет совсем. Поэтому забил. Могу только поделиться впечатлениями. Падение производительности действительно происходит не из-за функции. Но она каким-то образом косвено влияет (в сочетании с openMP). Теперь поясню:
1.)берём код - кидаем в main() - производительность 3.7 Gflops на одном потоке, 6.8 Gflops на двух. 2.)копируем код в инлайн функцию(), передаём туда матрицы через указатели - ну как в коде. Производительность 2 Gflops на одном потоке, 4Gflops на двух. 3.)убираем слово инлайн - аналогично пункту 2 4.)убираем все упоминания об OpenMp в функции - производительность возвращается на уровень 3.7Gflops
0
|
|
|
503 / 352 / 94
Регистрация: 22.03.2011
Сообщений: 1,112
|
|
| 12.04.2013, 16:06 | |
|
Попробуйте обьявить double *A, double *B, double *result как volatile и лучше мувните их в глобал скоп. Думаю компилятор оптимизирует их.
0
|
|
|
9 / 9 / 9
Регистрация: 19.09.2011
Сообщений: 272
|
||
| 13.04.2013, 08:05 [ТС] | ||
|
не нравится такое компилятору. А вынос в глобал не помогает...если omp parallel вызывать в самой функции, то всё так же падает Добавлено через 59 секунд Видимо тогда придётся держать весь код в мейне)
0
|
||
|
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
| 13.04.2013, 10:09 | |
|
Длинно писать, что есть ручной инлайн, можно, а инлайнить большие функции средствами языка нельзя? Что за бред?
Добавлено через 7 минут Нельзя злоупотреблять инлайном, а не инлайнить длинный функции. Функция может быть в 100 строк и инлайниться в 1000 разных мест в программе, что плохо, другая функция может занимать 5000 строк и инлайниться дважды, что примерно в десятеро лучше. Примерно потому, что важны не строки исходного текста, а байты исполняемого кода, а одно с другим связано не так однозначно, как это интуитивно представляется. Но если большая функция инлайнится один раз в цикл в 1000 шагов, то имеет только один экземпляр, это просто цикл с длинным телом, не более. Наоборот, цикл в инлайн-функции - это просто цикл. Именно ручное избыточное упоминание длинных инлайн-функций плохо. Не само их наличие и не использование в цикле, а именно многократное ручное упоминание.
0
|
|
|
9 / 9 / 9
Регистрация: 19.09.2011
Сообщений: 272
|
|||||||
| 13.04.2013, 12:59 [ТС] | |||||||
а у вас нет мыслей относительно того, почему наличие директив OpenMP в функции снижает производительность более чем в 2 раза?
0
|
|||||||
|
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
||||||||
| 13.04.2013, 13:22 | ||||||||
Добавлено через 4 минуты 1. Меньшая её доля помещается в кеш. 2. Она нуждается в большем количестве подгрузок страниц с диска. Поэтому и стараются инлайнить в первую очередь короткие функции, так как это мало влияет на общий размер. Но при этом учитывается и частота вызовов, и их количество, так как на количество (в примере на 3) идёт умножение размера функции. Добавлено через 5 минут Если функция вызывается ровно в одном месте, она должна быть заинлайнена не зависимо длины самой функции, числа шагов цикла, в который она вложена и шагов цикла внутри самой функции, так как размер от этого не вырастет, а пара вызов/возврат сократится. Но если даже маленькая функция в пару строк вызывается в миллиарде различных строк, инлайнить её во все эти строки нельзя, тогда надо смотреть, куда именно заинлайнить выгодней, возможно вообще отказаться от инлайна.
0
|
||||||||
| 13.04.2013, 13:22 | |
|
Помогаю со студенческими работами здесь
17
Memo замедляет работу Почему PFD_DOUBLEBUFFER замедляет работу? Замедляет ли работу приведенная конструкция Вирус замедляет и останавливает работу браузера
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|