CUDA против управления памятью CuBlas

Я заметил, что я могу использовать блоки памяти для матриц, выделенных с помощью функции cudamalloc() или cublasalloc() для вызова функций cublas. Скорость передачи матриц и вычислительные процессы медленнее для массивов, выделенных с помощью cudamalloc(), чем с cublasalloc(), хотя есть и другие преимущества использования массивов с помощью cudamalloc(). Почему это так? Было бы здорово услышать некоторые комментарии.


person stanigator    schedule 05.11.2009    source источник
comment
Видите ли вы это при работе с числами с плавающей запятой, двойными значениями или и тем, и другим? Это может быть проблема с выравниванием (cudaAlloc() принимает аргумент elemSize, а cudaMalloc() — нет).   -  person Gabriel    schedule 05.11.2009
comment
Я работал с поплавками в обоих случаях. Не видел этого в двойнике, так как мне не нужно работать с двойниками в моем приложении. Заодно проверю cudaAlloc.   -  person stanigator    schedule 05.11.2009
comment
Кстати, Габриэль, вы имеете в виду ''cublasAlloc()'', а не ''cudaAlloc()''?   -  person stanigator    schedule 05.11.2009
comment
Да, это была опечатка. Если вы видите это с поплавками, то я не знаю, что сказать о разнице в производительности.   -  person Gabriel    schedule 06.11.2009
comment
Если вы просто хотите оптимизировать, ознакомьтесь с 2D-выровненными pitch mallocs для cublas (вам нужно будет использовать термины lda и ldb в BLAS соответствующим образом). Это может дать значительное ускорение. И, конечно же, есть закрепленная память.   -  person Gabriel    schedule 06.11.2009
comment
Я посмотрел на закрепленную память. Это выглядит многообещающе, так как я могу выделить память на хосте, доступную для GPU (особенно когда память на моем GPU находится на низком уровне). Я видел пример кода, размещенный на ddj.com/architect/217500110 . Однако будут ли какие-либо существенные потери производительности из-за дополнительных передач доступа к памяти, которые происходят между операциями?   -  person stanigator    schedule 06.11.2009


Ответы (1)


cublasAlloc по сути является оболочкой вокруг cudaMalloc(), поэтому разницы быть не должно, есть ли что-то еще, что меняется в вашем коде?

person Tom    schedule 19.11.2009