Для оптимизации вам нужно объяснить, какие расчеты вы делаете.Наибольшую выгоду для производительности можно получить, сгруппировав свои расчеты в рабочие группы и предоставив им возможность работать с локальной памятью.Вам нужно уделять много внимания размеру вашей личной памяти (наименьшей) и локальной памяти (маленькой).
Как часто называется ваше ядро?Все ли ядра используют одни и те же данные?Можно подумать о буфере локальной памяти, где все потоки в рабочей группе считывают часть данных в локальную память и впоследствии делятся данными.Вам нужно уделить немного внимания синхронизации.
Я предлагаю взглянуть на примеры поставщиков SDK.Я знаю только nVidia SDK.Примеры там довольно сложные, но очень интересные для чтения.
Изменение на векторные типы, такие как float4, должно подходить для плат ATI.Говорят, что nVidia лучше всего работает со скалярами и внутренней оптимизацией компилятора.Это что-то для тонкой настройки позже с помощью профилировщика.Оптимизация памяти позволяет повысить производительность.