Squeak.ru - шаблоны программирования

Сочетание MPI с C++11 и CUDA

Я пишу моделирование молекулярной динамики, и некоторые ядра будут вычисляться с помощью CUDA. Я начал свой код с простой реализации ЦП, используя некоторые функции С++ 11. Теперь, когда мне нужно добавить код CUDA, я должен использовать компиляторы, которые не поддерживают функции С++ 11 (gcc ‹= 4.6).

В моем make-файле я создаю объекты из всех cpp-файлов отдельно и в конце связываю их все вместе. Кроме того, мой код разделен таким образом, что можно было бы скомпилировать части без CUDA с помощью «современного» компилятора, а остальные части (с использованием CUDA) — с помощью более старого компилятора.

Теперь мой вопрос в том, нормально ли это или у меня могут возникнуть проблемы с этим способом?

17.04.2013

  • Небольшое примечание: вы можете использовать более поздние версии gcc с CUDA (например, я использую gcc 4.7.2 с CUDA 5.0). Однако, как вы сказали, вы не сможете использовать функции С++ 11 в коде, обрабатываемом nvcc. 17.04.2013
  • Насколько мне известно, это связано с изменением заголовочного файла CUDA, но у меня нет доступа для записи к этим файлам в кластерах. 17.04.2013
  • Да, это хорошая установка. Я использую его для всего своего кода (но не из-за C++11, а для того, чтобы иметь возможность комбинировать мой хост-код с любыми библиотеками, которые могут плохо взаимодействовать с предварительной обработкой CUDA). 17.04.2013
  • @tera Хорошо, спасибо, приятно знать. Я не знал, был ли это правильный способ сделать это. 17.04.2013

Ответы:


1

Я не знаю о Cuda, но я знаю, что связывание объектных файлов C++98 и C++11 вместе очень опасно, потому что экземпляры шаблона выпускаются только один раз в окончательный исполняемый файл. Дело в том, что ABI мог измениться.

Однажды я столкнулся с этой проблемой с std::complex<double>::real() и g++. Один из двух экземпляров вернул указатель на double, другой — на double istelf. Компоновщик выдал только один из двух экземпляров (тот, который возвращает двойники напрямую) в окончательный исполняемый файл, а вызывающий код C++98 впоследствии ошибочно принял двойники за указатели, что привело к segfault.

Почему это произошло, просто взгляните на <complex>: в зависимости от того, __cplusplus >= 201103L или нет, real() объявляется следующим образом:

constexpr _Tp real();

или таким образом:

const _Tp& real() const { return _M_real; }

Сомневаюсь, что примеров больше, чем просто std::complex.

28.06.2013
Новые материалы

Угловая структура архитектуры
Обратите внимание, что эта статья устарела, я решил создать новую с лучшей структурой и с учетом автономных компонентов: https://medium.com/@marekpanti/angular-standalone-architecture-b645edd0d54a..

«Данные, которые большинство людей используют для обучения своих моделей искусственного интеллекта, поставляются со встроенным…
Первоначально опубликовано HalkTalks: https://hacktown.com.br/blog/blog/os-dados-que-a-maioria-das-pessoas-usa-para-treinar-seus-modelos-de-inteligencia-artificial- ja-vem-com-um-vies-embutido/..

Сильный ИИ против слабого ИИ: различия парадигм искусственного интеллекта
В последние годы изучению и развитию искусственного интеллекта (ИИ) уделяется большое внимание и прогресс. Сильный ИИ и Слабый ИИ — две основные парадигмы в области искусственного интеллекта...

Правильный способ добавить Firebase в ваш проект React с помощью React Hooks
React + Firebase - это мощная комбинация для быстрого и безопасного создания приложений, от проверки концепции до массового производства. Раньше (знаете, несколько месяцев назад) добавление..

Создайте API с помощью Python FastAPI
Создание API с помощью Python становится очень простым при использовании пакета FastAPI. После установки и импорта вы можете создать приложение FastAPI и указать несколько конечных точек. Каждой..

Веселье с прокси-сервером JavaScript
Прокси-серверы JavaScript — это чистый сахар, если вы хотите создать некоторую общую логику в своих приложениях, чтобы облегчить себе жизнь. Вот один пример: Связь клиент-сервер Мы..

Получить бесплатный хостинг для разработчиков | Разместите свой сайт за несколько шагов 🔥
Статические веб-сайты — это веб-страницы с фиксированным содержанием и его постоянным содержанием. Но теперь статические сайты также обрабатывают динамические данные с помощью API и запросов...