Không cân nhắc trƣớc khi sử dụng GPU có thể dẫn đến kết qủa không nhƣ ý muốn. Trong trƣờng hợp xấu nhất có thể cho kết quả sai hoặc tiêu tốn quá nhiều thời gian. Ví dụ, sẽ không hiệu quả nếu chạy thuật toán sử dụng một thread. Trong trƣờng hợp này phải thực hiện sao chép dữ liệu vào device, thực thi thuật toán trên device và sao chép dữ liệu trở lại host. Dữ liệu di chuyển giữa host và device là tốn nhất trong quá trình này, mặc dù với công nghệ ngày nay có thể cung cấp băng thông dữ liệu rất cao. Chúng ta cần nhận thấy rằng băng
thông trên device cũng nhƣ trên host lớn hơn nhiều so với băng trong kết nối giữa host và device.
Trƣớc khi viết một chƣơng trình GPU, cần phải xem xét các khía cạnh kết quả từ kiến trúc GPU. Kiểu lập trình GPU yêu cầu cách tiếp cận khác với lập trình CPU. Đó là do kiến trúc phần cứng và mô hình thực thi chƣơng trình. GPU hoạt động nhƣ một bộ xử lý song song với CPU. CPU rất mạnh trong thực thi mã tuần tự, trữ dữ liệu và xử lý luồng. Trong chƣơng trình GPU, CPU đóng vai trò nhƣ là đối tƣợng giám sát mã GPU. Nghĩa là CPU chỉ đảm nhận các hoạt động bộ nhớ cơ bản (cấp phát, giải phóng bộ nhớ GPU, chuyển dữ liệu giữa host và device) và gọi kernel. Các tính toán khác đƣợc thực hiện trong bộ nhớ GPU.
Có 4 chiến lƣợc thực thi chính để đạt đƣợc lợi ích thời gian lớn nhất từ GPGPU [3]:
- Tối đa hóa thực thi song song, - Tối ƣu hóa sử dụng bộ nhớ, - Tối ƣu hóa thực thi thread, - Tối ƣu hóa sử dụng chỉ lệnh.