Здравсвуйте.
Пишу программу на CUDA C для исполнения на видеокарте ( параллельное программирование ), которая занимается обработкой изображений. Одна из особенной программирования на CUDA - крайне нежелательно использовать операторы условия.
Например для выполнения порогового преобразования пикселя, который принимает значения от 0 до 255. Вместо:
Код:
#define MAX 255
#define MIN 0
#define THRESHOLD 127
int x = 17;
if( x > THRESHOLD )
x = MAX;
else
x = MIN;
Используется:
Код:
int x = 17;
...
x = x / THRESHOLD;
x = x * MAX;
Оператор if-else заменен арифметическими операциями.
Это дает ускорение вычислений. Это особенность программирования в CUDA.
Возможно ли то же самое проделать для контроля выхода значения индекса пикселя за пределы изображения. Т.е. если изображения имеет размер 50 на 50 пикселей, как определить, что значение x, хранящее индекс пикселя не вышло за границы изображения, не используя оператор if, а арифметические операторы, пусть и несколько:
Код:
if( x<0 )
x = 0;
if( x>49 )
x = 49;
Нужно это для обработки краев изображения при его свертке ядром. Спасибо)