Можно ли получить указатели на реальные и мнимые части cuDoubleComplex? - PullRequest
0 голосов
/ 27 августа 2018

Рассмотрим массив cuDoubleComplex a в памяти устройства.Можно ли получить указатели на действительные и мнимые части a, не выделяя и не делая глубокую копию в два новых double массива?

примерно так:

real_a = //points to real part of a
imag_a = //points to imaginary part of a

вместочто-то вроде:

/*allocate real_a and imag_a here */
    for(int j=0; j<numElements; j++){
        real_a[j]= a[j].x;
        imag_a[j]= a[j].y;
}

CUDA имеет нечто подобное для чисел , но не для массивов / указателей.

Причина в том,что я хотел бы иметь возможность вызывать функции cuBLAS D вместо Z для реальной и мнимой частей по отдельности.Например,

cublasDgemm(...,real_a,...,somearray,...,anotherarray,...)

1 Ответ

0 голосов
/ 27 августа 2018

Возможно ли получить указатели на действительные и мнимые части, не выделяя и не делая глубокую копию в два новых двойных массива?

Что можно сделать:

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, которые будут обрабатывать массив как матрицу, поддерживают пошаговые исходные и целевые данные, но этот шаг применяется к началу каждого столбца со сглаженной матрицей, а не к элементам в столбце, что вам и нужно сделатьэто работает правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...