Chapter 4 of 9Chương 4/9 7 min7 phút

CPU vs GPUCPU và GPU khác nhau ở đâu

A processor is planned the way an architect plans a house: first what it is for, then how many rooms it needs, and above all how people will move between them. The two best-known rooms on today’s chips, the CPU and the GPU, were designed for opposite jobs.

Thiết kế một bộ xử lý cũng giống như kiến trúc sư lên phương án cho một ngôi nhà: trước hết xác định nhà dùng để làm gì, rồi cần bao nhiêu phòng, và quan trọng nhất là đường đi lại giữa các phòng. Hai “căn phòng” nổi tiếng nhất trên chip ngày nay, CPU (Central Processing Unit) và GPU (Graphics Processing Unit), được thiết kế cho hai công việc trái ngược nhau.

In this chapter

Trong chương này

  • What a chip architect does, and why every unit is designed with its neighbours in mind
  • How a new chip starts as a high-level design before any unit is drawn in detail
  • The parts of a CPU: arithmetic units, control logic, branch prediction and a deep memory system
  • How a GPU trades that complexity for thousands of small, simple cores
  • Why one is called latency-oriented and the other throughput-oriented
  • Chip architect làm gì, và vì sao mỗi khối đều phải được thiết kế trong tương quan với các khối bên cạnh
  • Một con chip mới bắt đầu từ bản thiết kế tổng thể (high-level design) như thế nào, trước khi đi vào chi tiết từng khối
  • Các thành phần của CPU: ALU (Arithmetic Logic Unit), khối điều khiển, branch prediction (dự đoán rẽ nhánh) và memory hierarchy (hệ thống bộ nhớ nhiều tầng)
  • GPU đánh đổi sự phức tạp đó để có hàng nghìn lõi (core) nhỏ và đơn giản ra sao
  • Vì sao một bên được gọi là thiết kế hướng latency (độ trễ), còn bên kia hướng throughput (thông lượng)

Designing a chip is like designing a house

Thiết kế chip như thiết kế một ngôi nhà

Most people have a rough idea of what a chip designer does, and almost nobody knows what a does. The job is easiest to understand through the word itself. is to a chip what architecture is to a building: before anyone lays a brick, someone has to decide what the building is for, how large it will be, how many rooms it needs and what each room does.

Nhiều người hình dung được đại khái công việc của một kỹ sư thiết kế chip, nhưng gần như chẳng ai biết một làm gì. Cách dễ hiểu nhất là đi từ chính chữ “kiến trúc”. đối với con chip cũng giống như kiến trúc đối với tòa nhà. Trước khi đặt viên gạch đầu tiên, phải có người quyết định tòa nhà dùng để làm gì, rộng bao nhiêu, cần mấy phòng và mỗi phòng có công năng gì.

Then comes the part that separates a good house from a bad one: the paths between the rooms. A kitchen far from the dining room works, but everyone pays for it every day. On a chip the rooms are the processing units and the paths are the wiring and links that carry data between them, and they matter just as much.

Rồi đến phần phân biệt một ngôi nhà tốt với một ngôi nhà dở: lối đi giữa các phòng. Bếp nằm xa phòng ăn thì vẫn dùng được, nhưng ngày nào cả nhà cũng phải trả giá cho sự bất tiện ấy. Trên con chip, các căn phòng là những khối xử lý, còn lối đi là hệ dây dẫn và đường kết nối chuyển dữ liệu qua lại giữa chúng, và lối đi quan trọng không kém gì căn phòng.

The processor in a phone or a laptop is often a : one piece of silicon that holds a , a , the system that feeds them with memory, and the links that connect them all. An architect’s team decides how those parts are arranged and how they talk to each other.

Bộ xử lý trong điện thoại hay máy tính xách tay thường là một : trên cùng một miếng silicon có , , hệ thống bộ nhớ cấp dữ liệu cho chúng và các đường kết nối tất cả lại với nhau. Nhóm kiến trúc sư quyết định các bộ phận ấy được sắp đặt ra sao và trao đổi với nhau thế nào.

Each architect owns one unit but must understand the whole system

Kiến trúc sư phụ trách một khối nhưng phải hiểu cả hệ thống

No single architect designs a whole modern chip. In daily work each one is responsible for a particular unit: the CPU, say, or the memory system, or the links between chips. But the field expects each of them to understand the system around that unit, and the reason is practical. A feature added to one unit almost always changes what its neighbours have to do, so architects spend much of their time talking to the people who own the units next door.

Không kiến trúc sư nào một mình thiết kế trọn một con chip hiện đại. Trong công việc hằng ngày, mỗi người phụ trách một khối nhất định: có thể là CPU, có thể là hệ thống bộ nhớ, cũng có thể là phần kết nối giữa các chip. Song người trong ngành luôn được kỳ vọng phải hiểu cả hệ thống bao quanh khối của mình. Lý do rất thực tế: thêm một tính năng vào khối này gần như bao giờ cũng làm thay đổi việc mà các khối bên cạnh phải gánh. Vì vậy kiến trúc sư dành nhiều thời gian trao đổi với những người phụ trách các khối kế bên.

The same logic shapes how a chip begins. A new design starts with a team of architects deciding together what the chip will be: how many CPUs and GPUs it carries, how much memory, and what technology joins them. Only after that high-level design is settled does the work go deep into each unit.

Cách một con chip ra đời cũng theo đúng logic ấy. Bản thiết kế mới bắt đầu khi cả nhóm kiến trúc sư ngồi lại để quyết định con chip sẽ là gì: có bao nhiêu CPU, bao nhiêu GPU, bao nhiêu bộ nhớ, và dùng công nghệ gì để nối chúng lại. Chỉ khi bản thiết kế tổng thể ấy đã ổn định, công việc mới đi sâu vào từng khối.

A CPU has to run almost any program well

CPU phải chạy tốt gần như mọi chương trình

For thirty or forty years the defining aim of CPU design has been to run almost any program well. A CPU has to handle the operating system, compilers that turn code into machine instructions, office software on a desktop, and heavy scientific jobs such as weather forecasts and simulations in physics and chemistry. That variety explains each of its main parts.

Suốt ba, bốn mươi năm qua, mục tiêu cốt lõi của thiết kế CPU là chạy tốt gần như mọi loại chương trình. CPU phải gánh hệ điều hành, các trình biên dịch (compiler) chuyển mã nguồn thành lệnh máy và phần mềm văn phòng trên máy tính để bàn. Nó còn phải chạy những bài toán khoa học nặng như dự báo thời tiết hay mô phỏng vật lý, hóa học. Chính sự đa dạng ấy giải thích từng bộ phận chính của nó.

The do the actual calculating: adding, subtracting, multiplying, comparing numbers and combining bits. Because a CPU must be ready for every kind of program, its ALUs are large and capable, and they sit inside powerful . A core is an independent processing unit that can run a program on its own, and a large share of its area goes to machinery that looks ahead through the program, starts several instructions at once and runs them out of their written order whenever that is safe. This approach is called out-of-order execution, and it means the core rarely has to wait. Server CPUs today carry up to a few hundred of these cores.

là nơi thực sự làm tính: cộng, trừ, nhân, so sánh các con số và kết hợp các bit. Vì CPU phải sẵn sàng cho mọi loại chương trình, các ALU của nó lớn và làm được nhiều loại phép tính, và chúng nằm trong những mạnh. Mỗi lõi là một đơn vị xử lý độc lập, có thể tự chạy một chương trình. Một phần lớn diện tích của lõi dành cho bộ máy nhìn trước các lệnh sắp tới, khởi động nhiều lệnh cùng lúc và chạy chúng khác với thứ tự đã viết mỗi khi làm vậy an toàn. Cách làm này gọi là out-of-order execution (thực thi không theo thứ tự), và nhờ nó, lõi hiếm khi phải ngồi chờ. CPU dành cho máy chủ ngày nay có tới vài trăm lõi như vậy.

Next to them sits the control logic, and one of its main jobs is . Complicated programs are full of forks: if this is true, do one thing, otherwise do another. At each fork the CPU guesses which way to go and carries on. When the guess is right, no time is lost; when it is wrong, the work is thrown away and redone. Guessing well across many different programs takes a lot of complex logic.

Bên cạnh các ALU là khối điều khiển (control logic), và một trong những việc chính của nó là . Chương trình phức tạp đầy những “ngã rẽ”: nếu điều này đúng thì làm việc này, không thì làm việc kia. Đến mỗi ngã rẽ, CPU đoán trước hướng đi rồi cứ thế chạy tiếp. Đoán đúng thì không mất chút thời gian nào; đoán sai thì phần việc đã làm bị bỏ đi và phải làm lại. Để đoán giỏi trên đủ loại chương trình, khối điều khiển phải rất phức tạp.

The third part is memory. A program’s data lives in , the main memory, which is large but far from the cores and slow to reach. So a CPU keeps several layers of on the chip: small, fast memories that hold the data it is likely to need next. This , from tiny and fast to large and slow, lets a complex program finish in as short a time as possible. It also takes up a large share of the chip.

Bộ phận thứ ba là bộ nhớ. Dữ liệu của chương trình nằm trong , bộ nhớ chính, dung lượng lớn nhưng ở xa các lõi và truy cập chậm. Vì vậy CPU đặt ngay trên chip nhiều tầng : những bộ nhớ nhỏ, nhanh, giữ sẵn dữ liệu mà nó nhiều khả năng sắp cần. này, đi từ rất nhỏ và rất nhanh đến rất lớn và chậm, giúp một chương trình phức tạp chạy xong trong thời gian ngắn nhất có thể. Nó cũng chiếm một phần đáng kể diện tích con chip.

A GPU uses thousands of small cores to work in parallel

GPU dùng hàng nghìn lõi nhỏ để xử lý song song

A GPU takes the opposite approach: it runs the same simple program on a great many pieces of data at the same time, an approach called . The work was drawing images at first: every pixel on the screen needs a similar small calculation, and none of them has to wait for another.

GPU chọn hướng ngược lại: nó chạy cùng một chương trình đơn giản trên thật nhiều phần dữ liệu cùng lúc, cách làm được gọi là . Ban đầu việc của nó là vẽ hình ảnh: mỗi điểm ảnh trên màn hình cần một phép tính nhỏ tương tự nhau, và không điểm nào phải chờ điểm nào.

That changes how the space on the chip is spent. Each ALU in a GPU is small, because its operations are simple. It needs little control logic, because one control unit steers a whole group of ALUs through the same instruction at once. And its caches are much smaller for each core than a CPU’s. To make up for them, a GPU keeps a great many pieces of work in flight, and when one has to wait for data from memory it runs another, so the wait is hidden behind useful work. The area saved goes into more ALUs, so where a CPU has tens, or at most a few hundred, large cores, a GPU has thousands of small ones.

Điều đó thay đổi cách phân bổ diện tích trên chip. Mỗi ALU trong GPU đều nhỏ, vì các phép tính nó đảm nhận đơn giản. GPU cần ít khối điều khiển, vì chỉ một khối điều khiển là đủ để cả một nhóm ALU cùng thực hiện một lệnh một lúc. Tính trên mỗi lõi, cache của nó cũng nhỏ hơn nhiều so với CPU. Để bù lại, GPU giữ sẵn rất nhiều phần việc đang dở, và khi một phần phải chờ dữ liệu từ bộ nhớ thì nó chạy phần khác, nên thời gian chờ được lấp bằng việc có ích. Phần diện tích tiết kiệm được dành để đặt thêm ALU, nên nếu CPU có vài chục, nhiều lắm vài trăm lõi lớn, thì GPU có hàng nghìn lõi nhỏ.

Two block diagrams side by side. The CPU has one large control block, four large ALUs and two large cache blocks above DRAM, joined by four arrows. The GPU has eight rows of sixteen small cores, each row with a tiny control and cache, one thin shared cache and fourteen arrows to DRAM. Two block diagrams side by side. The CPU has one large control block, four large ALUs and two large cache blocks above DRAM, joined by four arrows. The GPU has eight rows of sixteen small cores, each row with a tiny control and cache, one thin shared cache and fourteen arrows to DRAM.
PLATE 4.1HÌNH 4.1 Mỗi loại chip dùng diện tích theo một cách riêng: CPU dành phần lớn cho số ít lõi lớn hơn, khối điều khiển và cache, còn GPU lấp đầy bằng các lõi nhỏ và giữ đường nối rộng hơn tới bộ nhớ.Each chip spends its area differently: a CPU gives most of it to fewer, larger cores, control logic and caches, while a GPU fills it with small cores and keeps a wider path to memory.

’s own programming guide describes the difference the same way: a GPU spends more of its on processing data, and fewer on caching data and controlling the flow of a program.,

Tài liệu hướng dẫn lập trình của cũng mô tả khác biệt này đúng như vậy: GPU dành nhiều hơn cho xử lý dữ liệu, và ít hơn cho cache và điều khiển luồng chương trình.,

A GPU core is not a small copy of a CPU core. It is a much simpler unit that does well only when there are thousands of others working beside it on the same kind of task. Give a GPU one long, twisting program and a CPU will usually finish first.

Một lõi GPU không phải là bản thu nhỏ của lõi CPU. Đó là một đơn vị đơn giản hơn nhiều, chỉ phát huy sức mạnh khi có hàng nghìn lõi khác cùng làm một loại việc bên cạnh. Với một chương trình dài và nhiều ngã rẽ, CPU thường chạy xong trước GPU.

A CPU aims for low latency, a GPU for high throughput

CPU nhắm tới latency thấp, GPU nhắm tới throughput cao

The two designs follow two philosophies. is the time one task takes from start to finish. is how much work gets done in a given time. A CPU is latency-oriented: its large cores, clever control and deep caches exist to finish each task as soon as possible. A GPU is throughput-oriented: any single task on it may take longer, but thousands of them finish together.

Hai kiểu thiết kế ấy đi theo hai triết lý. là thời gian một tác vụ cần để đi từ đầu đến cuối. là khối lượng công việc làm xong trong một khoảng thời gian. CPU được thiết kế hướng latency: lõi lớn, khối điều khiển thông minh và cache nhiều tầng đều nhằm hoàn thành từng tác vụ sớm nhất có thể. GPU thì hướng throughput: mỗi tác vụ riêng lẻ có thể chậm hơn, nhưng hàng nghìn tác vụ cùng xong một lúc.

Think of a sports car and a bus. The car gets two people across town faster than anything else. The bus is slower, yet it moves fifty people in one trip. The CPU is the car and the GPU the bus: each is better at its own job, which is why most computers carry both.

Hãy hình dung một chiếc xe thể thao và một chiếc xe buýt. Xe thể thao đưa hai người băng qua thành phố nhanh hơn bất cứ thứ gì. Xe buýt chậm hơn, nhưng một chuyến chở được năm mươi người. CPU là chiếc xe thể thao, GPU là chiếc xe buýt: mỗi bên giỏi đúng việc của mình, và đó là lý do phần lớn máy tính đều có cả hai.

VIDEOVIDEOTS. Bình Phạm (NVIDIA) kể về công việc của một chip architect, và CPU với GPU được thiết kế cho những việc khác nhau ra sao.Dr. Bình Phạm of NVIDIA explains what a chip architect does, and how a CPU and a GPU are designed for different jobs. In Vietnamese.Watch on YouTubeXem trên YouTube