- Tại mỗi thời điểm, máy tính chỉ thực hiện được một phép toán nên khi phải xử lý một khối lượng dữ liệu rất lớn thì sẽ mất rất nhiều thời gian để giải quyết.. Máy tính được xây dựng từ
Trang 1Bài 1.1 Nêu đặc trưng cơ bản của kiến trúc máy tính tuần tự của von Neuman
- Máy tính Von Neumann là hệ thống đơn một bộ xử lý
- Không cho phép thực hiện nhiều công việc cùng một lúc
- Tại mỗi thời điểm, máy tính chỉ thực hiện được một phép toán nên khi phải xử lý một khối lượng dữ liệu rất lớn thì sẽ mất rất nhiều thời gian để giải quyết
- Tốc độ xử lý của các bộ xử lý theo kiểu Von Neumann đã dần tiến tới giới hạn, không thể cải tiến thêm được
Máy tính được xây dựng từ các khối cơ sở :
- Bộ nhớ: để lưu trữ dữ liệu;
- Các đơn vị logic và số học: thực hiện các phép toán được ký hiệu là ALU;
- Các phần tử xử lý: điều khiển CU và truyền dữ liệu vào/ra;
- Đường truyền dữ liệu
Sự khác nhau chính của các máy tính là sự liên kết giữa các khối đó với nhau Trong các hệ thống máy tính truyền thống có hai khối quan trọng nhất là bộ nhớ và BXL BXL thao tác trên các dữ liệu được lưu trữ trong bộ nhớ thông qua các chỉ thị (câu lệnh) Các câu lệnh cũng được lưu trong bộ nhớ và luôn luôn là dòng được chuyển từ bộ nhớ tới BXL để thực hiện Dữ liệu di chuyển trong hệ thống theo cả hai chiều, đọc và ghi vào bộ nhớ Hình 1-1 mô tả hoạt động của mô hình máy tính kiểu von Neumann
Mở rộng mô hình von Newmann là mạng các máy tính, trong đó mỗi nút là một máy tính
có thể thao tác độc lập với các đơn vị khác Mạng máy tính có thể tổ chức phân tán theo địa
lý
1.2: Các kiến trúc máy tính có thể được phân loại như thế nào? dựa vào những yếu tố nào để phân loại? Một hệ thống như thế nào được gọi là máy tính song song?
Kiến trúc máy tính nghiên cứu cách tổ chức để liên kết các thành phần của các hệ thống máy tính Về cơ bản, máy tính được xây dựng từ các khối cơ sở như:
Bộ nhớ (Memory): Dùng để lưu trữ dữ liệu trong quá trình xử lý dữ liệu
Các đơn vị logic và số học (ALU): Nhằm thực hiện các phép toán logic và phép toán
số học
Khối điều khiển (CU): Điều khiển và truyền dữ liệu vào/ra
Các đường truyền dữ liệu (BUS)
Dựa vào kiến trúc trên thì có nhiều cách để phân loại các kiến trúc máy tính, nhưng cách thông dụng nhất là dựa vào các đặc tính về số lượng bộ xử lý (BXL), số chương trình thực hiện đồng thời, cấu trúc bộ nhớ, …
Bộ nhớ
Bộ xử lý Ghi dữ liệu Đọc dữ liệu Câu lệnh
Trang 2Cách phân loại sau đây của Michael Flynn vào năm 1966 được nhiều người chấp nhận:
SISD (Single Instruction stream, Single Data stream): Đơn luồng lệnh, đơn luồng dữ
liệu là loại máy tính chỉ có một CPU, ở mỗi thời điểm chỉ thực hiện một lệnh và chỉ đọc hoặc ghi một mục dữ liệu
SIMD (Single Instruction stream, Multiple Data stream): Đơn luồng lệnh, đa luồng
dữ liệu là loại máy tính có nhiều đơn vị xử lý thực hiện theo một luồng các câu lệnh CPU phát sinh tín hiệu điều khiển đến tất cả các phần tử xử lý, những bộ xử lý
này cùng thực hiện một phép toán trên các mục dữ liệu khác nhau, nghĩa là mỗi bộ
xử lý có luồng dữ liệu riêng
MISD (Multiple Instruction stream, Single Data stream): Đa luồng lệnh, đơn luồng
dữ liệu là loại máy tính có thể thực hiện nhiều chương trình (nhiều lệnh) trên cùng một mục dữ liệu Loại máy tính được chia thành hai lớp:
o Lớp các máy tính yêu cầu những đơn vị xử lý khác nhau có thể nhận được những chỉ lệnh khác nhau để thực hiện trên cùng một mục dữ liệu
o Lớp các máy tính có các luồng dữ liệu được chuyển tuần tự theo dãy các CPU liên tiếp
CU 1
Phần tử
xử lý 2 Luồng lệnh 1
Phần tử
xử lý n
Phần tử
xử lý 1
CU 2
CU n
Luồng lệnh 2
Luồng lệnh n
Luồng
dữ liệu
Đơn vị điều khiển (CU)
Phần tử
xử lý 1
Tín hiệu điều khiển
Phần tử
xử lý n
Phần tử
xử lý 2
Tín hiệu
điều khiển
Đơn vị điều khiển
Bộ nhớ
BXL số học
Tín hiệu điều khiển
Trang 3 MIMD (Multiple Instruction stream, Multiple Data stream): Đa luồng lệnh, đa luồng
dữ liệu là loại máy tính đa bộ xử lý, trong đó mỗi bộ xử lý có thể thực hiện những luồng lệnh (chương trình) khác nhau trên các luồng dữ liệu riêng
Một hệ thống có thể phân rã bài toán ban đầu thành các bài toán con nhỏ hơn để thực hiện (giải quyết) đồng thời các bài toán con đó, sau đó tổng hợp các kết quả ở các bài toán con để thu được kết quả của bài toán ban đầu Hệ thống như vậy được gọi là máy tính song song Với khái niệm như vậy thì ta thấy hai loại kiến trúc máy tính SIMD và MIMD có thể được xem như là máy tính song song
Câu 1.4: Máy tính kiểu MIMD khác với mạng các máy tính như thế nào?
+ Đa bộ xử lý, trong đó mỗi bộ xử lý có thể thực
hiện những luồng lệnh (chương trình) khác nhau
trên các luồng dữ liệu riêng
+ Đa máy tính nối lại với nhau
+ Có bộ nhớ riêng và cũng có thể truy cập vào
được bộ nhớ chung (global) khi cần, do vậy
giảm thiểu được sự trao đổi giữa các BXL trong
hệ thống
+ Bộ nhớ riêng
+ Có không gian địa chỉ ảo chung + Mỗi máy có không gian địa chỉ riêng + Xử lý phân tán trên một số BXL độc lập + Xử lý phân tán trên các máy
+Mỗi BXL thao tác độc lập và có thể thực hiện
đồng thời với nhau
+ Mỗi máy trong mạng thao tác độc lập
và có thể thực hiện đồng thời với nhau + Mỗi BXL chạy một chương trình riêng + Mỗi máy chạy một chương trình riêng
CU 1
Phần tử
xử lý 2 Luồng lệnh 1
Phần tử
xử lý n
Phần tử
xử lý 1
CU 2
CU n
Luồng lệnh 2
Luồng lệnh n
Luồng dữ liệu 1
Luồng dữ liệu 2
Luồng dữ liệu n
Trang 4Bài 1.5 Nêu nguyên lý xử lý theo hình ống Những bài toán có những tính chất gì thì thích hợp với kiến trúc xử lý hình ống?
Nguyên lý hình ống (pipelined) dựa vào phương pháp phân đoạn hoặc chia nhỏ một
tiến trình tính toán thành một số đoạn nhỏ hơn để thực hiện trong các pha liên tiếp Tất cả các giai đoạn của một tiến trình được thực hiện tuần tự, khi thực hiện xong thì bắt đầu thực hiện của tiến trình tiếp theo Mỗi pha thực hiện xong sẽ truyền kết quả cho pha tiếp theo
Như vậy, trong cách thực hiện theo nguyên lý hình ống, khi một giai đoạn công việc đang thực hiện thì một giai đoạn khác có thể nạp dữ liệu vào, và dữ liệu vào của giai đoạn này có thể là kết quả của giai đoạn trước nó
Ví dụ, hình 1-10 mô tả một tiến trình được phân thành 4 giai đoạn thực hiện tuần tự,
nhưng có thể thực hiện song song theo nguyên lý hình ống để tăng tốc độ tính toán khi phải thực hiện nhiều tiến trình như thế
Một tiến trình được chia thành 4 giai đoạn:
Thực hiện tuần tự hai tiến trình phải qua 8 giai đoạn:
Thực hiện theo hình ống hai tiến trình trên chỉ cần trải qua 5 giai đoạn:
Hình 1-10: Thực hiện tuần tự và hình ống của hai tiến trình gồm 4 giai đoạn Nếu ký hiệu Si là thời gian cần thiết để thực hiện giai đoạn thứ i thì:
Tổng thời gian tính toán tuần tự là: 2 * (S1 + S2 + S3+ S4)
Tổng thời gian tính toán hình ống là: S1 + S2 + S3+ S4 + S4
Nguyên lý hình ống có thể áp dụng theo hai mức:
Hình ống theo đơn vị số học: Các đơn vị số học và logic ALU được tổ chức thành
mảng, các phép toán bên trong được thực hiện theo nguyên lý hình ống (hình (a))
Hình ống theo đơn vị câu lệnh: Các đơn vị điều khiển CU được phân đoạn và tổ
chức theo hình ống (hình (b))
Hình 1-11: (a) Xử lý hình ống theo ALU, (b) Xử lý hình ống theo CU
Pha 1 Pha 2 Pha 3 Pha 4
Pha 1 Pha 2 Pha 3 Pha 4
Pha 1 Pha 2 Pha 3 Pha 4
Pha 1 Pha 2 Pha 3 Pha 4 Pha 1 Pha 2 Pha 3 Pha 4
CU ALU ALU ALU
Bộ nhớ
CU
CU
CU ALU
Bộ nhớ
Trang 5Như chúng ta đã biết, việc xử lý theo hình ống được sử dụng để thực hiện gối đầu nhiều pha thực hiện các câu lệnh liên tiếp và sự truyền thông dữ liệu Do vậy có thể xây
dựng hình ống vòng tròn giữa các BXL, bộ nhớ và mạng liên kết như sau:
Các phép toán thực hiện bởi CU theo kiến trúc này có thể chia thành 5 giai đoạn:
Giai đoạn 1 Đọc dữ liệu: đọc dữ liệu từ bộ nhớ chia sẻ
Giai đoạn 2 Chuyển tải dữ liệu: chuyển dữ liệu từ bộ nhớ tới các phần tử xử lý PE thông qua mạng đọc (Read Network)
Giai đoạn 3 Thực hiện câu lệnh: sử dụng PE để thực hiện các câu lệnh
Giai đoạn 4 Chuyển tải dữ liệu: chuyển các kết quả từ các PE tới bộ nhớ thông qua mạng ghi (Write Network)
Giai đoạn 5 Lưu trữ dữ liệu : ghi lại các kết quả vào bộ nhớ chia sẻ
Nói chung, nguyên lý hình ống cho phép nhiều thao tác gối đầu nhau thực hiện đồng thời và hỗ trợ để khai thác được khả năng của kiến trúc song song theo các mức khác nhau
Mức câu lệnh Từng câu lệnh chuyển vào cho một đoạn trong chu trình thực hiện
sao cho sau khi đưa các lệnh vào hình ống thì chúng sẽ thực hiện lặp lại theo từng chu kỳ
Mức hệ thống con Nhiều phép toán có thể thực hiện theo hình ống như ADD,
MUL, DIV, và SORT thường có trong nhiều kiến trúc của máy tính Những phép
toán này được sử dụng theo hình ống rất thường xuyên
Mức hệ thống Nhiều đoạn trong hình ống không cần phải thực hiện ở mức phần cứng mà có thể ở mức phần mềm
Kết quả nguyên lý hình ống đã được ứng dụng để thiết kế nhiều hệ máy tính như: CDC STAR 100, Texas Instruments ASC, Cray 1, v.v
Bài 1.7 Một công việc được chia thành m công việc con, mỗi công việc con đòi hỏi một đơn vị thời gian để thực hiện Hỏi cần bao nhiêu đơn vị thời gian để hệ hình ống gồm m-bộ xử lý tuyến tính (gồm m –pha thực hiện) thực hiện được nhiệm vụ cho trước?
Cách 1: Theo kiến trúc của bộ xử lý hình ống m bộ xử lý tuyến tính thì với nhiệm vụ cho trước được chia thành m công việc con như vậy sẽ mất 01 đơn vị thời gian để thực hiện
Cách 2:
Giả sử có n công việc với một công việc được chia thành m công việc con, mỗi công việc con đòi hỏi một đơn vị thời gian để thực hiện
Nếu xử lý theo kiểu tuần từ thì mất n*m đơn vị thời gian xử lý
Nếu Sử dụng nguyên lý hình ống mất m+n -1 đơn vị thời gian xử lý
Write Network
Shared
Memory
Shared Memory Read
Network
Trang 6Nếu một công việc được chia thành m công việc con, mỗi công việc con đòi hỏi một đơn vị thời gian để thực hiện thì cần m đơn vị thời gian xử lý
Bài 2.1 Nêu những vấn đề cần quan tâm khi thiết kế kiến trúc máy tính song song
Sử dụng tập nhiều thanh ghi: sẽ làm giảm hiệu ứng phụ của các thanh ngắt
Sử dụng không gian nhớ lớn: làm giảm hiệu ứng phụ của sự đổi chỗ, làm tăng hiệu
quả trao đổi dữ liệu của hệ thống
Lập lịch cho BXL: vấn đề là xây dựng bộ lịch cấp phát hữu hiệu các BXL cho từng
nhiệm vụ đơn lẻ một cách động như các chương trình ứng dụng yêu cầu
Đồng bộ các BXL: điều khiển nhiều tiến trình hoạt động đồng thời, cùng truy cập
đến một số hữu hạn các tài nguyên chung, ví dụ như bộ nhớ, đảm bảo tránh được
sự tắc nghẽn (deadlock)
Thiết kế cấu hình mạng liên kết: tập trung vào việc kết nối BXL với BXL, BXL
với bộ nhớ trong hệ thống Cấu hình tôpô của mạng kết nối là vấn đề rất quan
trọng trong thiết kế hệ thống song song
Phân đoạn: xác định mức độ song song trong các thuật toán để xác định được các
luồng xử lý đồng thời Sự phân đoạn có thể thực hiện ở nhiều mức khác nhau: mức
lệnh, mức thủ tục, hoặc mức chương trình, v.v
Đảm bảo tin cậy: vấn đề dung thứ lỗi (Fault Tolerance) đảm bảo nếu có một BXL
nào đó không thực hiện được thì công việc mà nó phải đảm nhiệm sẽ được giao cho BXL khác thực hiện để đảm bảo trong mọi tình huống để công việc chung vẫn
được hoàn thành
Bài 2.2: Bộ nhớ kết hợp là gì? nêu nguyên lý họat động của bộ nhớ kết hợp
Bộ nhớ (Memory) là một trong những thành phần quan trọng nhất của kiến trúc máy
tính John von Neumann
Bộ nhớ kết hợp (AM – Associative Memory) bao gồm các ô nhớ (gọi là cell) và logic
kết hợp Mỗi ô nhớ của AM có 4 đầu vào và hai đầu ra, như hình sau:
Các đầu vào của mỗi ô nhớ bao gồm:
Bit đối số a
s
k q
a R/W m
Kết quả
Đối sánh
Chọn
Khóa
Đối số
Đọc/Ghi
Cấu trúc của ô nhớ AM
Trang 7 Bit đọc/ghi R/W nhằm xác định thao tác tương ứng cần thực hiện
Bit khóa k
Bit lựa chọn s để xác định ô nhớ thích hợp cho việc thực hiện đọc/ghi
Hai kết quả ở đầu ra bao gồm:
Bit đối sánh m chỉ ra dữ liệu được lưu trong bộ nhớ có sánh được với bit đối số a
hay không
Bit ra kết quả q
Nguyên lý hoạt động của bộ nhớ kết hợp: Tất cả các bộ nhớ kết hợp được tổ chức
thành các từ (word) và được xây dựng thành mảng các ô giống nhau Hình sau đây mô tả một bộ nhớ kết hợp có n từ và mỗi từ có m bit Mỗi ô trong số m*n ô nhớ có một mạch vòng
để so sánh đối số với giá trị được lưu trữ trong các ô nhớ, đồng thời chỉ ra kết quả khi đối sánh thành công Hệ thống có thanh ghi lưu trữ đối số, một thanh ghi đánh sấu những trường của mỗi từ mà bộ nhớ cần so sánh và thanh ghi đối sánh (các bit đối sánh) chỉ ra những từ tìm thấy
Buffer Register
…
Output
0
1
m-1
Tags 0 1 n-1 Mask Register
Cấu trúc của bộ nhớ kết hợp
Trang 8Bài 2.4: Dựa vào định nghĩa chung của mạng liên kết hình khối để xây dựng cấu trúc tôpô cho mạng liên kết hình khối cho 16 bộ xử lý
Câu 2.7 Xây dựng mạng liên kết theo mô hình xáo trộn hoàn hảo cho 16 phần tử
3.1: Xác định sự phụ thuộc dữ liệu của các lệnh trong chu trình sau:
Do i = 1 to N
a[i+1] = e[i] + 2*d[i] (S2)
end
DEF(S1) USE(S2) ≠ : phụ thuộc dòng dữ liệu giữa câu lệnh S1 và S2
DEF(S1) USE(S3) ≠ ): phụ thuộc dòng dữ liệu giữa câu lệnh S1 và S3
USE(S2) USE(S3) ≠ : phụ thuộc dữ liệu vào giữa lệnh S2 và S3
0
3
2
1
5
4
P0011
P0111
P0110
P0010
0101
8
11
10
9
13
12
P1011
P1111
P1110
P1010
1101
Trang 9Từ đó ta có đồ thị phụ thuộc dữ liệu như sau:
Câu 3.2 Hai chu trình sau có tương đương về nội dung tính toán hay không? Hãy bình luận về khả năng thực hiện song song của các chu trình đó
1 Do i = 1 to N
a[i] = a[i + 1] + i end
2 Do i = N downto 1
a[i] = a[i + 1] + i end
- Hai chu trình trên không tương đương về nội dung tính toán vì
Chu trình 1 : giá trị phần tử mảng thứ i bằng giá trị phần tử mảng thứ i + 1 cộng với chỉ số i.( trong đó giá trị phần tử mảng thứ i + 1 không bị thay đổi trong chu trình trước đó)
Chu trình 2 : Giá trị phần tử mảng thứ i bằng giá trị phần tử mảng thứ i + 1 cộng với chỉ số i ( trong đó giá trị phần tử mảng thứ i + 1 đã bị thay đổi trong chu trình trước đó)
- Chu trình 1 có thể thực hiện song song được vì
Chu trình 1 làm nhiệm vụ sao tất cả các phần tử của một mảng sang chính mảng đó với chỉ số giảm đi một và giá trị của mảng được cộng thêm giá trị chính bằng chỉ số mảng,
do đó nó phải thực hiện tuần tự
Nếu hai mảng đích và mảng nguồn của chu trình trên là khác nhau thì bằng cách tạo
ra một bản sao của mảng gốc, chúng ta có đoạn chương trình sau:
1.1 Do i = 1 to N
a1[i] = a[i];
end
Do i = 1 to N
a[i] = a1[i + 1] + i ; end
cả hai chu trình trên là khả song song Nếu chúng ta có N bộ xử lý thì chỉ cần hai đơn
vị thời gian của CPU là thực hiện được chu trình trên
- Chu trình 2 không thể thực hiện song song vì
Trang 10Chu trình 2 có thể khai triển thành
a[N] = a[N + 1] + N;
a[N – 1] = a[N] + N – 1;
…
a[i] = a[i + 1] + i
…
a[j] = a[j + 1] + j
(giả sử i > j)
Để kiểm tra sự phụ thuộc của các lệnh trên chúng ta tính DEF và USE
USE(i) = {a[i + 1]}
DEF(i) = {a[i]}
USE(j) = {a[j + 1]}
DEF(j) = {a[j]}
Ta nói rằng vòng lặp thứ i và thứ j là phụ thuộc dòng dữ liệu, nếu DEF(i) và USE(j)
có chứa biến chung Trong chu trình trên, hai tập DEF(i) = {a[i]} và USE(j) = {a[j + 1]} có chứa phần tử chung khi i = j + 1 Theo giả thiết các bước triển khai trên i > j nên phương trình i = j + 1 có vô số nghiệm do đó có thể kết luận chu trình 2 không thể thực hiện song song
Câu 3.3 : Xác định tất cả các sự phụ thuộc dữ liệu trong đoạn chương trình sau:
int a[MAX];
read(a);
for(i = 0; i < N; i++)
for(j = 0; j < i; j++){
S1: a[i] = max(a[i], a[j]);
S2: a[j] = min(a[i], a[j]);
}
Ở đoạn chương trình trên có lệnh khai báo mảng a và lệnh đọc dữ liệu vào cho mảng đó
Tuy nhiên hai lệnh này không ảnh hưởng gì đến sự phụ thuộc dữ liệu nên ta chỉ xét đến các
lệnh gán ở hai chu trình lồng nhau theo các biến i và j
DEF(S1) = {a[i]}, USE(S1) = {a[i], a[j]}
DEF(S2) = {a[j]}, USE(S2) = {a[i], a[j]}
Ta có các phụ thuộc dữ liệu sau :
DEF(S1) USE(S2) = {a[i]} ≠ suy ra S1 và S2 phụ thuộc dòng dữ liệu
DEF(S2) USE(S1) = {a[j]} ≠ suy ra S1 và S2 phản phụ thuộc dữ liệu