Zeux
У тебя работают? может ты их неправильно используешь?
San
>Sbtrn. Devil
>Оверхед :)
>Если пользоваться семантикой STL, то ничего лишнего писать не придется.
На мой скромный взгляд, запись if (some_iterator == full_reference_to_container_expression.end ()) - вот это и есть как раз самое форменное написательство лишнего.
А оверхеда при тривиальном враппере не будет или практически не будет - слава Императору и инлайнам.
Кроме того, бывают злобные ситуации, в которой стл ну никак не спасает. Вот, к примеру, лист. std::list - это, конечно, хорошо (не будем рассматривать всякие изощрённые нюансы, типа того, что в листе могут понадобиться элементы самой разной аллокации - стековые, динамические, статические...). Но есть в нём одна загвоздка: листуемый элемент должен быть уже продекларированным и законченным классом. Что автоматически пресекает использование сего замечательного изобретения для форвард-декларнутых или незаконченных классов. И, например, вот так:
class CDocumentNode { ... std::list<CDocumentNode> m_Subnodes; ... };
не сделаешь. Соответственно, велосипед становится неминуем.
cppguru
Я их не использую. Но работают.
Zeux
Найн.. наверное все-таки не работают. Из доклада Valve на GDC 2008: "General C++ code does not run well on SPUs."
Оригинал тут: http://www.valvesoftware.com/publications/2008/GDC2008_CrossPlatf… velopment.pdf
gd.ua
Всё можно заставить работать, определённой ценой.
Кстати у валве очень хороший доклад, всем читать и PC-only guys тоже.
cppguru
>Всё можно заставить работать, определённой ценой.
Ну если Valve не соврали.. Как можно заставить кого-то(SPU) выполнять хорошо что-то, что он выполняет, скажем, плохо(С++ код)?
И если подразумевается что "заставить работать" - это именно "корректно исполнять", не важно какой "ценой", то как понимать
>Всё можно заставить работать, определённой ценой.
после
>Виртуальные функции на SPU не работают, например.
?
Просто из интереса спросил.
Sbtrn. Devil
По хорошему должно быть так:
class CDocumentNode
{
...
std::list<CDocumentNode*> m_Subnodes;
...
};
en emot
По хорошему к чертям этот лист :)
Good Old C полезен да
Тут есть непонимание.
С одной стороны, конечно, General C++ code does not run well on SPUs. Если сравнивать с оптимизированным C-style кодом.
С другой стороны, general C++ code по утверждениям сони работает быстрее чем на PPU в некоторых случаях. Я не проверял, мне как-то всякие стл на SPU (как и не на SPU) тоже без надобности.
Виртуальные функции на SPU в некоторых вариантах SPU программ работают автоматически, в смысле сами.
en emot
Проблема в том, что в играх нет места CDocumentNode.
gd.ua
Вай-вай-вай. Ну история была такая. На спу нет поддержки перемещаемых элементов в данных (вроде так). Соответственно виртуальные функции в перемещаемом (PIC) экзешнике сделать нельзя. Но зато можно в неперемещаемом (non-PIC). Но при этом обламываются некоторые другие интересные фишки. Вот и всё.
> Как можно заставить кого-то(SPU) выполнять хорошо что-то, что он выполняет, скажем, плохо(С++ код)?
Что значит плохо? Какие конкретно конструкции плохо?
На SPU всяко быстрей, чем на PPU. Ну да, это векторный процессор, ну да, бранчинг тормоз (кстати динамические хинты работают!). Но нулевые кеш-миссы всё окупают! %). И даже если на SPU не сильно быстрей, то всё равно получаем бонусы, если выкинем туда какой-нибудь компонент, уже за счёт параллельности.
en emot
>std::list<CDocumentNode*> m_Subnodes;
Представь себе карту памяти этой хреновины. Кеш-миссы сплошные. Шаблонные контейнеры тем и плохи, что слишком легко наворотить плохой код. При небольшом количестве элементов простой массив быстрее будет. При большом — надо сделать правильный список. Да и зачем нужны списки, ты в рантайме собрался вставлять в случайные места сто тыщ нод каждый кадр?
zlos
> Проблема в том, что в играх нет места CDocumentNode
Может именно CDocumentNode и нету, а вот просто CNode есть и прекрастно юзается для: графа сцены, xml, gui и т.д.
Короче, спорить смысла нет. Выскажу свое имхо еще раз - мне без стл было бы грустно. Юзать или нет - дело ваше :)
ЗЫ Единственное, где я не использую стл - 64к интро. Но там у меня свой велосипед, семантически идентичный контейнерам стл.[
И да,
class CDocumentNode { ... std::list<CDocumentNode&> m_Subnodes; ... };
San
>std::list<CDocumentNode&> m_Subnodes;
Поржал :)
viv
чочо?
Тема в архиве.
Тема закрыта.