CUDA объединил доступ с вектором 2 1d. Конфигурация — 2d-блок и 2d-потоки.C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 CUDA объединил доступ с вектором 2 1d. Конфигурация — 2d-блок и 2d-потоки.

Сообщение Anonymous »

все. Я пытаюсь оптимизировать свое ядро ​​CUDA.
Я пытался сравнить все образцы со всеми сигнатурами (в основном проблема с рукопожатием).
В настоящее время я получаю доступ к массиву образцов и сигнатур в объединенный путь? Я не могу многое ссылаться на эту страницу, так как мой код не обращается к 2D-матрице.
(Объединенный доступ CUDA для двумерного блока)
Также в конце ядра Есть ли способ объединить мое чтение?
Спасибо всем за вашу любезную помощь. Впервые пишу на форуме. Если что-то не так с публикацией, сообщите мне.
Код приведен ниже
__global__ void matchKernel(const KSeqGPU* samples, const KSeqGPU* signatures, MatchResultGPU* matches, int numSamples, int numSignatures) {
// (0,0) (0,1) (0,2) ... (0,signature_count)
// (1,0) (1,1) (1,2) ... (1,signature_count)
// ...
// (sample_count,0) (sample_count,1) ... (sample_count,signature_count)
int sampleIdx = blockIdx.x * blockDim.x + threadIdx.x; // Column
int sigIdx = blockIdx.y * blockDim.y + threadIdx.y; // Row

if (sampleIdx < numSamples && sigIdx < numSignatures) {
const KSeqGPU& sample = samples[sampleIdx];
const KSeqGPU& signature = signatures[sigIdx];

// Check if the sample is long enough to contain the signature
if (sample.seq_len < signature.seq_len) {
return;
}

// Check if the sample contains the signature
for (int i = 0; i < sample.seq_len - signature.seq_len + 1; i++) {
bool matchFound = true;
for (int j = 0; j < signature.seq_len; j++) {
// If the character does not match, break
// Also consider wildcard
if (sample.seq[i + j] != signature.seq[j] && signature.seq[j] != 'N' && sample.seq[i + j] != 'N') {
matchFound = false;
break;
}
}
if (matchFound) {
float matchConfidence = calculateMatchConfidence(sample.qual, i, signature.seq_len);
matches[sampleIdx * numSignatures + sigIdx] = MatchResultGPU(sampleIdx, sigIdx, matchConfidence);
return;
}
}

matches[sampleIdx * numSignatures + sigIdx] = MatchResultGPU(-1, -1, 0);
}
}


Подробнее здесь: https://stackoverflow.com/questions/790 ... 2d-threads
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»