История изменений
Исправление MOPKOBKA, (текущая версия) :
Если производительность функции настолько важна, что лезешь godbolt смотреть результат компиляции и уверен, что можешь написать ассемблерный код лучше компилятора, то нет смысла пытаться намёками насиловать компилятор, чтобы добиться от него правильного ответа. Можно просто правильный ответ (код на ассемблере) вписать в программу.
Конечно я могу написать лучший код чем компилятор, причем почти любой. Достаточно взять ассемблерный выхлоп и подредактировать, я так уже много раз делал, не до идеала же довели компиляторы.
Однако это было бы немного затруднительно писать мегабайты кода ассемблера с нуля, мне кажется намного проще оптимизировать только избранные функции, ты так не думаешь?
Да. Современные компиляторы достаточно свободно даже преобразуют структуры данных.
Ты в вопросе не разбираешься. Они ее вообще не преобразуют, за исключением распаковки структуры в регистры, или превращение маленького локального объекта в несколько переменных. Но это мелочь, это не преобразование а локальные оптимизации.
Вот написал ты код для векторизации и конвейеров, а скомпилировали его для микроконтроллера или 80386. И твой код работает медленнее наивного, так как компилятор не понимает, что из твоих лишних операций можно безболезненно удалить.
Это невозможная ситуация, если изначально писать без упора в оптимизацию набора платформ во вред другим.
И этот «хороший» код потом приходится переписывать, например, для Эльбруса. Потому что векторизация там работает по-другому.
Этот код сейчас с тобой в одной комнате? Ну просто странно выглядит как ты обсуждаешь какой то невидимый код, не посвящая меня в детали, и рассказываешь как тебе векторизации все обломали, хотя написанный для облегчения векторизации код не должен ничего ломать до переписывания.
Верно. И поэтому лучше доверять компилятору и писать просто семантически корректный код, чем пытаться за него сделать его работу, чтобы на конкретном процессоре могла включиться векторизация.
Я и не предлагал делать за него работу. Это ты как хескелист на-xor'ил. Что нужно делать человеку, делает человек. Что нужно делать компилятору, делает компилятор. Структуры он тебе никак не оптимизирует сам для локальности, векторизацию не проведет если у тебя код ей не поддается.
Тут нужна работа с обоих сторон.
Исправление MOPKOBKA, :
Если производительность функции настолько важна, что лезешь godbolt смотреть результат компиляции и уверен, что можешь написать ассемблерный код лучше компилятора, то нет смысла пытаться намёками насиловать компилятор, чтобы добиться от него правильного ответа. Можно просто правильный ответ (код на ассемблере) вписать в программу.
Конечно я могу написать лучший код чем компилятор, причем почти любой. Достаточно взять ассемблерный выхлоп и подредактировать, я так уже много раз делал, не до идеала же довели компиляторы.
Однако это было бы немного затруднительно писать мегабайты кода ассемблера с нуля, мне кажется намного проще оптимизировать только избранные функции, ты так не думаешь?
Да. Современные компиляторы достаточно свободно даже преобразуют структуры данных.
Ты в вопросе не разбираешься. Они ее вообще не преобразуют, за исключением распаковки структуры в регистры, или превращение маленького локального объекта в несколько переменных. Но это мелочь, это не преобразование а локальные оптимизации.
Вот написал ты код для векторизации и конвейеров, а скомпилировали его для микроконтроллера или 80386. И твой код работает медленнее наивного, так как компилятор не понимает, что из твоих лишних операций можно безболезненно удалить.
Это невозможная ситуация.
И этот «хороший» код потом приходится переписывать, например, для Эльбруса. Потому что векторизация там работает по-другому.
Этот код сейчас с тобой в одной комнате? Ну просто странно выглядит как ты обсуждаешь какой то невидимый код, не посвящая меня в детали, и рассказываешь как тебе векторизации все обломали, хотя написанный для облегчения векторизации код не должен ничего ломать до переписывания.
Верно. И поэтому лучше доверять компилятору и писать просто семантически корректный код, чем пытаться за него сделать его работу, чтобы на конкретном процессоре могла включиться векторизация.
Я и не предлагал делать за него работу. Это ты как хескелист на-xor'ил. Что нужно делать человеку, делает человек. Что нужно делать компилятору, делает компилятор. Структуры он тебе никак не оптимизирует сам для локальности, векторизацию не проведет если у тебя код ей не поддается.
Тут нужна работа с обоих сторон.
Исправление MOPKOBKA, :
Если производительность функции настолько важна, что лезешь godbolt смотреть результат компиляции и уверен, что можешь написать ассемблерный код лучше компилятора, то нет смысла пытаться намёками насиловать компилятор, чтобы добиться от него правильного ответа. Можно просто правильный ответ (код на ассемблере) вписать в программу.
Конечно я могу написать лучший код чем компилятор, причем почти любой. Достаточно взять ассемблерный выхлоп и подредактировать, я так уже много раз делал.
Однако это было бы немного затруднительно писать мегабайты кода ассемблера с нуля, мне кажется намного проще оптимизировать только избранные функции, ты так не думаешь?
Да. Современные компиляторы достаточно свободно даже преобразуют структуры данных.
Ты в вопросе не разбираешься. Они ее вообще не преобразуют, за исключением распаковки структуры в регистры, или превращение маленького локального объекта в несколько переменных. Но это мелочь, это не преобразование а локальные оптимизации.
Вот написал ты код для векторизации и конвейеров, а скомпилировали его для микроконтроллера или 80386. И твой код работает медленнее наивного, так как компилятор не понимает, что из твоих лишних операций можно безболезненно удалить.
Это невозможная ситуация.
И этот «хороший» код потом приходится переписывать, например, для Эльбруса. Потому что векторизация там работает по-другому.
Этот код сейчас с тобой в одной комнате? Ну просто странно выглядит как ты обсуждаешь какой то невидимый код, не посвящая меня в детали, и рассказываешь как тебе векторизации все обломали, хотя написанный для облегчения векторизации код не должен ничего ломать до переписывания.
Верно. И поэтому лучше доверять компилятору и писать просто семантически корректный код, чем пытаться за него сделать его работу, чтобы на конкретном процессоре могла включиться векторизация.
Я и не предлагал делать за него работу. Это ты как хескелист на-xor'ил. Что нужно делать человеку, делает человек. Что нужно делать компилятору, делает компилятор. Структуры он тебе никак не оптимизирует сам для локальности, векторизацию не проведет если у тебя код ей не поддается.
Тут нужна работа с обоих сторон.
Исправление MOPKOBKA, :
Если производительность функции настолько важна, что лезешь godbolt смотреть результат компиляции и уверен, что можешь написать ассемблерный код лучше компилятора, то нет смысла пытаться намёками насиловать компилятор, чтобы добиться от него правильного ответа. Можно просто правильный ответ (код на ассемблере) вписать в программу.
Конечно я могу написать лучший код чем компилятор, причем почти любой. Достаточно взять ассемблерный выхлоп и подредактировать, я так уже много раз делал.
Однако это было бы немного затруднительно писать мегабайты кода ассемблера с нуля, мне кажется намного проще оптимизировать только избранные функции, ты так не думаешь?
Да. Современные компиляторы достаточно свободно даже преобразуют структуры данных.
Ты в вопросе не разбираешься. Они ее вообще не преобразуют, за исключением распаковки структуры в регистры, или превращение маленького локального объекта в несколько переменных. Но это мелочь, это не преобразование а локальные оптимизации.
Вот написал ты код для векторизации и конвейеров, а скомпилировали его для микроконтроллера или 80386. И твой код работает медленнее наивного, так как компилятор не понимает, что из твоих лишних операций можно безболезненно удалить.
Это невозможная ситуация.
И этот «хороший» код потом приходится переписывать, например, для Эльбруса. Потому что векторизация там работает по-другому.
Этот код сейчас с тобой в одной комнате? Ну просто странно выглядит как ты обсуждаешь какой то невидимый код, не посвящая меня в детали, и рассказываешь как тебе векторизации все обломали, хотя написанный для облегчения векторизации код не должен ничего ломать до переписывания.
Верно. И поэтому лучше доверять компилятору и писать просто семантически корректный код, чем пытаться за него сделать его работу, чтобы на конкретном процессоре могла включиться векторизация.
Я и не предлагал делать за него работу. Это ты как хескелист на-xor'ил. Что нужно делать человеку, делает человек. Что нужно делать компилятору, делает компилятор. Структуры он тебе никак не оптимизирует сам для локальности, векторизацию не проведет если у тебя код ей не поддается.
Исходная версия MOPKOBKA, :
Если производительность функции настолько важна, что лезешь godbolt смотреть результат компиляции и уверен, что можешь написать ассемблерный код лучше компилятора, то нет смысла пытаться намёками насиловать компилятор, чтобы добиться от него правильного ответа. Можно просто правильный ответ (код на ассемблере) вписать в программу.
Конечно я могу написать лучший код чем компилятор, причем почти любой. Достаточно взять ассемблерный выхлоп и подредактировать, я так уже много раз делал.
Однако это было бы немного затруднительно писать мегабайты кода ассемблера с нуля, мне кажется намного проще оптимизировать только избранные функции, ты так не думаешь?
Да. Современные компиляторы достаточно свободно даже преобразуют структуры данных.
Ты в вопросе не разбираешься. Они ее вообще не преобразуют, за исключением распаковки структуры в регистры, или превращение маленького локального объекта в несколько переменных. Но это мелочь, это не преобразование а локальные оптимизации.
Вот написал ты код для векторизации и конвейеров, а скомпилировали его для микроконтроллера или 80386. И твой код работает медленнее наивного, так как компилятор не понимает, что из твоих лишних операций можно безболезненно удалить.
Это невозможная ситуация.
И этот «хороший» код потом приходится переписывать, например, для Эльбруса. Потому что векторизация там работает по-другому.
Этот код сейчас с тобой в одной комнате? Ну просто странно выглядит как ты обсуждаешь какой то невидимый код, не посвящая меня в детали, и рассказываешь как тебе векторизации все обломали, хотя написанный для облегчения векторизации код не должен ничего ломать до переписывания.
Верно. И поэтому лучше доверять компилятору и писать просто семантически корректный код, чем пытаться за него сделать его работу, чтобы на конкретном процессоре могла включиться векторизация.
Я и не предлагал делать за него работу. Это ты как хескелист на-xor'ил.