Когда мы вызываем функцию для каждого элемента в векторе, используя for_each, это векторы векторов или нет?Векторизовать вызовы функций для каждого элемента вектора
ответ
В общем, нет.
std::for_each
- это просто обертка вокруг петли.
Однако, с оптимизацией, вполне вероятно, что вызов std::for_each
встроен и для простых функций, вероятно, что вызов функции для каждого элемента также встроен.
Как только все встраивается, это как если бы петля была написана вручную; в таком случае вопрос становится «будет ли компилятор векторизовать цикл, выполняющий простую арифметику»; и это полностью зависит от компилятора.
Для того чтобы это произошло, компилятор должен знать, что целевая архитектура поддерживает инструкции SIMD и может или не может векторизовать в зависимости от уровня оптимизации, независимо от того, является ли число итераций постоянным или нет, независимо от того, итерации, как известно, кратно 4 и т. д.
Для дальнейшего обобщения: если вызов функции не встроен, все же можно векторизовать такие циклы, используя #pragma omp declare simd в объявлении функции, которая также известна как технология с поддержкой SIMD. К сожалению, этот метод работает только в некоторых версиях компилятора Intel или в компиляторах, поддерживающих стандарт OpenMP4.0. – zam
Предполагая, что вы спрашиваете о std :: vector, ответ - нет. std :: vector - это оболочка вокруг массива, но он косвенно обращается к этим блокам памяти. Однако вы можете взять указатель строки так myVec.begin()._Ptr
и работать с ним внутри цикла. метод объявления с noalias помогает, например __declspec(noalias)
. На вторую часть вопроса отвечает Камерон. Если функция встраивается, а архитектура поддерживает векторизованные данные, компилятор должен теперь векторизовать данные.
Все это полностью зависит от платформы. И небрежно. Вы можете просто сделать '& myVec [0]', что гарантированно сработает. –
- 1. Вызов функции для каждого элемента вектора C++
- 2. Как я могу векторизовать эту функцию для возврата вектора индекса?
- 3. Как выполнить условное назначение каждого элемента вектора
- 4. Вычтите каждый элемент вектора A из каждого элемента вектора B
- 5. Количество каждого элемента из вектора в R
- 6. Проверка каждого элемента вектора с помощью функтора
- 7. Найти элемент каждого элемента другого вектора
- 8. Вызов функции-члена каждого элемента вектора C++
- 9. R - Лаконично добавить вектор для каждого элемента вектора
- 10. Как распределить ключ для каждого элемента вектора в clojure?
- 11. Как разрешаются вызовы функций?
- 12. Динамически создавать вызовы функций
- 13. C++ для каждого вектора строк
- 14. Множественные вызовы функций файлов C++
- 15. Как векторизовать R strsplit?
- 16. Функциональные вызовы функций за кадр
- 17. Прямые вызовы функций выполняются быстрее, чем вызовы функций обратного вызова?
- 18. Синхронные вызовы функций
- 19. Полиморфизм C++, вызовы функций
- 20. Javascript - ошибочные вызовы функций
- 21. динамические вызовы функций в nodejs
- 22. Отложенные вызовы функций
- 23. Множественные асинхронные вызовы функций
- 24. C++ неявные вызовы функций
- 25. Динамические вызовы функций класса
- 26. вызовы функций между классами
- 27. Optimization игнорировать вызовы функций
- 28. C# - сократить вызовы функций
- 29. Python - Вызываемые вызовы функций
- 30. итератор для последнего элемента вектора
Что такое векторный вызов? Вы спрашиваете, использует ли 'for_each' несколько потоков? – Cameron
Вы имеете в виду инструкции SIMD? – doron
Например, я увеличиваю элементы на 5 в функции – Shubham