Почитал я тут всякой всячины на тему оптимизации кода

Все, что вы хотели знать о программизме, но боялись спросить.
Аватара пользователя
sz
Маньяк
Сообщения: 1266
Зарегистрирован: 17 фев 2003, 19:34

Почитал я тут всякой всячины на тему оптимизации кода

Сообщение sz »

Да еще на семинар сходил по оптимизации последних версий процессоров.
Однако, этот векторно-оптимизированный код невозможно читать, должен вам заметить.

Знаете, что я думаю.. Аналогия с SQL напрашивается. Всем известно, что работать с курсорами в SQL неэффективно. Что их надо трогать только если с select-ом ну никак уже не получается. Похоже, что мы приходим к той же самой ситуации с процессорами и циклами. Что Cи устарел и должен быть сделан Vector Query Language покрывающий работу с массивами. А циклы делать только тогда, когда через запрос - ну никак.

Наверное и стандартные решения уже есть? Интересная задачка. Сделать переносимый язык, или стандартную библиотеку для Си с такими запросами. У нас на фирме я знаю два отдела, которые этим занимаются, но судя по их документации, им до стандартизации еще очень далеко. Да и библиотекам их до емкости SQL - как до луны.
vg
Маньяк
Сообщения: 2803
Зарегистрирован: 29 май 2003, 22:29
Откуда: Магадан - Миссиссага

Сообщение vg »

Не очень понял, о чём ты... Если о запросах на "выборку" данных "подобно" SQL из небольших порций структурированных данных ( например, XML ), то XPath (http://www.w3.org/TR/xpath). Работает очень бытро. Занимает полстрочки в коде. Не знаю, что и делал бы без этого (вернее знаю, но надоело писать груды кода). Никаких циклов и переборов.

ПС. Если я не в тему - извини, пожалуйста. От неопытности моей не сразу понял, о чём постинг твой.
Аватара пользователя
Marmot
Графоман
Сообщения: 39279
Зарегистрирован: 17 фев 2003, 17:58
Откуда: Caulfeild
Контактная информация:

Re: Почитал я тут всякой всячины на тему оптимизации кода

Сообщение Marmot »

Старина Зотин писал(а):Наверное и стандартные решения уже есть? Интересная задачка. Сделать переносимый язык, или стандартную библиотеку для Си с такими запросами. У нас на фирме я знаю два отдела, которые этим занимаются, но судя по их документации, им до стандартизации еще очень далеко. Да и библиотекам их до емкости SQL - как до луны.
Вот тут почитать про это можно: http://research.sun.com/projects/plrg/fortress0785.pdf
Посмотрим что у них получится...

Кстати, а нафига вам такой уровень оптимизации?
Аватара пользователя
Marmot
Графоман
Сообщения: 39279
Зарегистрирован: 17 фев 2003, 17:58
Откуда: Caulfeild
Контактная информация:

Сообщение Marmot »

vg писал(а):ПС. Если я не в тему - извини, пожалуйста. От неопытности моей не сразу понял, о чём постинг твой.
Ага, в огороде бузина.. :lol:
Аватара пользователя
sz
Маньяк
Сообщения: 1266
Зарегистрирован: 17 фев 2003, 19:34

Сообщение sz »

Почитай, например, вот тут: http://en.wikipedia.org/wiki/Vector_processor

Я говорю о том, что писать оптимизированный код на Си (не говоря уже о других высокоуровневых языках) под процессоры поддерживающие SIMD (а это сейчас поддерживают практически все процессоры) - практически невозможно.

Вот и получается, что оптимальный язык выского уровня должен напоминать скорее SQL, чем пошаговый язык. Ну точнее, должен поддерживать и то, и то. Можно реализовать в качестве библиотеки на Си, но гибкости не будет. Нужен новый язык. Нового поколения.
Аватара пользователя
Marmot
Графоман
Сообщения: 39279
Зарегистрирован: 17 фев 2003, 17:58
Откуда: Caulfeild
Контактная информация:

Сообщение Marmot »

Старина Зотин писал(а):Почитай, например, вот тут: http://en.wikipedia.org/wiki/Vector_processor

Я говорю о том, что писать оптимизированный код на Си (не говоря уже о других высокоуровневых языках) под процессоры поддерживающие SIMD (а это сейчас поддерживают практически все процессоры) - практически невозможно.

Вот и получается, что оптимальный язык выского уровня должен напоминать скорее SQL, чем пошаговый язык. Ну точнее, должен поддерживать и то, и то. Можно реализовать в качестве библиотеки на Си, но гибкости не будет. Нужен новый язык. Нового поколения.
Не согласен, язык должен быть простым и интутивным прежде всего, и императивные языки в этом плане лучше всего.
А вот копмилятор должен быть очень умным.
В том же Fortress все циклы по умолчанию выполняются параллельно, и компилятор пытается это сделать наилучшим образом.
Честно гововоря мне больше нравятся massive-multicore CPUs ( http://en.wikipedia.org/wiki/UltraSPARC_T1 ) чем vector processors, хотя они во многом и похожи.

А векторные инструкции для singlecore это всё равно только для всяких игрушек полезно, а там можно и ручками соптимизнуть.
vg
Маньяк
Сообщения: 2803
Зарегистрирован: 29 май 2003, 22:29
Откуда: Магадан - Миссиссага

Сообщение vg »

Старина Зотин писал(а):Почитай, например, вот тут: http://en.wikipedia.org/wiki/Vector_processor

Я говорю о том, что писать оптимизированный код на Си (не говоря уже о других высокоуровневых языках) под процессоры поддерживающие SIMD (а это сейчас поддерживают практически все процессоры) - практически невозможно.

Вот и получается, что оптимальный язык выского уровня должен напоминать скорее SQL, чем пошаговый язык. Ну точнее, должен поддерживать и то, и то. Можно реализовать в качестве библиотеки на Си, но гибкости не будет. Нужен новый язык. Нового поколения.
Да, почитал. Интересно в принципе... Спасибо за разъянение.

Ещё наблюдение про оптимизацию, которое, конечно, не имеет отношения к топику. Если говорить не о C, а C++, вопрос об оптимизации может зачастую переносится в плоскость написания нормального, хорошо отлаженного кода (без особых багов и явных ляпсусов). Я видел, как профи переписывали неудачно написанные куски (хотя и работающие), добиваясь повышения быстродействия и снижения зарузки CPU в разы.
Аватара пользователя
ajkj3em
Маньяк
Сообщения: 2063
Зарегистрирован: 12 ноя 2006, 06:53

Re: Почитал я тут всякой всячины на тему оптимизации кода

Сообщение ajkj3em »

Старина Зотин писал(а):Сделать переносимый язык, или стандартную библиотеку для Си с такими запросами.
я по-моему говорил уже как-то - работал с кренделем, который на
define'ах забабахал библиотеку эмуляции exceptions под ANSI C и
потом активно её использовал в софте для payment terminals .. до
сих пор наверняка где-то в verifone'овских pinpad'ах тикает

короче мораль, что на Си можно сделать что угодно, главное не
бояться дефайнов :)
Аватара пользователя
ajkj3em
Маньяк
Сообщения: 2063
Зарегистрирован: 12 ноя 2006, 06:53

Сообщение ajkj3em »

Marmot писал(а):А векторные инструкции для singlecore это всё равно только для всяких игрушек полезно..
ну считай угадал с первого раза, зачем это Старине нужно :)
Аватара пользователя
Marmot
Графоман
Сообщения: 39279
Зарегистрирован: 17 фев 2003, 17:58
Откуда: Caulfeild
Контактная информация:

Сообщение Marmot »

ajkj2em писал(а):
Marmot писал(а):А векторные инструкции для singlecore это всё равно только для всяких игрушек полезно..
ну считай угадал с первого раза, зачем это Старине нужно :)
А он теперь никак игрухи пишет? :o
Ren
Частый Гость
Сообщения: 25
Зарегистрирован: 23 авг 2005, 00:56

Re: Почитал я тут всякой всячины на тему оптимизации кода

Сообщение Ren »

Старина Зотин писал(а): Наверное и стандартные решения уже есть? Интересная задачка. Сделать переносимый язык, или стандартную библиотеку для Си с такими запросами.
Кто что про OpenMP думает?
Аватара пользователя
sz
Маньяк
Сообщения: 1266
Зарегистрирован: 17 фев 2003, 19:34

Сообщение sz »

> А вот копмилятор должен быть очень умным

Слабо компилятору быть таким умным, чтобы запихнуть произвольный цикл в SIMD. Да еще сообразить, как обойтись минимумом бранчей, соптимизировать кеш и побить код на независимые куски. Подсказка нужна. Нужно рассказать компилятору, чего ты собственно хочешь добиться. А для этого лучше подходит язык запросов, а не процедурный.

> Честно гововоря мне больше нравятся massive-multicore CPUs (
> http://en.wikipedia.org/wiki/UltraSPARC_T1 ) чем vector processors,
> хотя они во многом и похожи.

Одно другому не мешает - перпендикулярные вещи.

> А векторные инструкции для singlecore это всё равно только для
> всяких игрушек полезно, а там можно и ручками соптимизнуть.

Везде можно ручками соптимизнуть. Но когда пишешь код под 8 платформ (популярных игровых платформ нынче даже больше, но наш проект поддерживает только 8), начинаешь задумываться, а может обобщить как-то?

> А он теперь никак игрухи пишет?

EA
Аватара пользователя
sz
Маньяк
Сообщения: 1266
Зарегистрирован: 17 фев 2003, 19:34

Сообщение sz »

> Вот тут почитать про это можно: http://research.sun.com/projects/plrg/fortress0785.pdf

Спасибо, почитал. Немного не то. Слишком много гоняются за "очеловечиванием" синтаксиса.

А я говорю о чисто практических вещах. Рассказать компилятору, как правильно оптимизировать.

Мне кажется, должен быть язык обратно совместимый с Си, но добавить конструкций по работе с массивами. Каких именно - понятия не имею. Если бы знал, то давно бы пропагандировал новый язык, генерящий невиданный по оптимальности код ;)
Аватара пользователя
Groundhog
Графоман
Сообщения: 5099
Зарегистрирован: 20 авг 2005, 16:36
Откуда: Vancouver

Сообщение Groundhog »

"Я говорю о том, что писать оптимизированный код на Си (не говоря уже о других высокоуровневых языках) под процессоры поддерживающие SIMD (а это сейчас поддерживают практически все процессоры) - практически невозможно."
А вы попробуйте вместо ANSI C, gcc (GNU) C использовать. Это
позволит вам применять likely/unlikely в условных операторах
(главное их правильно расставить ;). Только за счет "подсказки" CPU какая ветвь наиболее вероятна можно 1000% выигрыш
получить в производительности. Инлине функции так-же производительности не уменьшают :).
Аватара пользователя
sz
Маньяк
Сообщения: 1266
Зарегистрирован: 17 фев 2003, 19:34

Сообщение sz »

> А вы попробуйте вместо ANSI C, gcc (GNU) C использовать. Это
> позволит вам применять likely/unlikely в условных операторах

Вообще-то, я говорю не о branch prediction, а о векторизации.
Кстати, даже в случае правильного предсказанния бранч дает перформанс хит - останавливает на время отсылку инструкций на параллельный конвейр.
Ответить