LINUX.ORG.RU

История изменений

Исправление MOPKOBKA, (текущая версия) :

Если производительность функции настолько важна, что лезешь godbolt смотреть результат компиляции и уверен, что можешь написать ассемблерный код лучше компилятора, то нет смысла пытаться намёками насиловать компилятор, чтобы добиться от него правильного ответа. Можно просто правильный ответ (код на ассемблере) вписать в программу.

Конечно я могу написать лучший код чем компилятор, причем почти любой. Достаточно взять ассемблерный выхлоп и подредактировать, я так уже много раз делал, не до идеала же довели компиляторы.

Однако это было бы немного затруднительно писать мегабайты кода ассемблера с нуля, мне кажется намного проще оптимизировать только избранные функции, ты так не думаешь?

Да. Современные компиляторы достаточно свободно даже преобразуют структуры данных.

Ты в вопросе не разбираешься. Они ее вообще не преобразуют, за исключением распаковки структуры в регистры, или превращение маленького локального объекта в несколько переменных. Но это мелочь, это не преобразование а локальные оптимизации.

Вот написал ты код для векторизации и конвейеров, а скомпилировали его для микроконтроллера или 80386. И твой код работает медленнее наивного, так как компилятор не понимает, что из твоих лишних операций можно безболезненно удалить.

Это невозможная ситуация, если изначально писать без упора в оптимизацию набора платформ во вред другим.

И этот «хороший» код потом приходится переписывать, например, для Эльбруса. Потому что векторизация там работает по-другому.

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

Верно. И поэтому лучше доверять компилятору и писать просто семантически корректный код, чем пытаться за него сделать его работу, чтобы на конкретном процессоре могла включиться векторизация.

Я и не предлагал делать за него работу. Это ты как хескелист на-xor'ил. Что нужно делать человеку, делает человек. Что нужно делать компилятору, делает компилятор. Структуры он тебе никак не оптимизирует сам для локальности, векторизацию не проведет если у тебя код ей не поддается.

Тут нужна работа с обоих сторон.

Исправление MOPKOBKA, :

Если производительность функции настолько важна, что лезешь godbolt смотреть результат компиляции и уверен, что можешь написать ассемблерный код лучше компилятора, то нет смысла пытаться намёками насиловать компилятор, чтобы добиться от него правильного ответа. Можно просто правильный ответ (код на ассемблере) вписать в программу.

Конечно я могу написать лучший код чем компилятор, причем почти любой. Достаточно взять ассемблерный выхлоп и подредактировать, я так уже много раз делал, не до идеала же довели компиляторы.

Однако это было бы немного затруднительно писать мегабайты кода ассемблера с нуля, мне кажется намного проще оптимизировать только избранные функции, ты так не думаешь?

Да. Современные компиляторы достаточно свободно даже преобразуют структуры данных.

Ты в вопросе не разбираешься. Они ее вообще не преобразуют, за исключением распаковки структуры в регистры, или превращение маленького локального объекта в несколько переменных. Но это мелочь, это не преобразование а локальные оптимизации.

Вот написал ты код для векторизации и конвейеров, а скомпилировали его для микроконтроллера или 80386. И твой код работает медленнее наивного, так как компилятор не понимает, что из твоих лишних операций можно безболезненно удалить.

Это невозможная ситуация.

И этот «хороший» код потом приходится переписывать, например, для Эльбруса. Потому что векторизация там работает по-другому.

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

Верно. И поэтому лучше доверять компилятору и писать просто семантически корректный код, чем пытаться за него сделать его работу, чтобы на конкретном процессоре могла включиться векторизация.

Я и не предлагал делать за него работу. Это ты как хескелист на-xor'ил. Что нужно делать человеку, делает человек. Что нужно делать компилятору, делает компилятор. Структуры он тебе никак не оптимизирует сам для локальности, векторизацию не проведет если у тебя код ей не поддается.

Тут нужна работа с обоих сторон.

Исправление MOPKOBKA, :

Если производительность функции настолько важна, что лезешь godbolt смотреть результат компиляции и уверен, что можешь написать ассемблерный код лучше компилятора, то нет смысла пытаться намёками насиловать компилятор, чтобы добиться от него правильного ответа. Можно просто правильный ответ (код на ассемблере) вписать в программу.

Конечно я могу написать лучший код чем компилятор, причем почти любой. Достаточно взять ассемблерный выхлоп и подредактировать, я так уже много раз делал.

Однако это было бы немного затруднительно писать мегабайты кода ассемблера с нуля, мне кажется намного проще оптимизировать только избранные функции, ты так не думаешь?

Да. Современные компиляторы достаточно свободно даже преобразуют структуры данных.

Ты в вопросе не разбираешься. Они ее вообще не преобразуют, за исключением распаковки структуры в регистры, или превращение маленького локального объекта в несколько переменных. Но это мелочь, это не преобразование а локальные оптимизации.

Вот написал ты код для векторизации и конвейеров, а скомпилировали его для микроконтроллера или 80386. И твой код работает медленнее наивного, так как компилятор не понимает, что из твоих лишних операций можно безболезненно удалить.

Это невозможная ситуация.

И этот «хороший» код потом приходится переписывать, например, для Эльбруса. Потому что векторизация там работает по-другому.

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

Верно. И поэтому лучше доверять компилятору и писать просто семантически корректный код, чем пытаться за него сделать его работу, чтобы на конкретном процессоре могла включиться векторизация.

Я и не предлагал делать за него работу. Это ты как хескелист на-xor'ил. Что нужно делать человеку, делает человек. Что нужно делать компилятору, делает компилятор. Структуры он тебе никак не оптимизирует сам для локальности, векторизацию не проведет если у тебя код ей не поддается.

Тут нужна работа с обоих сторон.

Исправление MOPKOBKA, :

Если производительность функции настолько важна, что лезешь godbolt смотреть результат компиляции и уверен, что можешь написать ассемблерный код лучше компилятора, то нет смысла пытаться намёками насиловать компилятор, чтобы добиться от него правильного ответа. Можно просто правильный ответ (код на ассемблере) вписать в программу.

Конечно я могу написать лучший код чем компилятор, причем почти любой. Достаточно взять ассемблерный выхлоп и подредактировать, я так уже много раз делал.

Однако это было бы немного затруднительно писать мегабайты кода ассемблера с нуля, мне кажется намного проще оптимизировать только избранные функции, ты так не думаешь?

Да. Современные компиляторы достаточно свободно даже преобразуют структуры данных.

Ты в вопросе не разбираешься. Они ее вообще не преобразуют, за исключением распаковки структуры в регистры, или превращение маленького локального объекта в несколько переменных. Но это мелочь, это не преобразование а локальные оптимизации.

Вот написал ты код для векторизации и конвейеров, а скомпилировали его для микроконтроллера или 80386. И твой код работает медленнее наивного, так как компилятор не понимает, что из твоих лишних операций можно безболезненно удалить.

Это невозможная ситуация.

И этот «хороший» код потом приходится переписывать, например, для Эльбруса. Потому что векторизация там работает по-другому.

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

Верно. И поэтому лучше доверять компилятору и писать просто семантически корректный код, чем пытаться за него сделать его работу, чтобы на конкретном процессоре могла включиться векторизация.

Я и не предлагал делать за него работу. Это ты как хескелист на-xor'ил. Что нужно делать человеку, делает человек. Что нужно делать компилятору, делает компилятор. Структуры он тебе никак не оптимизирует сам для локальности, векторизацию не проведет если у тебя код ей не поддается.

Исходная версия MOPKOBKA, :

Если производительность функции настолько важна, что лезешь godbolt смотреть результат компиляции и уверен, что можешь написать ассемблерный код лучше компилятора, то нет смысла пытаться намёками насиловать компилятор, чтобы добиться от него правильного ответа. Можно просто правильный ответ (код на ассемблере) вписать в программу.

Конечно я могу написать лучший код чем компилятор, причем почти любой. Достаточно взять ассемблерный выхлоп и подредактировать, я так уже много раз делал.

Однако это было бы немного затруднительно писать мегабайты кода ассемблера с нуля, мне кажется намного проще оптимизировать только избранные функции, ты так не думаешь?

Да. Современные компиляторы достаточно свободно даже преобразуют структуры данных.

Ты в вопросе не разбираешься. Они ее вообще не преобразуют, за исключением распаковки структуры в регистры, или превращение маленького локального объекта в несколько переменных. Но это мелочь, это не преобразование а локальные оптимизации.

Вот написал ты код для векторизации и конвейеров, а скомпилировали его для микроконтроллера или 80386. И твой код работает медленнее наивного, так как компилятор не понимает, что из твоих лишних операций можно безболезненно удалить.

Это невозможная ситуация.

И этот «хороший» код потом приходится переписывать, например, для Эльбруса. Потому что векторизация там работает по-другому.

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

Верно. И поэтому лучше доверять компилятору и писать просто семантически корректный код, чем пытаться за него сделать его работу, чтобы на конкретном процессоре могла включиться векторизация.

Я и не предлагал делать за него работу. Это ты как хескелист на-xor'ил.