все. Я пытаюсь оптимизировать свое ядро 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
CUDA объединил доступ с вектором 2 1d. Конфигурация — 2d-блок и 2d-потоки. ⇐ C++
Программы на C++. Форум разработчиков
1729049321
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);
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79092372/cuda-coalesced-access-with-2-1d-vector-config-is-2d-block-and-2d-threads[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия