Возможно ли получить указатели на действительные и мнимые части, не выделяя и не делая глубокую копию в два новых двойных массива?
Что можно сделать:
double* real_a = reinterpret_cast<double*>(&a[0].x); //points to real part of a
double* imag_a = reinterpret_cast<double*>(&a[0].y); //points to imaginary part of a
но обратите внимание, что вам нужно использовать шаг 2 при доступе к указателям, чтобы получить правильные реальные или воображаемые элементы.
Причина в том, что я хотел бы иметь возможность вызывать функции cuBLAS D, а не Z для реальной и мнимой частей по отдельности.
Это будет работать с функциями BLASкоторые работают с вашими реальными или воображаемыми указателями как векторами, потому что эти процедуры BLAS позволяют пройти шаг (в данном случае их должно быть два).
Например,
cublasDgemm(...,real_a,...,somearray,...,anotherarray,...)
Это не будет работать с указателями, которые вы можете получить напрямую, как я показал здесь.Функции BLAS, которые будут обрабатывать массив как матрицу, поддерживают пошаговые исходные и целевые данные, но этот шаг применяется к началу каждого столбца со сглаженной матрицей, а не к элементам в столбце, что вам и нужно сделатьэто работает правильно.