std::vector<int> createVector(int size) {
std::vector<int> result;
result.resize(size);
for (int ii = 0; ii < size; ++ii) {
result.push_back(ii * ii);
}
return result;
}
Тут явно опечатка. Вместо result.resize(size) должно быть result.reserve(size). Я не знаю проверяли ли вы ассемблер на resize или все таки reserve, хотелось бы обновленный ассемблер если все таки на resize :)
Основная проблема в оптимизации, начиная с момента, когда скорость процессоров перерасла скорость доступа в памяти, это собственно скорость доступа к памяти. Тупо менять float на int, когда части матрицы разбросаны по разным частям памяти. Вы не получите серьезного прироста к fps и просто усложните себе жизнь.
На современных системах благодаря различным оптимизациям, инструкциям и векторизации разницы уже нет, а зачастую float даже быстрее при умножении/делении, чем int.
Тут явно опечатка. Вместо result.resize(size) должно быть result.reserve(size). Я не знаю проверяли ли вы ассемблер на resize или все таки reserve, хотелось бы обновленный ассемблер если все таки на resize :)
Основная проблема в оптимизации, начиная с момента, когда скорость процессоров перерасла скорость доступа в памяти, это собственно скорость доступа к памяти. Тупо менять float на int, когда части матрицы разбросаны по разным частям памяти. Вы не получите серьезного прироста к fps и просто усложните себе жизнь.
На современных системах благодаря различным оптимизациям, инструкциям и векторизации разницы уже нет, а зачастую float даже быстрее при умножении/делении, чем int.