Что за бред в крестах творится?
Код говном заплыть стремится,
STL сдирает плату,
Строки падают с лопаты,
Комитет весь дует шмаль...
Это, братцы, не паскаль!
Mirrel
> ну прям равноценное сравнение... Точнее, если мы ручками в Паскаль засунем SIMD
> ускорения не получим?
> Или просто хотим сказать, что у Паскаля нет данных возможностей?
Always look at the source code.
If the fastest programs are hand-written vector instructions, does the host language matter? You might be more interested in the less optimised programs — more cpu seconds, less gz source code.
Всегда смотрите на исходный код.
Если самые быстрые программы представляют собой рукописные векторные инструкции, имеет ли значение основной язык? Возможно, вас больше заинтересуют менее оптимизированные программы — больше секунд процессора, меньше исходного кода gz.
samrrr
> меньше исходного кода gz
???
опять волшебники страны Оз?
1 frag / 2 deaths
> Если в стл что-то сделано через задницу то это проблемы языка. Потому что стл
> это часть языка которая везде используется.
> Про LTO я ж ниже написал
Ну я так понял ты пруфов не предоставишь. Раза 3 просил пруфы, а в ответ одни отговорки, и ноль примеров кода.
В gcc есть расширения, которые дают возможность выражать свои SIMD-намерения в простом и лаконичном виде, без всех этих _mm_xxx.
Mirrel
> расскажи мне как компилятор сможет оптимизировать данный код?
quad[0].X := X + (charDesc.ShiftX - Font.Padding[0]) * textScale; quad[0].Y := Y + ( charDesc.ShiftY + ( Font.MaxHeight - charDesc.Height) - Font.Padding[1]) * textScale; quad[1].X := X + ( charDesc.ShiftX + charDesc.Width + Font.Padding[2]) * textScale; quad[1].Y := Y + ( charDesc.ShiftY + ( Font.MaxHeight - charDesc.Height) - Font.Padding[1]) * textScale; quad[2].X := X + ( charDesc.ShiftX + charDesc.Width + Font.Padding[2]) * textScale; quad[2].Y := Y + ( charDesc.ShiftY + charDesc.Height + ( Font.MaxHeight - charDesc.Height) + Font.Padding[3]) * textScale; quad[3].X := X + ( charDesc.ShiftX - Font.Padding[0]) * textScale; quad[3].Y := Y + ( charDesc.ShiftY + charDesc.Height + ( Font.MaxHeight - charDesc.Height) + Font.Padding[3]) * textScale
CSE (заявлено, что в fpc она есть)
t0 := Font.MaxHeight - charDesc.Height; t1 := X + (charDesc.ShiftX - Font.Padding[0]) * textScale; t2 := Y + ( charDesc.ShiftY + t0 - Font.Padding[1]) * textScale; t3 := X + ( charDesc.ShiftX + charDesc.Width + Font.Padding[2]) * textScale; t4 := Y + ( charDesc.ShiftY + charDesc.Height + t0 + Font.Padding[3]) * textScale; quad[0].X := t1; quad[0].Y := t2; quad[1].X := t3; quad[1].Y := t2; quad[2].X := t3; quad[2].Y := t4; quad[3].X := t1; quad[3].Y := t4
skalogryz
> ???
> опять волшебники страны Оз?
Неужели ты думаешь я сам переводил это? Я просто в гугл забил это.
How source code size is measured
We start with the source-code markup you can see, remove comments, remove duplicate whitespace characters, and then apply minimum GZip compression. The measurement is the size in bytes of that GZip compressed source-code file.
Thanks to Brian Hurt for the idea of using size of compressed source code instead of lines of code.
То-есть есть по gz можно понять, насколько код был напихан SIMD и прочими оптимизациями и не сравнивать при этом длинну begin end vs {}
skalogryz
> t1 := X + (charDesc.ShiftX - Font.Padding[0]) * textScale;
> t2 := Y + (charDesc.ShiftY + (Font.MaxHeight - charDesc.Height) -
> Font.Padding[1]) * textScale;
> t3 := X + (charDesc.ShiftX + charDesc.Width + Font.Padding[2]) * textScale;
> t4 := Y + (charDesc.ShiftY + charDesc.Height + (Font.MaxHeight -
> charDesc.Height) + Font.Padding[3]) * textScale;
> quad[0].X := t1;
> quad[0].Y := t2;
> quad[1].X := t3;
> quad[1].Y := t2;
> quad[2].X := t3;
> quad[2].Y := t4;
> quad[3].X := t1;
> quad[3].Y := t4
Чтоб С++ так мог прийдётся ему рестрикты напихать. Чтоб он знал что quad[1] и Font.Padding[2] ссылаются на разные участки памяти.
samrrr
> Чтоб С++ так мог прийдётся ему рестрикты напихать
я без понятия что такое рестрикты в крестах.
samrrr
> Чтоб он знал что quad[1] и Font.Padding[2] ссылаются на разные участки памяти.
а чё... он не знает? позорно как-то.
MrShoor
> Перепиши этот код на плюсы и глянь
Похоже?
cpp: https://godbolt.org/z/bs9Yefefv
pas: https://godbolt.org/z/51aenGeEP
entryway
> pas: https://godbolt.org/z/51aenGeEP
можно добавить: -Anasmelf в опции компилятора, тогда и ассемблер будет intel, и нумерация сорцей появится
skalogryz
> а чё... он не знает? позорно как-то.
А откуда ему знать то? Нафигарил ты вызов func(&(int*)&i),*(&(Vector*)&i) или нет, но планируешь нафигарить.
entryway
> cpp: https://godbolt.org/z/bs9Yefefv
> pas: https://godbolt.org/z/51aenGeEP
Паскаль неосилил оптимизацию. Интересно как в этот раз ТС попробует доказать что Паскаль могёт в оптимизацию.
samrrr
> func(&(int*)&i),*(&(Vector*)&i)
именно, по-этому я избегаю программирования на Сях и Крестах
entryway
> pas: https://godbolt.org/z/51aenGeEP
и таки да! CSE в действии!!
%LINE 29+0 —- quad[0].X := X + (charDesc.ShiftX - font.Padding[0]) * textScale; mov edi,dword [rax+8] mov r10d,dword [rsi+8] sub edi,r10d imul edi,edx add edi,ecx mov dword [r9],edi ... %LINE 35+0 —- quad[3].X := X + (charDesc.ShiftX - font.Padding[0]) * textScale; mov edi,dword [rax+8] mov r10d,dword [rsi+8] sub edi,r10d imul edi,edx add ecx,edi mov dword [r9+24],ecx
чудеса!
skalogryz
> именно, по-этому я избегаю программирования на Сях и Крестах
А чё, появился язык с сопоставимой скоростью кроме раста(в котором неосилили ооп)?
Тема в архиве.