![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
Bitman |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 7.6.2005 Репутация: нет Всего: нет |
Проблема с вроде-бы элементарным кодом на CUDA. Высчитывает среднее арифметическое по массиву.
каждый элемент переводится во float и делится на кол-во элементов, это значение помещается в shared memory. Затем делается scan, все данные в shared memory складываются, результат в последней ячейке. Потом последняя задача в блоке этот результат добавляет через atomicAdd к переменной в глобальной памяти. Всё это замечательно работает при компиляции в Debug режиме. Используется CUDA 7.0 и VisualStudio 10. Как только переключаю на Release, начинает считать некорректно, а точнее среднее значение получается капельку меньше, чем то, что должно быть, например при среднем 1500 на 0.5-0.7 меньше. Причём эта капелька намного разная от запуска к запуску. Если в Release в настройках CUDA C/C++ , Device включить параметр Generate GPU debug information = Yes (-G), то Release код начинает работать корректно, но раза в 2 примерно медленней. Честно говоря, не знаю уже куда копать :( Вот этот код: P.S. Могу выслать проект целиком.
|
|||
|
||||
Bitman |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 7.6.2005 Репутация: нет Всего: нет |
Продолжаю копать. Где-то всё равно есть гонки в алгоритме :(
Вот результаты тестовых прогонов версии Release. Первое число считается serial алгоритмом, сначала идёт суммирование массива 1M в double, а в конце делим на 1M. Второе число тоже serial, только тут каждое делится на 1M, а потом всё это суммируется. Третье число - считается на CUDA аналогично 2-му варианту. Явно где-то гонки, но где?!
|
|||
|
||||
Bitman |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 7.6.2005 Репутация: нет Всего: нет |
Ларчик просто открывался, нужен был барьер внутри цикла. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |