HashMap в OpenCL?


Можно ли создать простую хэш-карту в OpenCL? Например, тот, где все ключи имеют тип long и все значения типа int, и который никогда не должен быть изменен (т. е. передается ядру только для чтения).

Построение хэш-карты может занять некоторое время (это делается один раз на процессоре и никогда не должно быть изменено снова), но доступ на чтение будет частым, поэтому get(long key, *hashmap H) должен быть дешевым.

Существуют ли какие-либо известные реализации для этого в OpenCL? Мне не удалось их найти. На случай, если мне придется писать один с нуля, какая реализация HashMap была бы наиболее подходящей для этого использования?

1 3

1 ответ:

Я думаю, что простая реализация хэш-таблицы с использованием открытой адресации может удовлетворить ваши требования здесь:

  • по своей природе он хранится в одном буфере,и поэтому тривиально переносится в ядра.
  • в этом случае легко записать логику геттера в ядро, особенно когда вам не нужна никакая синхронизация (только для чтения).

Итак, передаем буфер long2 или буфер struct { long key; int val; }, когда первый элемент является ключом, а второй значением, а также передайте размер буфера; теперь напишите обычный геттер с открытым адресом.