Мне нужно декодировать RLE в CUDA, и я пытаюсь подумать о наиболее эффективном способе расширения RLE в список со всеми моими значениями. Так что мои значения - 2, 3, 4, а мои пробеги - 3, 3, 1. Я хочу развернуть это до 2, 2, 2, 3, 3, 3, 4.Декодирование RLE в CUDA эффективно
Сначала я подумал, что могу использовать cudaMemset
, но теперь я уверен, что запускает ядро, и у меня есть CUDA Compute Capability 3.0, поэтому, даже если бы не было возможно неэффективно запускать новое ядро для каждой пары value/run, у меня нет динамического параллелизма, доступного для этого.
Так что я хочу знать, действительно ли это решение звучит, прежде чем я пойду и реализую его, так как есть очень много вещей, которые в конечном итоге не работают на CUDA, если вы не умны. Было бы разумным сделать ядро, которое будет звонить cudaMalloc
, а затем cudaMemCpy в пункт назначения? Я могу легко вычислить суммы префикса, чтобы знать, где копировать память и из нее, и сделать все мои чтения, по крайней мере, объединенными. Я беспокоюсь о том, что так много раз звонил cudaMalloc
и cudaMemCpy
.
Другой потенциальный вариант - записать эти значения в общую память и затем скопировать их в глобальную память. Я хочу знать, должно ли мое первое решение работать и быть эффективным, или если я должен сделать последнее.
Robert Вы один из самых удивительных людей вокруг. Вы решили каждую проблему, с которой я когда-либо сталкивался в CUDA. Спасибо! – flips