Mới mở máy lên vào 4rum thấy cái này hoảng quá
Ai nói với mấy chú là GPU không có cache ?
Biết thì thưa thót, không biết thì dựa cột mà nghe. Không nên nói bừa nói ẩu.
=================================================
Sự khác nhau trong tính toán song song giữa CPU và GPU
Tốc độ tăng trưởng tần số CPU hiện nay đang bị hạn chế bởi các nguyên nhân vật lý và tiêu thụ điện năng cao. Hiệu năng của chúng thường được cải thiện bằng cách gia tăng số lõi. Các bộ xử lý (BXL) đa chức năng ngày nay có thể có đến 4 lõi (tốc độ tăng thêm sẽ không nhanh), và chúng được thiết kế cho các ứng dụng thông thường, sử dụng MIMD (multiple instructions / multiple data) (đa lệnh / đa dữ liệu). Mỗi lõi hoạt động độc lập với các lõi khác, thực thi những lệnh khác nhau trong những tiến trình (process) khác nhau.
Các tính năng vector đặc biệt (SSE2 và SSE3) dành cho vector 4 thành phần (dấu phẩy động độ chính xác đơn) và 2 thành phần (độ chính xác kép) đã xuất hiện trong các BXL đa năng là do các đòi hỏi đối với những ứng dụng đồ họa ngày một gia tăng. Điều này giải thích tại sao trong một số tác vụ nhất định, sử dụng GPU lại thích hợp hơn là CPU, bởi vì chúng vốn được thiết kế dành cho nó.
Ví dụ, những con chip của Nvidia dựa trên một BXL với từ 8 đến 10 lõi cùng hàng trăm ALU, vài ngàn thanh ghi và một số bộ nhớ chia sẻ. Bên cạnh đó, một chiếc card đồ họa còn chứa một bộ nhớ chung tốc độ cao mà tất cả các lõi, bộ nhớ cục bộ của lõi và bộ nhớ đặc biệt cho hằng số đều có thể truy cập vào.
Quan trọng nhất, các lõi xử lý trong GPU này là lõi SIMD (single instruction / multiple data) (đơn lệnh / đa dữ liệu). Và chúng thực thi cùng một chuỗi lệnh đồng thời. Đây là phương pháp lập trình chung đối với các thuật toán đồ họa và nhiều công tác khoa học, nhưng nó đòi hỏi phải lập trình cụ thể. Đổi lại, cách tiếp cận này cho phép gia tăng số lượng các đơn vị thực thi bằng cách đơn giản hóa chúng.
Bây giờ, hãy cùng liệt kê những khác biệt chính giữa kiến trúc của CPU và GPU. Lõi của CPU được thiết kế để thực thi một luồng (thread) duy nhất các lệnh liên tiếp với tốc độ tối đa, trong khi GPU lại được thiết kế nhằm thực hiện nhanh chóng nhiều luồng lệnh một lúc. Các BXL đa chức năng được tối ưu hóa để cho hiệu năng cao với một luồng lệnh đơn xử lý các số nguyên và dấu phẩy động. Cùng việc truy cập bộ nhớ ngẫu nhiên.
Để nâng cao hiệu năng, các kỹ sư CPU luôn cố gắng làm cho sản phẩm của họ thực hiện một lúc được nhiều lệnh nhất có thể. Vì vậy, BXL Pentium của Intel đã giới thiệu việc thực thi siêu vô hướng với 2 lệnh mỗi chu kỳ, còn Pentium Pro thì bổ sung thêm khả năng thực thi phi thứ tự. Tuy nhiên, việc thực thi song song đối với luồng lệnh liên tiếp này có một số hạn chế cơ bản, và gia tăng số lượng các đơn vị thực thi sẽ không khiến cho hiệu năng cũng tăng lên tương ứng.
GPU có khả năng thực hiện những lệnh này song song ngay từ đầu. Một GPU nhận được một nhóm các đa giác, thực hiện tất cả những thao tác cần thiết, và rồi xuất ra các điểm ảnh (pixel). Các đa giác và điểm ảnh này được xử lý một cách độc lập. Chúng có thể được xử lý song song, riêng rẽ với nhau. Do bản chất song song nguyên thủy này của GPU, nó dùng đến rất nhiều các đơn vị thực thi. Không giống như luồng lệnh tuần tự cho CPU, những đơn vị này dễ dàng tải đầy. Bên cạnh đó, GPU hiện đại cũng có thể thực thi nhiều hơn một lệnh duy nhất cho mỗi chu kỳ (dual issue). Ví dụ, trong một số điều kiện, kiến trúc Tesla thực thi MAD+MUL hay MAD+SFU đồng thời.
GPU còn khác với CPU trong các nguyên tắc truy cập vào bộ nhớ. Ở GPU, việc này có thể đoán trước dễ dàng – nếu như một điểm ảnh kết cấu được đọc từ bộ nhớ thì chẳng bao lâu sẽ đến lượt những điểm xung quanh nó. Cũng tương tự với ghi dữ liệu – một điểm ảnh mà được ghi vào frame buffer thì vài chu kỳ sau các điểm lân cận cũng sẽ được ghi. Vì vậy lối tổ chức bộ nhớ này khác với những gì được sử dụng trong CPU. Không giống như các BXL đa năng, GPU đơn giản là không cần đến một cache lớn. Kết cấu yêu cầu chỉ vài kilobyte (lên đến 128-256 KB trong các GPU hiện đại).
Cách hoạt động của bộ nhớ GPU và CPU cũng khác nhau. Ví dụ, không phải tất cả mọi CPU đều được tích hợp bộ phận quản lý bộ nhớ (memory controller), trong khi thông thường GPU nào cũng có vài cái, lên đến 8 kênh 64-bit trong GT200 của Nvidia. Ngoài ra, card đồ họa sử dụng bộ nhớ nhanh hơn, do đó GPU sở hữu băng thông bộ nhớ cao hơn nhiều, một điều thích hợp cho điện toán song song với những luồng dữ liệu khổng lồ.
Các bộ xử lý đa chức năng tiêu tốn transistor và diện tích đế của chúng vào các bộ đệm lệnh, phần cứng dự đoán rẽ nhánh, và một khối lượng rất lớn cache trên chip. Tất cả các đơn vị này đều cần thiết nhằm tăng tốc thực hiện chỉ một vài thread. GPU tiêu tốn các transistor cho hàng loạt đơn vị thực thi, phân phối lệnh, một lượng nhỏ bộ nhớ chia sẻ và bộ điều khiển bộ nhớ cho một số kênh. Toàn bộ những thứ trên không giúp đẩy nhanh việc thi hành của từng thread riêng biệt, nhưng nó cho phép GPU làm việc với vài ngàn thread một lúc, được con chip xử lý song song, đòi hỏi băng thông bộ nhớ cao.
Hãy cùng phân tích những điểm khác nhau trong cache. CPU sử dụng cache để tăng hiệu năng của chúng nhờ việc giảm độ trễ truy cập bộ nhớ, còn GPU sử dụng cache hoặc bộ nhớ chia sẻ để gia tăng băng thông bộ nhớ. CPU giảm bớt độ trễ truy cập bộ nhớ nhờ vào cache lớn cũng như các dự đoán rẽ nhánh. Các bộ phận này chiếm gần hết diện tích đế và tiêu thụ nhiều điện năng. GPU giải quyết bài toán độ trễ truy cập bộ nhớ bằng cách thực thi hàng ngàn thread song song – khi một thread đang chờ dữ liệu từ bộ nhớ, GPU có thể thực thi một thread khác mà không bị trễ.
Việc vận hành đa luồng cũng tồn tại nhiều khác biệt. Một lõi CPU có thể thực thi 1-2 luồng, trong khi GPU có thể duy trì tới 1024 thread trên mỗi lõi xử lý (trong một GPU thường có vài cái như thế). Chuyển đổi từ thread này sang thread kia tốn của CPU hàng trăm chu kỳ, trong khi GPU chuyển đổi vài thread mỗi chu kỳ.
Ngoài ra, CPU sử dụng các đơn vị vector SIMD (một lệnh được thực thi trên nhiều dữ liệu), còn GPU sử dụng SIMT (đơn lệnh, đa luồng) cho việc xử lý thread vô hướng. SIMT không yêu cầu lập trình viên phải chuyển đổi dữ liệu sang vector đồng thời cho phép rẽ nhánh tùy ý trong các thread.
Nói tóm lại, không giống như CPU hiện đại, chip đồ họa được thiết kế ra cho điện toán song song với nhiều phép toán số học. Trong GPU, lượng transistor hoạt động hiệu quả cao hơn nhiều – chúng xử lý các dãy dữ liệu thay vì kiểm soát dòng chảy tuần tự của một vài luồng điện toán. Biểu đồ dưới đây minh họa từng bộ phận khác nhau chiếm không gian trên CPU và GPU như thế nào.
Như thế, phân phối các thuật toán cho hàng trăm đơn vị thực thi song song là xương sống của việc sử dụng hiệu quả GPU cho các tính toán khoa học và phi đồ họa khác. Ví dụ, rất nhiều các ứng dụng mô hình phân tử tương thích hoàn hảo với điện toán GPU: chúng đòi hỏi sức mạnh xử lý cao, và chúng thuận tiện cho việc tính toán song song. Và sử dụng vài ba GPU sẽ còn mang đến nhiều sức mạnh tính toán hơn nữa cho những công việc như vậy.
Dùng GPU để tính toán đem lại kết quả tuyệt vời đối với các thuật toán sử dụng xử lý dữ liệu song song. Hay nói rõ hơn, khi cùng một chuỗi các thao tác toán học được áp dụng với một khối lượng lớn dữ liệu. Kết quả tốt nhất đạt được nếu như số lượng lệnh số học vượt trội so với số lần gọi truy cập vào bộ nhớ. Trong việc kiểm soát dòng chảy, nó có những đòi hỏi thấp hơn. Bên cạnh đó, một mật độ cao các thuật toán và khối lượng dữ liệu đã loại bỏ sự cần thiết của những bộ đệm (cache) lớn, như đối với CPU.
Như là kết quả của tất cả những khác biệt mô tả ở trên, hiệu năng trên lý thuyết của các BXL đồ họa cao hơn nhiều so với hiệu năng của CPU. Nvidia xuất bản đồ thị sau đây cho thấy sự tăng trưởng hiệu năng của CPU/GPU trong những năm qua:
Những dữ liệu này, tất nhiên, không phải là không có kèm theo một chút tiểu xảo. Trên thực tế, CPU đạt tới các kết quả lý thuyết dễ dàng hơn nhiều. Ngoài ra, những con số được công bố ở đây là độ chính xác đơn cho trường hợp của GPU và độ chính xác kép cho trường hợp của CPU. Dù sao, độ chính xác đơn tỏ ra hiệu quả trong một số tác vụ song song, và sự khác biệt hiệu năng giữa các BXL đa năng và đồ họa là rất lớn. Vì vậy, trò này cũng đáng để chơi.
================================================
Trên đó là bài viết được một chú dịch lại theo cái này:
http://ixbtlabs.com/articles3/video/cuda-1-p1.html
trong đó giảng giải khá kỹ và hay về cuda cũng như GPU, CPU cho những ai cần.
Bên dưới là file .ppt về GPU Cache khá chi tiết.
GPU Cache.zip
===============================================
Lời khuyên cho các bạn là: Thông tin trên web, 4rum... trước khi đọc phải xem nguồn gốc, xem nó xất phát từ đâu, từ ai.
================================================
PS:
Cái này chú trách anh ác anh chịu, vì phải nói để tránh sai lạc kiến thức
tội nghiệp, mấy ngày trời mò mẫm vừa lú ra đã bị dập xẹp lép
Nếu muốn biết kỹ xem coi GPU có hay GPU không có cache thì vào http://forums.nvidia.com nói là GPU không có cache xem thằng admin của nvidia nó có cho vài hòn đá hay không
Ai nói với mấy chú là GPU không có cache ?
Biết thì thưa thót, không biết thì dựa cột mà nghe. Không nên nói bừa nói ẩu.
=================================================
Sự khác nhau trong tính toán song song giữa CPU và GPU
Tốc độ tăng trưởng tần số CPU hiện nay đang bị hạn chế bởi các nguyên nhân vật lý và tiêu thụ điện năng cao. Hiệu năng của chúng thường được cải thiện bằng cách gia tăng số lõi. Các bộ xử lý (BXL) đa chức năng ngày nay có thể có đến 4 lõi (tốc độ tăng thêm sẽ không nhanh), và chúng được thiết kế cho các ứng dụng thông thường, sử dụng MIMD (multiple instructions / multiple data) (đa lệnh / đa dữ liệu). Mỗi lõi hoạt động độc lập với các lõi khác, thực thi những lệnh khác nhau trong những tiến trình (process) khác nhau.
Các tính năng vector đặc biệt (SSE2 và SSE3) dành cho vector 4 thành phần (dấu phẩy động độ chính xác đơn) và 2 thành phần (độ chính xác kép) đã xuất hiện trong các BXL đa năng là do các đòi hỏi đối với những ứng dụng đồ họa ngày một gia tăng. Điều này giải thích tại sao trong một số tác vụ nhất định, sử dụng GPU lại thích hợp hơn là CPU, bởi vì chúng vốn được thiết kế dành cho nó.
Ví dụ, những con chip của Nvidia dựa trên một BXL với từ 8 đến 10 lõi cùng hàng trăm ALU, vài ngàn thanh ghi và một số bộ nhớ chia sẻ. Bên cạnh đó, một chiếc card đồ họa còn chứa một bộ nhớ chung tốc độ cao mà tất cả các lõi, bộ nhớ cục bộ của lõi và bộ nhớ đặc biệt cho hằng số đều có thể truy cập vào.
Quan trọng nhất, các lõi xử lý trong GPU này là lõi SIMD (single instruction / multiple data) (đơn lệnh / đa dữ liệu). Và chúng thực thi cùng một chuỗi lệnh đồng thời. Đây là phương pháp lập trình chung đối với các thuật toán đồ họa và nhiều công tác khoa học, nhưng nó đòi hỏi phải lập trình cụ thể. Đổi lại, cách tiếp cận này cho phép gia tăng số lượng các đơn vị thực thi bằng cách đơn giản hóa chúng.
Bây giờ, hãy cùng liệt kê những khác biệt chính giữa kiến trúc của CPU và GPU. Lõi của CPU được thiết kế để thực thi một luồng (thread) duy nhất các lệnh liên tiếp với tốc độ tối đa, trong khi GPU lại được thiết kế nhằm thực hiện nhanh chóng nhiều luồng lệnh một lúc. Các BXL đa chức năng được tối ưu hóa để cho hiệu năng cao với một luồng lệnh đơn xử lý các số nguyên và dấu phẩy động. Cùng việc truy cập bộ nhớ ngẫu nhiên.
Để nâng cao hiệu năng, các kỹ sư CPU luôn cố gắng làm cho sản phẩm của họ thực hiện một lúc được nhiều lệnh nhất có thể. Vì vậy, BXL Pentium của Intel đã giới thiệu việc thực thi siêu vô hướng với 2 lệnh mỗi chu kỳ, còn Pentium Pro thì bổ sung thêm khả năng thực thi phi thứ tự. Tuy nhiên, việc thực thi song song đối với luồng lệnh liên tiếp này có một số hạn chế cơ bản, và gia tăng số lượng các đơn vị thực thi sẽ không khiến cho hiệu năng cũng tăng lên tương ứng.
GPU có khả năng thực hiện những lệnh này song song ngay từ đầu. Một GPU nhận được một nhóm các đa giác, thực hiện tất cả những thao tác cần thiết, và rồi xuất ra các điểm ảnh (pixel). Các đa giác và điểm ảnh này được xử lý một cách độc lập. Chúng có thể được xử lý song song, riêng rẽ với nhau. Do bản chất song song nguyên thủy này của GPU, nó dùng đến rất nhiều các đơn vị thực thi. Không giống như luồng lệnh tuần tự cho CPU, những đơn vị này dễ dàng tải đầy. Bên cạnh đó, GPU hiện đại cũng có thể thực thi nhiều hơn một lệnh duy nhất cho mỗi chu kỳ (dual issue). Ví dụ, trong một số điều kiện, kiến trúc Tesla thực thi MAD+MUL hay MAD+SFU đồng thời.
GPU còn khác với CPU trong các nguyên tắc truy cập vào bộ nhớ. Ở GPU, việc này có thể đoán trước dễ dàng – nếu như một điểm ảnh kết cấu được đọc từ bộ nhớ thì chẳng bao lâu sẽ đến lượt những điểm xung quanh nó. Cũng tương tự với ghi dữ liệu – một điểm ảnh mà được ghi vào frame buffer thì vài chu kỳ sau các điểm lân cận cũng sẽ được ghi. Vì vậy lối tổ chức bộ nhớ này khác với những gì được sử dụng trong CPU. Không giống như các BXL đa năng, GPU đơn giản là không cần đến một cache lớn. Kết cấu yêu cầu chỉ vài kilobyte (lên đến 128-256 KB trong các GPU hiện đại).
Cách hoạt động của bộ nhớ GPU và CPU cũng khác nhau. Ví dụ, không phải tất cả mọi CPU đều được tích hợp bộ phận quản lý bộ nhớ (memory controller), trong khi thông thường GPU nào cũng có vài cái, lên đến 8 kênh 64-bit trong GT200 của Nvidia. Ngoài ra, card đồ họa sử dụng bộ nhớ nhanh hơn, do đó GPU sở hữu băng thông bộ nhớ cao hơn nhiều, một điều thích hợp cho điện toán song song với những luồng dữ liệu khổng lồ.
Các bộ xử lý đa chức năng tiêu tốn transistor và diện tích đế của chúng vào các bộ đệm lệnh, phần cứng dự đoán rẽ nhánh, và một khối lượng rất lớn cache trên chip. Tất cả các đơn vị này đều cần thiết nhằm tăng tốc thực hiện chỉ một vài thread. GPU tiêu tốn các transistor cho hàng loạt đơn vị thực thi, phân phối lệnh, một lượng nhỏ bộ nhớ chia sẻ và bộ điều khiển bộ nhớ cho một số kênh. Toàn bộ những thứ trên không giúp đẩy nhanh việc thi hành của từng thread riêng biệt, nhưng nó cho phép GPU làm việc với vài ngàn thread một lúc, được con chip xử lý song song, đòi hỏi băng thông bộ nhớ cao.
Hãy cùng phân tích những điểm khác nhau trong cache. CPU sử dụng cache để tăng hiệu năng của chúng nhờ việc giảm độ trễ truy cập bộ nhớ, còn GPU sử dụng cache hoặc bộ nhớ chia sẻ để gia tăng băng thông bộ nhớ. CPU giảm bớt độ trễ truy cập bộ nhớ nhờ vào cache lớn cũng như các dự đoán rẽ nhánh. Các bộ phận này chiếm gần hết diện tích đế và tiêu thụ nhiều điện năng. GPU giải quyết bài toán độ trễ truy cập bộ nhớ bằng cách thực thi hàng ngàn thread song song – khi một thread đang chờ dữ liệu từ bộ nhớ, GPU có thể thực thi một thread khác mà không bị trễ.
Việc vận hành đa luồng cũng tồn tại nhiều khác biệt. Một lõi CPU có thể thực thi 1-2 luồng, trong khi GPU có thể duy trì tới 1024 thread trên mỗi lõi xử lý (trong một GPU thường có vài cái như thế). Chuyển đổi từ thread này sang thread kia tốn của CPU hàng trăm chu kỳ, trong khi GPU chuyển đổi vài thread mỗi chu kỳ.
Ngoài ra, CPU sử dụng các đơn vị vector SIMD (một lệnh được thực thi trên nhiều dữ liệu), còn GPU sử dụng SIMT (đơn lệnh, đa luồng) cho việc xử lý thread vô hướng. SIMT không yêu cầu lập trình viên phải chuyển đổi dữ liệu sang vector đồng thời cho phép rẽ nhánh tùy ý trong các thread.
Nói tóm lại, không giống như CPU hiện đại, chip đồ họa được thiết kế ra cho điện toán song song với nhiều phép toán số học. Trong GPU, lượng transistor hoạt động hiệu quả cao hơn nhiều – chúng xử lý các dãy dữ liệu thay vì kiểm soát dòng chảy tuần tự của một vài luồng điện toán. Biểu đồ dưới đây minh họa từng bộ phận khác nhau chiếm không gian trên CPU và GPU như thế nào.
Như thế, phân phối các thuật toán cho hàng trăm đơn vị thực thi song song là xương sống của việc sử dụng hiệu quả GPU cho các tính toán khoa học và phi đồ họa khác. Ví dụ, rất nhiều các ứng dụng mô hình phân tử tương thích hoàn hảo với điện toán GPU: chúng đòi hỏi sức mạnh xử lý cao, và chúng thuận tiện cho việc tính toán song song. Và sử dụng vài ba GPU sẽ còn mang đến nhiều sức mạnh tính toán hơn nữa cho những công việc như vậy.
Dùng GPU để tính toán đem lại kết quả tuyệt vời đối với các thuật toán sử dụng xử lý dữ liệu song song. Hay nói rõ hơn, khi cùng một chuỗi các thao tác toán học được áp dụng với một khối lượng lớn dữ liệu. Kết quả tốt nhất đạt được nếu như số lượng lệnh số học vượt trội so với số lần gọi truy cập vào bộ nhớ. Trong việc kiểm soát dòng chảy, nó có những đòi hỏi thấp hơn. Bên cạnh đó, một mật độ cao các thuật toán và khối lượng dữ liệu đã loại bỏ sự cần thiết của những bộ đệm (cache) lớn, như đối với CPU.
Như là kết quả của tất cả những khác biệt mô tả ở trên, hiệu năng trên lý thuyết của các BXL đồ họa cao hơn nhiều so với hiệu năng của CPU. Nvidia xuất bản đồ thị sau đây cho thấy sự tăng trưởng hiệu năng của CPU/GPU trong những năm qua:
Những dữ liệu này, tất nhiên, không phải là không có kèm theo một chút tiểu xảo. Trên thực tế, CPU đạt tới các kết quả lý thuyết dễ dàng hơn nhiều. Ngoài ra, những con số được công bố ở đây là độ chính xác đơn cho trường hợp của GPU và độ chính xác kép cho trường hợp của CPU. Dù sao, độ chính xác đơn tỏ ra hiệu quả trong một số tác vụ song song, và sự khác biệt hiệu năng giữa các BXL đa năng và đồ họa là rất lớn. Vì vậy, trò này cũng đáng để chơi.
================================================
Trên đó là bài viết được một chú dịch lại theo cái này:
http://ixbtlabs.com/articles3/video/cuda-1-p1.html
trong đó giảng giải khá kỹ và hay về cuda cũng như GPU, CPU cho những ai cần.
Bên dưới là file .ppt về GPU Cache khá chi tiết.
GPU Cache.zip
===============================================
Lời khuyên cho các bạn là: Thông tin trên web, 4rum... trước khi đọc phải xem nguồn gốc, xem nó xất phát từ đâu, từ ai.
================================================
PS:
Cái này chú trách anh ác anh chịu, vì phải nói để tránh sai lạc kiến thức
tội nghiệp, mấy ngày trời mò mẫm vừa lú ra đã bị dập xẹp lép
Nếu muốn biết kỹ xem coi GPU có hay GPU không có cache thì vào http://forums.nvidia.com nói là GPU không có cache xem thằng admin của nvidia nó có cho vài hòn đá hay không
Comment