Здравствуйте, alex_public, Вы писали:
_>Здравствуйте, lpd, Вы писали:
lpd>>Сложение со случайным доступом(и вечным cache-miss) оказалось еще в два раза медленнее, чем с последовательным. Это обозначает верхнюю границу эффективности кэша при доступе к данным, и для меня интересно.
_>Ну так "в два раза медленнее" — это вроде вполне не плохой результат, не так ли? )
Неплохой, однако в типичной серверной/десктопной/системной программе на C++(мы вроде не говорим на вычислениях) редко встречается последовательный доступ к большим векторам, да еще с минимальной обработкой. Ясно, что в редких случаях, вроде обработки запроса из кэша баз данных(например) доступ последовательный, но и там temportal кэширование важнее, чем spatial. Поэтому я бы не сказал, что однозначно всегда лучше хранить в векторе объекты, чем указатели. Т.к. обычно это вопрос архитектуры, или избежания копирования, а не оптимизации кэша. Хотя, случаи разные, — это понятно.
lpd>>Относительно причин задержек Java/C# vs C++ думаю, что лишний код присущ JIT-компиляторам, и лишние индирекции часть этой проблемы.
_>Причины медленности Java и C# можно принципиально разделись на два типа:
_>Какой из этих типов тормозов вносит больший вклад зависит конечно же от конкретного кода. Но я сомневаюсь, что в большинстве случаев главной причиной является тип1 (как по сути утверждал тут ты).
Я не исследовал JVM, но могу предположить, что байт код отличается от внутреннего представления программы компилятором, поэтому он вносит дополнительные сущности, которые потом сложно соптимизировать. Это всего лишь мое предположение. Однако, я думаю, что низкая производительность присуща любому языку, преобразуемому в промежуточный байт-код. Иначе давно бы Java, C# или другой подобный язык догнал по скорости C++(правда, я все равно считал бы, что байт-код по сути является не нужным усложнением).
У сложных вещей обычно есть и хорошие, и плохие аспекты.
Берегите Родину, мать вашу. (ДДТ)