Я новичок в CUDA и пытаюсь выполнить некоторую обработку большого количества массивов. Каждый массив представляет собой массив из примерно 1000 символов (а не строку, просто сохраненную как символы), и их может быть до 1 миллиона из них, поэтому около 1 gb данных, которые будут переданы. Эти данные уже загружены в память, и у меня есть указатель на каждый массив, но я не думаю, что могу полагаться на все последовательные данные в памяти, поэтому я не могу просто передать все это одним вызовом.Как лучше перенести большое количество массивов символов на GPU?
В настоящее время я сделал первый шаг с ним с помощью тяги и основал свое решение на this message ... Я создал структуру со статическим вызовом, которая выделяет всю память, а затем каждый отдельный конструктор копирует этот массив и У меня есть вызов преобразования, который принимает структуру с указателем на массив устройств.
Моя проблема в том, что это, очевидно, очень медленно, поскольку каждый массив копируется индивидуально. Мне интересно, как быстрее передавать эти данные.
this question (вопрос в основном не связан, но я думаю, что пользователь пытается сделать что-то подобное). Talonmies предлагает, чтобы они пытались использовать zip-итератор, но я не вижу, как это поможет передать большое количество массивы.
Я также только что узнал о cudaMemcpy2DToArray и cudaMemcpy2D при написании этого вопроса, так что, возможно, это ответ, но я не вижу сразу, как они будут работать, поскольку ни один из них не считает указатели указателями в качестве входных данных ...
Любые предложения приветствуются ...
Если вам не нужна вся эта память в вашем ядре немедленно.Вы можете скопировать только часть его с синхронизированной операцией копирования и другой частью в асинхронной копии. Можете ли вы применить алгоритм для этого механизма копирования? – geek
Ум, я не уверен, алгоритм работает так, что каждый массив может обрабатываться независимо, поэтому я пытаюсь распараллелить его на графическом процессоре. Я думаю, это зависит от того, какое максимальное количество потоков доступно на графическом процессоре, а потом да, я могу просто перенести это множество массивов, а затем скопировать других, пока они обрабатываются. – JSoet
Я решил решить, что лучшим методом было просто не использовать толчок вообще и просто переустановить память (что означает, что я должен сделать ее копию) в смежный массив, который можно перенести сразу. Спасибо тем, кто ответил. – JSoet