Я придумал решение для этого поста с использованием алгоритмического подхода. Мне было любопытно попробовать подход к таблице поиска, предложенный в одном из комментариев к посту. Я новичок в CUDA C и пытался найти примеры/информацию о том, как это можно сделать. У меня есть значения, хранящиеся в таблице ниже. Я знаю, что мне нужно связать каждый поток, чтобы вытащить каждое из 4 значений. Значения соответствуют индексам SubBlkIdxA, SubBlkIdxB, BlkIdxA и BlkIdxB соответственно для каждого потока. Как только они считываются из таблицы, они передаются функции для вычисления чего-либо.
Я знаю, что если я скажу m_aIdx[3][0], он пойдет {3,0,0,1,}, запись в таблице и прочитает первую запись «3». Чтобы прочитать каждую запись в этом месте по упомянутым выше индексам, я думаю так:
Моя таблица выглядит так:
static __constant__ int16 m_aIdx[64][4] =
{
{0,1,0,0,},
{2,3,0,0,},
{1,0,0,1,},
{3,0,0,1,},
{1,2,0,1,},
{3,2,0,1,},
and so on ... upto 64 entries
}
Функционируйте следующим образом:
static __device__ void func()
{
SubBlkIdxA = m_aIdx[3][0];
SubBlkIdxB = m_aIdx[3][1];
BlkIdxA = m_aIdx[3][2];
BlkIdxB = m_aIdx[3][3];
func1(SubBlkIdxA, SubBlkIdxB, BlkIdxA, BlkIdxB);
}
Меня тоже беспокоит скорость выполнения ядра. Итак, любопытно узнать, является ли этот метод хорошей практикой (эффективным способом создания индексов)?
m_aIdx
по индексам потоков/блоков) для неалгоритмического подхода. Почему бы вам не сравнить относительную скорость двух решений? - person Vitality   schedule 17.07.2013