Как параметризировать корпус петли с функцией, гарантируя производительность?C++

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

Сообщение Anonymous »

Рассмотрим следующий код игрушек, который выполняет очень простые (несколько инструкций) операции на горячей петле на большом количестве значений: < /p>

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

template
void process_f(int count, float* v) {
float* ptr = v;
for (int i = 0; i < count; i++) {
*ptr = f(*ptr);
ptr++;
}
}

void process_without_f(int count, float* v) {
float* ptr = v;
for (int i = 0; i < count; i++) {
*ptr = (*ptr) * 2.0f + 3.0f;
ptr++;
}
}

inline float mult(float v) { return v * 2.0f + 3.0f; }

int main() {
int count = 1000000000;
float* v = new float[count];
process_f(count, v);
process_without_f(count, v);
delete[] v;
}
Функция шаблона Process_f помогает сделать код более общим («макет» из цикла только должен быть написан один раз), но я обеспокоен, он не гарантирует производительность.
Редактировать: это добровольно просто Не смог бы использовать STD :: Transform так же легко (или также значительно повлияет на читаемость кода). Это включает, например, дело с выровненными рядами в многомерном буфере, выполнении операций на беспорядочных битах в упакованных битах или работающих на нескольких значениях одновременно.
Мои вопросы:

Я могу каким -то коде. Скомпилируется в эквивалентную сборку? Встроенный и векторный цикл в процессе>

Подробнее здесь: https://stackoverflow.com/questions/797 ... erformance
Ответить

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

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

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

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

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