Проектирование, ориентированное на данные: подготовка данных для итерации, удобной для кэширования, в сравнении с прямымC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Проектирование, ориентированное на данные: подготовка данных для итерации, удобной для кэширования, в сравнении с прямым

Сообщение Anonymous »

В беседах Майка Эктона здесь и здесь (ссылки указаны с метками времени), а также в этом сообщении блога они сначала подготавливают/предусловливают/предварительно выбирают/запрашивают необходимые несмежные данные, а затем перебирают их/выполняют вычисления удобным для кэша способом. .
Вот код из сообщения в блоге:

Код: Выделить всё

// objects_store.h

struct ObjectsStore
{
vector m_Positions;
vector m_Orientations;
};

// Runtime solution:

struct TranslationData
{
Vector3D m_ObjPosition;
const Quaternion m_ObjOrientation;
const Vector3D m_ObjTranslation;
};

void PrepareTranslations(const ObjectsStore& inStore,
const vector& inTranslations,
vector& outObjectsToTranslate)
{
assert(inStore.m_Positions.size() == inStore.m_Orientations.size());
assert(inStore.m_Positions.size() == inTranslations.size());
for (size_t i = 0; i < inTranslations.size(); ++i)
{
outObjectsToTranslate.push_back
({
inStore.m_Positions[i];
inStore.m_Orientations[i];
inTranslations[i];
});
}
}

void TranslateObject(vector& ioObjectsToTranslate)
{
for (TranslationData& data: ioObjectsToTranslate)
data.m_ObjPosition += data.m_ObjOrientation * data.m_ObjTranslation;
}

void ApplyTranslation(const vector& inTranslationData
ObjectsStore& outStore)
{
assert(inStore.m_Positions.size() == inTranslationData.size());
for (size_t i = 0; i < inTranslationData.size(); ++i)
outStore.m_Positions[i] = inTranslationData[i].m_ObjPosition;
}

void UpdateGame(ObjectsStore& ioStore, vector& inTranslations)
{
vector translation_data;
PrepareTranslations(ioStore, inTranslations, translation_data);
TranslateObject(translation_data);
ApplyTranslation(translation_data, ioStore);
}
Мой вопрос: чтобы подготовить данные таким образом, нужно в любом случае получить доступ к данным (и также скопировать их), поэтому мне интересно даже если данные будут более удобны для кэширования после, не было бы более эффективно изменить данные напрямую и сэкономить на этапе подготовки?
Насколько я понимаю Поймите это, очевидно, что вычисления тогда очень эффективны для подготовленных данных, но с дополнительные затраты на их подготовку.
Может ли кто-нибудь сказать мне, чего мне здесь не хватает? Требуются ли дополнительные затраты для получения других преимуществ (например, более четкого кода и т. д.) или это на самом деле более эффективно, чем прямая модификация?
Заранее спасибо

Подробнее здесь: https://stackoverflow.com/questions/792 ... direct-acc
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»