2011-12-14 2 views
0

У меня есть кривой следующим образом:Cuda линейная интерполяция с использованием текстур

float points[] = {1, 4, 6, 9, 14, 25, 69}; 
float images[] = {0.3, 0.4, 0.7, 0.9, 1, 2.5, 5.3}; 

Для того, чтобы интерполировать скажем F (3) Я хотел бы использовать линейную интерполяцию между 1 и 4 Для того, чтобы интерполировать скажем п (15) Я бы применил двоичный поиск по массиву точек и получил нижний бит, который равен 25, и рассмотрим интерполяцию в интервале [14,25] и т. Д.

Я выяснил, что этот метод делает мое устройство функция очень медленная. Я слышал, что могу использовать текстурную память и tex1D, чтобы сделать это! возможно, даже если точки [] не являются равномерными (приращение постоянным шагом)

Любая идея?

ответ

1

Похоже, эту проблему можно разбить на две части:

  1. использовать массив точек для преобразования значения х в е (х) к индексу с плавающей точкой в ​​диапазоне от 0 до 7 (требуется бинарный поиск по точки [])
  2. использования, что с плавающей точкой индекса, чтобы получить линейно интерполированное значение из массива изображений

Cuda текстура память может сделать шаг-очень быстро. Я предполагаю, однако, что большую часть времени в вашем ядре тратится на шаге 1, и я не думаю, что текстурная память может вам помочь.

Если вы еще не пользуетесь общей памятью, перемещение ваших массивов в общую память даст вам гораздо большее ускорение, чем использование памяти текстур. На последнем оборудовании имеется 48 тыс. Разделяемой памяти, поэтому, если ваши массивы составляют менее 24 тыс. (6 тыс. Элементов), они должны входить в общую память. Шаг 1 может принести большую пользу из общей памяти, поскольку он требует несмежных чтений точек [], что очень медленно в глобальной памяти.

Если ваши массивы не подходят в общей памяти, вы должны разбить свои массивы на равные по размеру части с 6k элементами каждый и назначить каждую часть блоку. Прочитайте каждый блок во всех точках, которые вы повторяете, и игнорируйте точку, если она не находится в части массива points [], хранящейся в ее общей памяти.

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