Страница 9 из 13 Первая ... 7891011 ... Последняя
Показано с 161 по 180 из 258

Тема: Помогите с программированием C/C++

  1. #161
    Завсегдатай Аватар для Nikkov
    Регистрация
    01.11.2005
    Адрес
    Омск, Сибирь
    Возраст
    52
    Сообщений
    1,375

    По умолчанию Re: Помогите с программированием C/C++

    Практически любая мат. библиотека поддерживает векторные инструкции. Я, например, использую Eigen + intel mkl для матриц.
    Электроника наука слабоизученная (c)
    Неизвестный специалист антенного хозяйства по поводу периодического пропадания сигнала в коллективной антенне

  2. #162
    Частый гость Аватар для Chaa
    Регистрация
    23.08.2006
    Адрес
    Курган
    Сообщений
    374

    По умолчанию Re: Помогите с программированием C/C++

    Цитата Сообщение от Openreel Посмотреть сообщение
    Вопрос ко всем, а как в нынешнее время используют продвинутые команды х86/ia64, есть поддержка у языков высокого уровня (не одну команду вставить аля инлайн ассемблер, а честная кодогенерация) или только руками на ассемблере?
    Если нужно не одну команду то, как сказали выше, библиотеки с математическими алгоритмами.
    Если по одной или близко к этому - то intrinsics (или builtin functions в gcc).
    Например:
    https://devblogs.microsoft.com/oldne...15-00/?p=97586

  3. #163
    Не хочу! Аватар для Alex
    Регистрация
    20.03.2003
    Адрес
    Worldwide
    Возраст
    62
    Сообщений
    38,965

    По умолчанию Re: Помогите с программированием C/C++

    Цитата Сообщение от Meta|_ Посмотреть сообщение
    Очень часто (и уже много лет) слышу, какие компиляторы сейчас умные - "не то что 5-10 лет назад". Н

    Ну это, смотря какие.
    Например для одной платформы, я сидел на асме с начала 90-х до начала 00-х - несмотря на наличие компиляторов Си, которые были мягко гоовря, фигня. Очень плохой код генерили. Зато когда в начале 00-х повился первый нормальный Си-компилятор, я с тех по про асм для той платформы забыл, от слова "совсем". Впрочем, в последнее время я и о той платформе почти забыл.
    "Замполит, чайку?"(с)"Охота за Красным Октябрем".
    "Да мне-то что, меняйтесь!"(с)анек.
    <-- http://altor1.narod.ru --> Вопросы - в личку, е-мейл, скайп.

  4. #164
    Завсегдатай Аватар для Meta|_
    Регистрация
    08.03.2005
    Адрес
    Северная Голландия
    Возраст
    41
    Сообщений
    2,199

    По умолчанию Re: Помогите с программированием C/C++

    Цитата Сообщение от Alex Посмотреть сообщение
    Ну это, смотря какие.
    Эпизод первый, 2005-й год.
    Я писал диплом, и нужно было было жёстко оптимизировать мою супер-функцию, чтобы она была быстрее аналогов. Язык - С, процессор - х86, расширения. Попробовал лучшие на тот момент компиляторы (в т. ч. MSVC и Intel), оптимизировал до упора в С, даже циклы пробовал разворачивать. В итоге переписал основной цикл на асме и в результате ускорился почти вдвое (дальше ускоряться уже не требовалось ). Тогда компиляторы очень неэффективно использовали доступные регистры.

    Эпизод второй. Полгода назад, gcc, cortex m4, оптимизация по использованию ОЗУ.
    Тут надо отметить, что gcc вообще генерит менее эффективный код по сравнению, например, с Keil. Заметил явную зависимость эффективности оптимизации от порядка строк в исходнике. То есть когда несколько логически связанных строк кода стоят рядом - компилятор понимает, что они связаны, рассматривает их как целое и неплохо оптимизирует. А если половину этих строк просто перенести вверх строк на 20 - в пределах той же функции и без изменения какой-либо логики, то компилятор, судя по всему, перестаёт видеть между ними логическую связь, и эффективность оптимизации сильно падает.
    ∇·D = ρ
    ∇·B = 0
    ∇xE = – ∂B/∂t
    ∇xH = j + ∂D/∂t
    © J. C. Maxwell, O. Heaviside

  5. #165
    Завсегдатай Аватар для E.Sokol
    Регистрация
    17.01.2015
    Адрес
    Урал
    Сообщений
    1,386

    По умолчанию Re: Помогите с программированием C/C++

    Моя последняя оптимизация - ускорение в 10 раз, это была функция умножения в формате double-double.

    ---------- Сообщение добавлено 12:54 ---------- Предыдущее сообщение было 12:50 ----------

    Цитата Сообщение от Chaa Посмотреть сообщение
    intrinsics
    Интрисинки - это скорее коммерческая приблуда и толку от них, по моему мнению, мало.

    1) код становится совершенно нечитаемым;
    2) мыслить один фиг надо по-ассемблеровски;
    3) эффективно управлять памятью и регистрами по-прежнему невозможно.

  6. #166
    Частый гость Аватар для Chaa
    Регистрация
    23.08.2006
    Адрес
    Курган
    Сообщений
    374

    По умолчанию Re: Помогите с программированием C/C++

    Насчет нечитаемости трудно согласиться - одна функции соответствует одной ассемблерной инструкция с примерно тем же именем. Но вместо названий регистров можно использовать осмысленные имена переменных.
    На мой взгляд, помнить, что и где расположено в 16 регистрах по 256 бит каждый, это сомнительное удовольствие.

    А так коммерческая, да. Ведь дает главное: скорость разработки за счет перекладывания работы на компилятор и уменьшение количества ошибок.

  7. #167
    Завсегдатай Аватар для E.Sokol
    Регистрация
    17.01.2015
    Адрес
    Урал
    Сообщений
    1,386

    По умолчанию Re: Помогите с программированием C/C++

    Цитата Сообщение от Chaa Посмотреть сообщение
    На мой взгляд, помнить, что и где расположено в 16 регистрах по 256 бит каждый, это сомнительное удовольствие.
    Можно оставлять комментарии в коде и помнить не придётся. Таки 21 век на дворе - подсветка кода, всплывающие подсказки и всё такое.

    ---------- Сообщение добавлено 16:03 ---------- Предыдущее сообщение было 15:51 ----------

    Цитата Сообщение от Chaa Посмотреть сообщение
    На мой взгляд, помнить, что и где расположено в 16 регистрах по 256 бит каждый, это сомнительное удовольствие.
    Тут вот в чём загвоздка. Одна из ключевых техник оптимизации - это минимизация операций с памятью. А количество регистров ограничено. Можно использовать 10 SSE-интринсиков, и они всё равно будут хранится в памяти - регистров на всех не хватит. Поэтому да - надо знать не просто, что где лежит, а ещё как долго это там лежать будет.

  8. #168
    Частый гость Аватар для Chaa
    Регистрация
    23.08.2006
    Адрес
    Курган
    Сообщений
    374

    По умолчанию Re: Помогите с программированием C/C++

    Цитата Сообщение от E.Sokol Посмотреть сообщение
    Можно оставлять комментарии в коде и помнить не придётся. Таки 21 век на дворе - подсветка кода, всплывающие подсказки и всё такое.
    Так я и говорю - скорость разработки. Одно дело когда вы вручную создаете карту регистров, и другое дело когда это сделает компилятор.
    Да, вручную вы это сделаете лучше, но в несколько раз дольше. А если вдруг в процессе вкрадется ошибка - то отладка убъет и в сто раз больше времени.

  9. #169
    Завсегдатай Аватар для E.Sokol
    Регистрация
    17.01.2015
    Адрес
    Урал
    Сообщений
    1,386

    По умолчанию Re: Помогите с программированием C/C++

    Цитата Сообщение от Chaa Посмотреть сообщение
    Так я и говорю - скорость разработки. Одно дело когда вы вручную создаете карту регистров, и другое дело когда это сделает компилятор.
    А ещё быстрее вообще не пытаться вручную оптимизировать код интринсиками, и также доверить это дело компилятору. На то она и оптимизация, чтобы своей головой думать, а не компиляторной.

  10. #170
    Частый гость Аватар для Chaa
    Регистрация
    23.08.2006
    Адрес
    Курган
    Сообщений
    374

    По умолчанию Re: Помогите с программированием C/C++

    Жизнь слишком коротка, чтобы писать на ассемблере.

  11. #171
    Добрый Аватар для Gudronov
    Регистрация
    12.11.2009
    Адрес
    Брянск
    Возраст
    57
    Сообщений
    11,849

    По умолчанию Re: Помогите с программированием C/C++

    Цитата Сообщение от Chaa Посмотреть сообщение
    Насчет нечитаемости трудно согласиться - одна функции соответствует одной ассемблерной инструкция с примерно тем же именем. Но вместо названий регистров можно использовать осмысленные имена переменных.
    На мой взгляд, помнить, что и где расположено в 16 регистрах по 256 бит каждый, это сомнительное удовольствие.
    Круто, но путанно и непонятно .
    Насколько я помню, основной проблемой при асмописании была как раз нехватка (у Интела, по крайней мере) регистров, ставшая фундаментальным эпическим баяном.
    Никто не будет размещать долгоживущие данные в регистрах, они не для того, равно как и производитель железа не будет плодить внутри своего процессора регистры специально для данных. Для этого существуют переменные, то есть псевдонимы адресов, с самого первого масма-тасма, так что никаких проблем не было и нет.

  12. #172
    Частый гость Аватар для Chaa
    Регистрация
    23.08.2006
    Адрес
    Курган
    Сообщений
    374

    По умолчанию Re: Помогите с программированием C/C++

    Цитата Сообщение от Gudronov Посмотреть сообщение
    Круто, но путанно и непонятно .
    Насколько я помню, основной проблемой при асмописании была как раз нехватка (у Интела, по крайней мере) регистров, ставшая фундаментальным эпическим баяном.
    Никто не будет размещать долгоживущие данные в регистрах, они не для того, равно как и производитель железа не будет плодить внутри своего процессора регистры специально для данных. Для этого существуют переменные, то есть псевдонимы адресов, с самого первого масма-тасма, так что никаких проблем не было и нет.
    Вот пишете вы цифровой фильтр.
    Коэффициенты неплохо бы в регистрах держать. Данные для некоторого кол-ва предыдущих отсчетов тоже. Исходные данные в регистр загрузить. Результат опять же. На все это у вас есть 16 регистров (YMM0-YMM15) по 265 (AVX) или 128 (SSE) бит. В них все ваши данные нужно как-то разложить и помнить что и где. Можно самому, а можно компилятору довериться.

  13. #173
    Завсегдатай Аватар для E.Sokol
    Регистрация
    17.01.2015
    Адрес
    Урал
    Сообщений
    1,386

    По умолчанию Re: Помогите с программированием C/C++

    Цитата Сообщение от Chaa Посмотреть сообщение
    Вот пишете вы цифровой фильтр.
    Коэффициенты неплохо бы в регистрах держать. Данные для некоторого кол-ва предыдущих отсчетов тоже. Исходные данные в регистр загрузить.
    Сразу видно не умеющего программировать на асме человека
    Не так это делается. Входные/выходные данные вообще не нужно в регистры загружать - их слишком много, и они меняются. Арифметические команды могут работать напрямую с памятью. Да и цифровая фильтрация (IIR) - слишком простая задача, чтобы от её оптимизации можно было что-то выиграть.

  14. #174
    Не хочу! Аватар для Alex
    Регистрация
    20.03.2003
    Адрес
    Worldwide
    Возраст
    62
    Сообщений
    38,965

    По умолчанию Re: Помогите с программированием C/C++

    Цитата Сообщение от Meta|_ Посмотреть сообщение
    Эпизод второй. Полгода назад, gcc, cortex m4, оптимизация по использованию ОЗУ.
    Тут надо отметить, что gcc вообще генерит менее эффективный код по сравнению, например, с Keil. З
    Ну я в основном Кейлом и пользуюсь.
    Если бы он еще не так медленно все это делал! ИАР по сравнению с ним просто летает.

    Цитата Сообщение от E.Sokol Посмотреть сообщение
    Интрисинки - это скорее коммерческая приблуда и толку от них, по моему мнению, мало.

    Нихренассе "мало", иногда без них просто ничего не работает.
    Простой пример под тем-же Кейлом - обработчик прерывания, ставим сброс запроса прерывания последней командой в нем - и привет, ниче не работает. Ставим после него nop() - иногда может уже и заработать. Правильно -ставить интрисинком барьер.
    "Замполит, чайку?"(с)"Охота за Красным Октябрем".
    "Да мне-то что, меняйтесь!"(с)анек.
    <-- http://altor1.narod.ru --> Вопросы - в личку, е-мейл, скайп.

  15. #175
    Завсегдатай Аватар для E.Sokol
    Регистрация
    17.01.2015
    Адрес
    Урал
    Сообщений
    1,386

    По умолчанию Re: Помогите с программированием C/C++

    А ещё интрисинки есть не на всё - fpu отсутствует целиком и полностью.

    ---------- Сообщение добавлено 18:07 ---------- Предыдущее сообщение было 18:05 ----------

    Цитата Сообщение от Alex Посмотреть сообщение
    Простой пример под тем-же Кейлом - обработчик прерывания, ставим сброс запроса прерывания последней командой в нем - и привет, ниче не работает. Ставим после него nop() - иногда может уже и заработать. Правильно -ставить интрисинком барьер.
    Подозреваю, речь не об intel x86)

    ---------- Сообщение добавлено 18:10 ---------- Предыдущее сообщение было 18:07 ----------

    Хотя я тут вспомнил, что тоже как-то использовал SSE-интринсики

  16. #176
    Не хочу! Аватар для Alex
    Регистрация
    20.03.2003
    Адрес
    Worldwide
    Возраст
    62
    Сообщений
    38,965

    По умолчанию Re: Помогите с программированием C/C++

    Цитата Сообщение от E.Sokol Посмотреть сообщение
    Подозреваю, речь не об intel x86)
    Да, не о нем, но есть мнение что там существует та-же проблема - ввиду наличия конвеера. Просто мало кто на такой низкий уровень лезет (да на него и попасть еще не так легко).
    "Замполит, чайку?"(с)"Охота за Красным Октябрем".
    "Да мне-то что, меняйтесь!"(с)анек.
    <-- http://altor1.narod.ru --> Вопросы - в личку, е-мейл, скайп.

  17. #177
    Завсегдатай Аватар для E.Sokol
    Регистрация
    17.01.2015
    Адрес
    Урал
    Сообщений
    1,386

    По умолчанию Re: Помогите с программированием C/C++

    Вот краткий перечень интеловских интрисинков. Легко увидеть, что их тут чуть более, чем дохрена - это бо́льшая часть команд процессора. Так же легко увидеть, что их названия являются калькой с ассемблерных инструкции, только с кучей дополнительных подчёркиваний. Что выполняет функция, например, _mm256_mask_cvtusepi32_storeu_epi16 - сходу понять не получится, один фиг нужно лезть в документацию и вникать. Сначала чтобы написать, потом понять, что ха х-ню написал другой, а потом мучиться с компиляцией на другом компиляторе или платформе.

    Смысл программирования на асме прежде в том, что ты совершенно точно знаешь, что он не изменится - что написал, то и будет выполняться. В отличие от компиляторов, которые могут так код оптимизировать, что он после этого работать перестаёт (я с таким даже сам лично сталкивался, только подробностей уже не помню). Пруфы.

  18. #178
    Частый гость Аватар для Chaa
    Регистрация
    23.08.2006
    Адрес
    Курган
    Сообщений
    374

    По умолчанию Re: Помогите с программированием C/C++

    Цитата Сообщение от E.Sokol Посмотреть сообщение
    Сразу видно не умеющего программировать на асме человека
    Вы совершенно правы. И я выше написал, почему не пишу на ассемблере.

    Цитата Сообщение от E.Sokol Посмотреть сообщение
    Не так это делается. Входные/выходные данные вообще не нужно в регистры загружать - их слишком много, и они меняются. Арифметические команды могут работать напрямую с памятью.
    Арифметику сам компилятор Си отлично умеет. Интринсики используются, когда нужно то, что не умеет обычный Си. Например, барьеры памяти и атомарные операции. Или прерывания запретить (на микроконтроллере). Или MMX/SSE/AVX.

  19. #179
    Завсегдатай Аватар для E.Sokol
    Регистрация
    17.01.2015
    Адрес
    Урал
    Сообщений
    1,386

    По умолчанию Re: Помогите с программированием C/C++

    Цитата Сообщение от Chaa Посмотреть сообщение
    Жизнь слишком коротка, чтобы писать на ассемблере.
    Вместо ассемблера сюда можно подставить вообще всё, что угодно - включая просмотр сериалов, чтение книг, пьянство с друзьями, свидания и ухаживания за разными бабами, игра дома на гитаре, танки онлайн, социальные сети, стояние в пробках на автомобиле, сон по 8 часов в сутки, самостоятельное приготовление пищи и так далее. Каждый сам выбирает, на что спускать свою жизнь.

    Но когда после оптимизации твоя программа работает в 10-20 раз быстрее, и это видно наглядно, без всяких профайлеров - то испытываешь совершенно непередаваемые ощущения. Это лучше, чем секс

  20. #180
    Завсегдатай Аватар для Meta|_
    Регистрация
    08.03.2005
    Адрес
    Северная Голландия
    Возраст
    41
    Сообщений
    2,199

    По умолчанию Re: Помогите с программированием C/C++

    Цитата Сообщение от E.Sokol Посмотреть сообщение
    Но когда после оптимизации твоя программа работает в 10-20 раз быстрее, и это видно наглядно, без всяких профайлеров - то испытываешь совершенно непередаваемые ощущения. Это лучше, чем секс
    Особенно если руководство потом вы@%ет за потраченное на никому не нужную оптимизацию время ;)
    ∇·D = ρ
    ∇·B = 0
    ∇xE = – ∂B/∂t
    ∇xH = j + ∂D/∂t
    © J. C. Maxwell, O. Heaviside

Страница 9 из 13 Первая ... 7891011 ... Последняя

Социальные закладки

Социальные закладки

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •