2011-12-20 2 views
0

У меня проблема с программой, которую я пишу, используя CUDA. У меня есть входной массив и выходной массив, который мне нужно скопировать в память устройства. Проблема в том, что оба массива вместе слишком велики, чтобы вписаться в память устройства. То, что я сейчас делаю, - это разделение как входного, так и выходного массивов и последовательное выполнение ядра для обеих частей.

Для этого подхода к работе я использую промежуточный массив, поскольку cudaMemcpyFromArray и cudaMemcpyToArray работают только для текстурной памяти. Это приводит к ненужным операциям копирования памяти. Кто-нибудь знает более эффективный способ?Эффективная память большого входа в CUDA?

ответ

0

Вы можете использовать копию асинхронной памяти, если операции на одном сегменте массива не зависят от операций над другим сегментом массива. Это поможет вам копировать вещи взад и вперед при выполнении вычислений. Из Cuda с руководством по программированию:

некоторых вызовы функций являются асинхронными: Управление возвращаются в хосте нити перед тем, как устройство завершило поставленную задачу. Это:

  • Kernel запускает;
  • Память устройства к памяти устройства;
  • Операции с памятью памяти устройства объемом 64 КБ или менее;
  • Копии памяти, выполняемые функциями, которые имеют суффикс Async;
  • Функции вызова функции памяти.

Надеюсь, что это поможет брату. Вы также можете рассмотреть возможность сжатия массивов с использованием рисового кодирования, чтобы они соответствовали друг другу.

Смежные вопросы