Я оптимизирую матричную числовую точку доступа.Может ли доступ к неинициализированным значениям привести к результату?
В настоящее время я делаю блокировку и loop unrolling для улучшения производительности. Тем не менее, я намеренно не очищаю границы. Вместо этого я допускаю переполнение блоков блокировки, и, конечно, алгоритм затрагивает неинициализированные значения.
Однако матрица щедро предопределена, чтобы справиться с переполнением, поэтому я фактически не незаконно обращаюсь к местоположению памяти.
Я не делаю пилинг по нескольким причинам:
- лени
- производительности удара из-за очень плохую местность пилинга пограничного случая.
- Чтобы избежать сложного кода обрыва границы.
Тем не менее, мне интересно, могут ли эти переполненные обращения, которые касаются неинициализированных значений, на самом деле вызвать удар производительности?
Я предсказуемо знаю, где происходят неинициализированные обращения, и они также сообщаются через valgrind. Я также профилировал код с использованием VTune от Intel и не видел никаких признаков, которые могли бы указывать на ухудшение производительности из-за этого.
+1, я настоятельно рекомендую вам по крайней мере нуль инициализировать их. Предполагая, что вы работаете с плавающей точкой, неинициализированные данные имеют высокую вероятность денормализации. [И вы не хотите, чтобы это испортило вашу производительность] (http://stackoverflow.com/questions/9314534/why-does-changing-0-1f-to-0-slow-down-performance-by-10x/ 9314926 # 9314926). – Mysticial
Я знаю, но жадно обнуление пула предварительно выделенных матриц с 'memset' тоже очень дорого. –
Хотя в зависимости от того, насколько велики ваши петли, штраф в несколько сотен циклов в конце каждого цикла, вероятно, не заметен. – Mysticial