Tối ƣu hóa sử dụng bộ nhớ

Một phần của tài liệu Lập trình song song trên nền đơn vị xử lý đồ họa và ứng dụng (Trang 26 - 27)

Chiến lƣợc đầu tiên của việc tối ƣu hóa sử dụng bộ nhớ là giảm thiểu việc chuyển dữ liệu giữa host và device. Băng thông chuyển giữa host và device nhỏ hơn rất nhiều so với chuyển dữ liệu trong device và host. Tiếp đến là việc tối ƣu truy cập bộ nhớ toàn cục. Nên dùng bộ nhớ chia sẽ, kết hợp với bộ nhớ toàn cục.

Bộ nhớ chia sẻ làm việc giống L1cache trong một bộ đa xử lý và hầu nhƣ có chi phí truy cập bằng không, vì thế rất nhanh. Mỗi khối thread truy cập bộ nhớ chia sẻ của nó. Tối ƣu gồm chuyển dữ liệu từ bộ nhớ toàn cục sang bộ nhớ chia sẽ, thực hiện các tính toán trên dữ liệu của bộ nhớ chia sẽ, sau đó chuyển kết quả ngƣợc lại bộ nhớ toàn cục. Một điều quan trọng là, truy cập đến bộ nhớ chia sẻ phải đƣợc tổ chức hợp lý để tránh xung đột, vì bộ nhớ chia sẻ có thể truy cập song song bởi nhiều thread. Xung đột truy cập giữa các thread có thể dẫn đến thực thi tuần tự các yêu cầu bộ nhớ và làm mất hiệu suất tính toán.

Truy cập đến bộ nhớ toàn cục độ trễ rất lớn (hàng trăm chu kỳ đồng hồ), vì thế phải cẩn thận khi làm việc với dữ liệu trên bộ nhớ này. Hợp nhất truy cập bộ nhớ nghĩa là đọc từ một tập địa chỉ liên tục phải tƣơng ứng với tổ chức thread (số định danh thread). Hợp nhất truy cập bộ nhớ là vấn đề phụ thuộc thiết bị và không có chiến lƣợc chung.

Kỹ thuật tối ƣu bộ nhớ tiếp theo là sử dụng bộ nhớ constant và texture. Bộ nhớ constant và texture là bộ nhớ chỉ đọc (từ thiết bị-device), có thể bộ nhớ đệm, nên truy cập loại bộ nhớ này tƣơng đối nhanh. Ví dụ, để tiết kiệm bộ nhớ chia sẽ, chúng ta lƣu trữ một số đối số của kernel vào trong bộ nhớ constant. Bộ nhớ texture dùng cho các thao tác đồ họa.

Một phần của tài liệu Lập trình song song trên nền đơn vị xử lý đồ họa và ứng dụng (Trang 26 - 27)