Spec-Zone.ru › Eigen3

Использование Eigen в ядрах CUDA

Начиная с CUDA 5.5 и Eigen 3.3, можно использовать матрицы, векторы и массивы Eigen с фиксированным размером в ядрах CUDA. Это особенно полезно при работе с большим количеством, но небольших задач. По умолчанию, когда заголовки Eigen включаются в файл .cu, компилируемый nvcc, большинство функций и методов Eigen предваряются ключевыми словами device host, что делает их вызываемыми как из кода хоста, так и из кода устройства. Эту поддержку можно отключить, определив EIGEN_NO_CUDA перед включением любого заголовка Eigen. Это может быть полезно для отключения некоторых предупреждений, когда файл .cu использует Eigen только на стороне хоста. Однако в обоих случаях векторизация SIMD хоста должна быть отключена в файлах .cu. Поэтому настоятельно рекомендуется правильно перенести все дорогостоящие вычисления хоста из ваших файлов .cu в обычные файлы .cpp.

Известные проблемы:

  • nvcc с MS Visual Studio не работает (патч приветствуется)
  • nvcc 5.5 с gcc-4.7 (или более поздней версией) имеет проблемы с стандартным файлом заголовка <limits>. Чтобы обойти эту проблему, вы можете добавить следующее перед включением других файлов:
    // workaround issue between gcc >= 4.7 and cuda 5.5
    #if (defined __GNUC__) && (__GNUC__>4 || __GNUC_MINOR__>=7)
      #undef _GLIBCXX_ATOMIC_BUILTINS
      #undef _GLIBCXX_USE_INT128
    #endif
    
  • На 64-битных системах Eigen использует long int в качестве типа по умолчанию для индексов и размеров. На устройстве CUDA было бы логично использовать 32-битный тип int. Однако, чтобы сохранить совместимость кода хоста и CUDA, это не может быть сделано автоматически Eigen, и поэтому пользователь должен определить EIGEN_DEFAULT_DENSE_INDEX_TYPE в int по всему своему коду (или только для кода CUDA, если нет взаимодействия между кодом хоста и кодом CUDA через объекты Eigen).

© Eigen.
Licensed under the MPL2 License.
https://eigen.tuxfamily.org/dox/TopicCUDA.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API