[x]
Вход
.NET
AMD
ATI
BLAS
bruteforce
brute force
CUDA
GPGPU
gpgpu.ru
GPU Gems
Larrabee
MapReduce
MD5 crack
N-body
Nexus
NVidia
NVidia 8800
NVidia CUDA
NVidia G200
NVidia GTX280
NVidia Nexus
NVidia Tesla
OpenCL
search
signal processing
Sort
sparse matrices
Stream SDK
VISPL
VMWare
web
ВМиК МГУ
Москва
администрирование сайта
бенчмарки
блогосфера
вычисления
конкурсы
курсы
новости сайта
обработка изображений
подбор паролей
поиск
презентации
программирование GPU
работа
разное
сортировка
фильтрация трафика
численные методы
Navigation
Cвежие комментарии
-
1 week 4 days ago
-
3 weeks 1 day ago
-
3 weeks 2 days ago
-
3 weeks 2 days ago
-
3 weeks 2 days ago
-
3 weeks 5 days ago
-
4 weeks 3 days ago
-
4 weeks 6 days ago
-
5 weeks 1 day ago
-
5 weeks 1 day ago
Новое на форуме
Популярно
- Форумы NVidia CUDA: обзор за май (15,640)
- Как начать с самого начала работу с CUDA (13,083)
- GPGPU и видеокарты AMD (11,170)
- NVidia GTX 280, Tesla T10P (10,146)
- SGEMM на видеокарте и CPU, серия 6 (9,813)
Я думаю тут рано переходить на использование регистров. У вас чтение выражения из памяти в EvaluateTestCase не coaslesced, значит на порядок медленнее, чем могло бы быть. Для контроля достигнутой скорости доступа к памяти посчитайте общее количество байт ваш кернел читает и пишет в память, и поделите на общее время исполнения. Получится какая-то скорость в ГБ/c. Она должна быть близка к пиковой пропускной способности, обычно 80-90% пропускной способности шины (12.8ГБ/с на 8500GT). У вас будет гораздо меньше --- есть над чем работать.
Другое узкое место --- вы читаете одни и те же данные в соседних тредах независимо, то есть потребляете на один или несколько порядков больше пропускной способности памяти, чем надо. Одно решение: читать выражение через кеш (текстурную память, лучше линейную, 1D). Недостаток: у кэша большая задержка, несколько сот циклов. Другое решение: прочитать сначала выражение в shared memory, потом уже читать оттуда из разных тредов. В этом случае надо будет убедиться, что все треды одного блока работают с одним выражением. Можно использовать паддинг если это не так.
После того, как доступ в память эффективно организован и производительности ограничена пропускной способностью исполнения инструкций, будет имеет смысл оптимизировать доступ к shared memory и регистрам.