Как лучше разместить в оперативной памяти массив комплексных чисел с точки зрения производительности?
В двух массивах: double re[N]; double im[N]; или в одном double c[2*N], где действительные и мнимые части чередуются?
Есть ли какая-нибудь разница с точки зрения производительности? Может, во втором случае лучше работает кэш процессора, т.к. действительная и мнимая части числа используются одновременно?
Мне удобнее в двух массивах.
P.S. Про структуры и читабельность я знаю.
Кроме того, мне помнится, что в некоторых популярных математических библиотеках действительные и мнимые части хранятся отдельно. Например, UMFPACK поддерживает оба варианта. Логика мне тоже подсказывает, что лучше использовать один массив, но я не уверен, хотелось бы каких-нибудь подтверждений, результатов тестов...
Если вы хотите быть дружественными к кэшу, то нужна локальность доступа к данным.
Поэтому лучше в одном массиве чередовать реальную и мнимую части. Или, еще лучше - завести структуру с двумя полями и хранить массив из них. Тут в памяти расстановка данных будет такая же, но код будет читаем и логичен.
Смысл тот же, что и в c[2*N], но пользоваться удобнее и читабельность кода повышается.
Учтите, что операции над double обычно выполняются дольше, чем над float.