ФлеймФорумПрограммирование

STL. Использовать или нет? (4 стр)

Страницы: 13 4 5 682 Следующая »
#45
21:37, 15 сен 2008

Zeux
У тебя работают? может ты их неправильно используешь?

#46
21:37, 15 сен 2008

San
>Sbtrn. Devil
>Оверхед :)
>Если пользоваться семантикой STL, то ничего лишнего писать не придется.
На мой скромный взгляд, запись if (some_iterator == full_reference_to_container_expression.end ()) - вот это и есть как раз самое форменное написательство лишнего.
А оверхеда при тривиальном враппере не будет или практически не будет - слава Императору и инлайнам.

Кроме того, бывают злобные ситуации, в которой стл ну никак не спасает. Вот, к примеру, лист. std::list - это, конечно, хорошо (не будем рассматривать всякие изощрённые нюансы, типа того, что в листе могут понадобиться элементы самой разной аллокации - стековые, динамические, статические...). Но есть в нём одна загвоздка: листуемый элемент должен быть уже продекларированным и законченным классом. Что автоматически пресекает использование сего замечательного изобретения для форвард-декларнутых или незаконченных классов. И, например, вот так:

class CDocumentNode
{
 ...
 std::list<CDocumentNode> m_Subnodes;
 ...
};

не сделаешь. Соответственно, велосипед становится неминуем.

#47
21:44, 15 сен 2008

cppguru
Я их не использую. Но работают.

#48
21:59, 15 сен 2008

Zeux

Найн.. наверное все-таки не работают. Из доклада Valve на GDC 2008: "General C++ code does not run well on SPUs."
Оригинал тут: http://www.valvesoftware.com/publications/2008/GDC2008_CrossPlatf… velopment.pdf

#49
22:03, 15 сен 2008

gd.ua
Всё можно заставить работать, определённой ценой.

Кстати у валве очень хороший доклад, всем читать и PC-only guys тоже.

#50
22:34, 15 сен 2008

cppguru
>Всё можно заставить работать, определённой ценой.

Ну если Valve не соврали.. Как можно заставить кого-то(SPU) выполнять хорошо что-то, что он выполняет, скажем, плохо(С++ код)?
И если подразумевается что "заставить работать" - это именно "корректно исполнять", не важно какой "ценой", то как понимать
>Всё можно заставить работать, определённой ценой.
после
>Виртуальные функции на SPU не работают, например.
?

Просто из интереса спросил.

#51
22:47, 15 сен 2008

Sbtrn. Devil
По хорошему должно быть так:

class CDocumentNode
{
...
std::list<CDocumentNode*> m_Subnodes;
...
};

#52
8:57, 16 сен 2008

en emot
По хорошему к чертям этот лист :)
Good Old C полезен да

#53
9:47, 16 сен 2008

Тут есть непонимание.
С одной стороны, конечно, General C++ code does not run well on SPUs. Если сравнивать с оптимизированным C-style кодом.
С другой стороны, general C++ code по утверждениям сони работает быстрее чем на PPU в некоторых случаях. Я не проверял, мне как-то всякие стл на SPU (как и не на SPU) тоже без надобности.

Виртуальные функции на SPU в некоторых вариантах SPU программ работают автоматически, в смысле сами.

#54
9:51, 16 сен 2008

en emot
Проблема в том, что в играх нет места CDocumentNode.

#55
9:56, 16 сен 2008

gd.ua
Вай-вай-вай. Ну история была такая. На спу нет поддержки перемещаемых элементов в данных (вроде так). Соответственно виртуальные функции в перемещаемом (PIC) экзешнике сделать нельзя. Но зато можно в неперемещаемом (non-PIC). Но при этом обламываются некоторые другие интересные фишки. Вот и всё.

> Как можно заставить кого-то(SPU) выполнять хорошо что-то, что он выполняет, скажем, плохо(С++ код)?
Что значит плохо? Какие конкретно конструкции плохо?

На SPU всяко быстрей, чем на PPU. Ну да, это векторный процессор, ну да, бранчинг тормоз (кстати динамические хинты работают!). Но нулевые кеш-миссы всё окупают! %).  И даже если на SPU не сильно быстрей, то всё равно получаем бонусы, если выкинем туда какой-нибудь компонент, уже за счёт параллельности.

en emot
>std::list<CDocumentNode*> m_Subnodes;
Представь себе карту памяти этой хреновины. Кеш-миссы сплошные. Шаблонные контейнеры тем и плохи, что слишком легко наворотить плохой код. При небольшом количестве элементов простой массив быстрее будет. При большом — надо сделать правильный список. Да и зачем нужны списки, ты в рантайме собрался вставлять в случайные места сто тыщ нод каждый кадр?

#56
10:54, 16 сен 2008

zlos
> Проблема в том, что в играх нет места CDocumentNode

Может именно CDocumentNode и нету, а вот просто CNode есть и прекрастно юзается для: графа сцены, xml, gui и т.д.

#57
11:33, 16 сен 2008

Короче, спорить смысла нет. Выскажу свое имхо еще раз - мне без стл было бы грустно. Юзать или нет - дело ваше :)
ЗЫ Единственное, где я не использую стл - 64к интро. Но там у меня свой велосипед, семантически идентичный контейнерам стл.[

И да,

class CDocumentNode
{
 ...
 std::list<CDocumentNode&> m_Subnodes;
 ...
};
#58
11:40, 16 сен 2008

San
>std::list<CDocumentNode&> m_Subnodes;
Поржал :)

#59
11:47, 16 сен 2008

viv
чочо?

Страницы: 13 4 5 682 Следующая »
ФлеймФорумПрограммирование

Тема в архиве.

Тема закрыта.