?

Log in

No account? Create an account
Previous Entry Share Next Entry
2016-01

(no subject)

почему нету ни одного языка, который реализовывал бы SoA или другие memory-related оптимизации с лаяутом/доступом к обьектам, кроме мелких потуг вроде девиртуализации итд? (я один знаю, но сугубо экспериментальный)

This entry was originally posted at http://wizzard.dreamwidth.org/471148.html. It has comment count unavailable comments. Please comment there using OpenID.

  • 1
vit_r April 23rd, 2016
Те, кто занимается SOA, говорят, что красиво только на картинках. Чтобы производительность была хотя бы сносной, приходится под этими красивыми картинками копать безобразные прямые туннели.

Если кто язык для SOA и будет делать, так это Амазон. Но чего-то не слышно. Значит, нет у такого перспектив.

wizzard0 April 23rd, 2016
Не service-oriented architecture, а structure of arrays. See also: https://github.com/miniboxing/ildl-plugin ; https://ispc.github.io ; etc.

Ну и, в некотором роде, под определение подходит SQL, где база в теории может произвольно реконфигурить представление данных, лепить индексы итд, а запрос останется тем же; на практике все равно много ручного труда выходит


Edited at 2016-04-23 05:24 pm (UTC)

vit_r April 23rd, 2016
the programmer writes a program that generally appears to be a regular serial program

:-/ Не знаю. На первый взгляд выглядит как извращение.

Если хочется перемалывать цифры, есть Fortran. Если запросы к данным, то есть SQL на кластере. Если обмен сообщениями, то тоже есть оптимизированные языки.

wizzard0 April 23rd, 2016
> SQL на кластере
полу-оффтопик :)
http://www.frankmcsherry.org/graph/scalability/cost/2015/01/15/COST.html

109 April 24th, 2016
не, ну во-первых, кластер - это не scalability, а во вторых, о чём ссылка? о том, что где-то scalability сделана с большим оверхедом? ну окей, а ты знаешь, в некоторых системах даже БАГИ есть!

wizzard0 April 24th, 2016
ну это на поржать, оно имеет мало отношения к изначальному вопросу, да.

vit_r April 24th, 2016
Ну, открыли Америку. Естественно, можно так подобрать решение, чтобы оптимизация сама все ресурсы сжирала. (Что мною несколько раз было проделано на этом самом SQL кластере.)

ex0_planet April 23rd, 2016
А не есть ли это просто хитро замаскированная форма оптимизации "под кэш"? Которую в любом случае каждый раз заново делать надо?

wizzard0 April 23rd, 2016
Надо. И надо чтобы этот "каждый раз" проходил автоматически, или хотя бы быстро.

ex0_planet April 24th, 2016
Тогда это не должно быть встроено в язык, иначе каждый раз, когда конкретная версия компилятора не справится с конкретной субархитектурой язык будет либо: а) просто выброшен и все переписано на сишечке вручную; либо б) будет очередной SQL — здравствуйте планы, их курение, странные квирки и темная магия по смещению точки сборки, чтобы оптимизатор взглянул на запрос новыми глазами...

А что за экспериментальный язык-то?

vit_r April 24th, 2016
Насколько понимаю, это для тех, кто не способен научиться курить планы.

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

wizzard0 April 24th, 2016
> А что за экспериментальный язык-то?
Virgil

wizzard0 April 24th, 2016
> конкретная версия компилятора не справится с конкретной субархитектурой
Плагины и открытый пайплайн (Scala, Boo, Roslyn итд) наше всё.

beldmit April 23rd, 2016
Что есть SoA в данном контексте?

vissarion April 23rd, 2016
какую программу не пиши - в итоге всегда получается компилятор

justy_tylor April 23rd, 2016
А нахуа? Мы в кружочках как-то обсуждали того же Jonathan Blow, и я сказал что нахрен его "массивы" (которые типа column storage в памяти), ибо под задачи на сегодняшних процах лучше прёт что-то тайловое. А на завтрашних процах - кто знает. То есть, язык вообще не должен затачиваться на такие низкоуровневые говны.

wizzard0 April 23rd, 2016
Так я ж именно об этом. Язык не должен затачиваться, а должен давать возможность бодро и весело эти говны переключать и/или прикручивать новые, с минимальным влиянием на codebase.

justy_tylor April 23rd, 2016
Таки "язык с реализацией SoA" это и на конкретные говны. А чтобы "переключать" - я пока не допилил до public, а у других не видел.

thedeemon April 24th, 2016
Ну тот же Jai вспоминается, да. Причем, когда Blow свои SoA показывал, мужики быстро изобразили то же на D имеющимися средствами.

wizzard0 April 24th, 2016
Jai это что-то новое, погуглю.
UPD: а черт, я просто название забыл, всё, понял.

D да, но мне что-то в последнее время всё больше и больше Nim нравится, он какой-то вот очень lean&mean и няшный.

Edited at 2016-04-24 12:42 pm (UTC)

sleepy_drago April 24th, 2016
как выше писали, одномерные задачи редко бывают. в многомерных случаях все равно, куда первые массивы смотрят. там надо на кластеры бить данные. в общем soa это как ассемблерные вставки - на общую картину влияния не оказывают, кроме частных случаев. а там уже и руцями можно.

wizzard0 May 1st, 2016
Лень бить руцями же!

Ну и плюс временами всплывает ДНИЩЕ вроде http://stackoverflow.com/questions/32062894/take-advantage-of-arm-unaligned-memory-access-while-writing-clean-c-code которым конечно можно забивать голову, но есть и другие штуки которые можно туда с удовольствием поместить

  • 1