HashMap в OpenCL?
Можно ли создать простую хэш-карту в OpenCL? Например, тот, где все ключи имеют тип long
и все значения типа int
, и который никогда не должен быть изменен (т. е. передается ядру только для чтения).
Построение хэш-карты может занять некоторое время (это делается один раз на процессоре и никогда не должно быть изменено снова), но доступ на чтение будет частым, поэтому get(long key, *hashmap H)
должен быть дешевым.
Существуют ли какие-либо известные реализации для этого в OpenCL? Мне не удалось их найти. На случай, если мне придется писать один с нуля, какая реализация HashMap была бы наиболее подходящей для этого использования?
1 ответ:
Я думаю, что простая реализация хэш-таблицы с использованием открытой адресации может удовлетворить ваши требования здесь:
- по своей природе он хранится в одном буфере,и поэтому тривиально переносится в ядра.
- в этом случае легко записать логику геттера в ядро, особенно когда вам не нужна никакая синхронизация (только для чтения).
Итак, передаем буфер
long2
или буферstruct { long key; int val; }
, когда первый элемент является ключом, а второй значением, а также передайте размер буфера; теперь напишите обычный геттер с открытым адресом.