Sunday, June 30, 2013

Thuật toán Cây quyết định ID3 và chương trình mô phỏng

1. Giải thuật ID3:

ID3_algorithm(Training_Set, Class_Labels, Attributes)

Tạo nút Root của cây quyết định

   If tất cả các ví dụ của Training_Set thuộc cùng lớp c

   Return Cây quyết định có nút Root được gắn với (có nhãn) lớp c

   If Tập thuộc tính Attributes là rỗng

   Return Cây quyết định có nút Root được gắn với nhãn lớp ≡ Majority_Class_Label(TrainingSet)

   A ← Thuộc tính trong tập Attributes có khả năng phân loại “tốt nhất” đối với Training_Set

   Thuộc tính kiểm tra cho nút Root ← A

   For each Giá trị có thể v của thuộc tính A

 Bổ sung một nhánh cây mới dưới nút Root, tương ứng với trường hợp: “Giá trị của A là v”

   Xác định Training_Setv = {ví dụ x | x ⊆ Training_Set, xA=v}

  If (Training_Setv là rỗng) Then

  Tạo một nút lá với nhãn lớp ≡ Majority_Class_Label(Training_Set)

Gắn nút lá này vào nhánh cây mới vừa tạo

Else Gắn vào nhánh cây mới vừa tạo một cây con sinh ra bởi ID3_algorithm(Training_Setv, Class_Labels, {Attributes A})

Return Root


2. Giao diện chính của chương trình Demo gồm 4 phần:

o Phần 1: Bảng lưu dữ liệu training (Data Training).

o Phần 2: Ghi ra các bước giải của thuật toán (Solutions).

o Phần 3: Vẽ cây minh họa cho thuật toán (Decision Tree).

o Phần 4: Các chức năng của chương trình (Control).


Có 4 button với các chức năng như sau:

- Load Data: Đưa dữ liệu training vào chương trình.

- ID3 – Alg: Chạy giải thuật ID3.

- Reset: Khởi động, chạy lại chương trình.

- About: Thông tin về chương trình.


3.  Các bước chạy chương trình:

- Đầu tiên, nạp dữ liệu vào chương trình bằng button Load Data.

Dữ liệu được đưa lên bảng Data Training (Phần 1).

- Sau đó, nhấn button ID3 – Alg để chạy giải thuật.

Các bước giải sẽ được hiện ra ở phần 2 (Solutions).

Cây được vẽ ra ở phần 3 (Decision Tree).


4. Giao diện chương trình:

Chương trình gồm những hàm chính sau:

 Hàm tính Entropy:

· Công thức:    Entropy (S) = – p+ log2 p+ – p- log2 p-

· Code [C#]:

private double GetEntropy(int Positives , int Negatives)
{
if (Positives == 0)
return 0;
if (Negatives == 0)
return 0;
double Entropy;
int total = Negatives + Positives;
double RatePositves = (double)Positives / total;
double RateNegatives = (double)Negatives / total;
Entropy = -RatePositves * Math.Log(RatePositves, 2) – RateNegatives * Math.Log(RateNegatives, 2);
return Entropy;
}


 Hàm tính Gain:

· Công thức: 


· Code [C#]:

private double Gain(List<List<string>> Examples, Attribute A, string bestat)
{
double result;
int CountPositives = 0;
int[] CountPositivesA = new int[A.Value.Count];
int[] CountNegativeA = new int[A.Value.Count];
int Col = Attributes.IndexOf(A);
for (int i = 0; i < A.Value.Count; i++)
{
CountPositivesA[i] = 0;
CountNegativeA[i] = 0;
}
for (int i = 0; i < Examples.Count; i++)
{
int j = A.Value.IndexOf(Examples[i][Col].ToString());
if (Examples[i][Examples[0].Count – 1]==”yes”)
{
CountPositives++;
CountPositivesA[j]++;
}
else
{
CountNegativeA[j]++;
}
}
result = GetEntropy(CountPositives, Examples.Count – CountPositives);
for (int i = 0; i < A.Value.Count; i++)
{
double RateValue = (double)(CountPositivesA[i] + CountNegativeA[i]) / Examples.Count;
result = result – RateValue * GetEntropy(CountPositivesA[i], CountNegativeA[i]);
}
Solution = Solution + “n * Gain(” + bestat + “,” + A.Name + “) = ” + result.ToString();
return result;
}



 Hàm chọn đặc tính tốt nhất:

· Phương pháp:
    - Dựa vào giá trị gain của các đặc tính, đặc tính nào có Gain lớn nhất.

    - Chọn đặc tính đó – đặc tính tốt nhất.

· Code [C#]:

private Attribute GetBestAttribute(List<List<string>> Examples, List<Attribute> Attributes, string bestat)
{
double MaxGain = Gain(Examples, Attributes[0], bestat);
int Max = 0;
for (int i = 1; i < Attributes.Count; i++)
{
double GainCurrent = Gain(Examples, Attributes[i], bestat);
if (MaxGain < GainCurrent)
{
MaxGain = GainCurrent;
Max = i;
}
}
return Attributes[Max];
}
 Hàm thực hiện giải thuật ID3:
Code:
private TreeNode ID3(List<List<string>> Examples, List<Attribute> Attribute,string bestat)
{
if (CheckAllPositive(Examples))
{
return new TreeNode(new Attribute(“Yes”));
}
if (CheckAllNegative(Examples))
{
return new TreeNode(new Attribute(“No”));
}
if (Attribute.Count == 0)
{
return new TreeNode(new Attribute(GetMostCommonValue(Examples)));
}
Attribute BestAttribute = GetBestAttribute(Examples, Attribute, bestat);
int LocationBA = Attributes.IndexOf(BestAttribute);
TreeNode Root = new TreeNode(BestAttribute);
for (int i = 0; i < BestAttribute.Value.Count; i++)
{
List<List<string>> Examplesvi = new List<List<string>>();
for (int j = 0; j < Examples.Count; j++)
{
if (Examples[j][LocationBA].ToString() == BestAttribute.Value[i].ToString())
Examplesvi.Add(Examples[j]);
}
if (Examplesvi.Count==0)
{
return new TreeNode(new Attribute(GetMostCommonValue(Examplesvi)));
}
else
{
Attribute.Remove(BestAttribute);
Root.AddNode(ID3(Examplesvi, Attribute,BestAttribute.Value[i]));
}
}
return Root;
}


Toàn bộ chương trình demo ở đây: http://adf.ly/RJwUY [sau 5s, click Bỏ qua quảng cáo]

(theo csshare)

Saturday, June 29, 2013

Hướng dẫn sử dụng Google Code

Các bạn có thể hình dung Google code cũng như một Hosting và nó dùng để chứa tài liệu và các file mã nguồn rất tiện ích. Ngoài ra, khi làm việc nhóm với một Project nào đó sẽ không tránh khỏi việc chỉnh sửa Project giữa các thành viên trong nhóm vì thế Google code là nơi sẽ giúp chúng ta có thể kiểm soát được quá trình làm việc trên một cách chuẩn xác.
Để làm việc trên hệ thống google code, chúng ta cần 1 phần mềm trung gian để làm việc, ở đây mình hướng dẫn sử dụng phần mềm TortoiseSVN để làm việc với hệ thống Google code.

Hướng dẫn sử dụng google code

Bước 1: Đăng nhập tài khoản Gmail

Bước 2: Vào trang http://code.google.com



Bước 3: Bắt đầu tạo Project
- Chọn "Create a new project".
- Tiến hành tạo project bằng cách nhập đầy đủ các thông tin vào ô trống: Khai báo cho ba mục đầu tiên, ở mục “Version control system” chọn “Subversion”, trong “Source code license” chọn “Artistic License/GPL”.


 - Nhấn “Create project”. Project được tạo ra.* Một số chức năng trong Google Code:


Chức năng 1. Chức năng download: Đưa file lên project khi trong project không có gì cả.


- Nhấn “Submit file” để chấp nhận và “Discard” để hủy. Bạn có thể download bằng cách nhấn vào Download chọn file dưới thẻ file name.- Bấm vào “Source”,chọn “google.code.password”

Chức năng 2. Chức năng quản lý Source


- Checkout: Ta dùng cái này làm user name và password để upload file lên Host, nếu muốn đổi pass thì nhấn “Regenerate”.- Browse: Cây thư mục các file lưu trên google code.- Changes: Lưu lại các thời điểm thay đổi

Chức năng 3. Chức năng administrator: Vào “Administer” chọn “Project Members


- Nhập vào gmail của mình ở mục đầu tiên, nhập gmail của các thành viên trong nhóm vào mục thứ hai, nhập gmail vào mục thứ ba là người có thể xem code nhưng không có quyền sửa chữa, xóa code .

Bước 4: Cài SVN Client
- Download SVN Client tại đây [sau 5s, click Bỏ qua quảng cáo để đến trang download]
- Sau khi cài đặt restart lại máy.

Bước 5: Tạo một SVN checkoutClick chuột phải vào nơi muốn tạo chọn SVN Checkout (ở đây tôi tạo trên onsoftvn)



URL of repository: link của Project ở đây là: https://onsoftvn.googlecode.com/svn/trunk/ Nó sẽ tự tạo cho bạn một thư mục với tên giống tên của Project nếu không thích thì đổi lại.Cuối cùng Click OK, ta sẽ có một thư mục rỗng.

Bước 6: Bắt đầu Commit một Project của mình lên host.
- Trước tiên ta tạo một Project ở đây tôi dùng Visual Studio 2010 để tạo.
- Xong Copy Project đó vào Thư mục mới vừa tạo.
- Click Chuột phải lên Thư mục đó chọn SVN Commit



Viết dòng chú thích tại Box Message để các thành viên biết mình đã làm nhưng gì trong lần Commit này để tiện cho việc quản lý.Check chọn những file mà bạn cần commit tại Box Changes made, Click OK


Mỗi người đều có một Username và Password của riêng mình, lưu ý ở Username và Password ở đây không phải là ID và Pass của Gmail mà là ID và Pass của Project, các bạn có thể lấy nó ở đây:


Click vào google.com password để lấy password- Sau đó điền ID và Pass vào ta được kết quả như sau:


Click OK, thế là bạn đã commit thành công. Giờ bạn có thể kiểm tra bằng cách đăng nhập vào Gmail làm như các bước ở trên sau đó chọn Profile chọn tab Source chọn tab Changes
Chúc các bạn thành công!

Wednesday, June 26, 2013

Tính toán lưới - tổng quan và ứng dụng


LỜI NÓI ĐẦU

Tính toán lưới là một mô hình tính toán đang được ứng dụng rất nhiều, đây là một mô hình có khả năng thực hiện tính toán với tốc độ cao bằng cách tận dụng nhiều máy tính nối mạng để tạo ra một kiến trúc máy tính ảo có thể phân phối việc tính toán trên một cơ sở hạ tầng song song. Lưới tính toán sử dụng tài nguyên của nhiều máy tính riêng lẻ kết nối với nhau thông qua một mạng máy tính (thường là mạng máy Internet) để giải quyết các yêu cầu tính toán lớn. Lưới có khả năng thực hiện việc tính toán trên những tập dữ liệu lớn, bằng cách chia nhỏ các tập dữ liệu này thành các tập hợp nhỏ hơn hoặc thực hiện nhiều qui trình tính toán cùng lúc như trên một mánh tính đơn thông qua mô hình phân phối công việc giữa các tiến trình song song. Ngày nay, việc phân phối tài nguyên trên lưới tuân theo chuẩn SLA (service level agreement).


Thông qua đề tài này chúng tôi mong muốn tìm hiểu sơ lược về một mô hình tính toán với hiệu năng cao, tận dụng được tài nguyên của máy tính. Đang là mô hình tính toán được thế giới quan tâm phát triển.

I. Một số khái niệm cơ bản
1.1. Khái niệm

Trong những năm gần đây, tính toán lưới – grid computing nổi lên như một nền tảng hỗ trợ tính toán phân tán trên những bộ dữ liệu lớn, thực hiện những công việc tính toán phức tạp. Tư tưởng của Grid là kết hợp sức mạnh tính toán của hàng trăm, hàng nghìn máy tính bình thường nằm phân tán về mạnh địa lý, tạo thành một cơ sở hạ tầng tính toán tổng hợp tương đương hoặc thậm chí vượt xa sức mạnh của những siêu máy tính hiện đại đắt tiền.

Michael Di Stefano đưa ra định nghĩa về tính toán lưới như sau:

“Tính toán lưới là bất kỳ cụm tài nguyên tính toán nào cung cấp môi trường hỗ trợ chia sẻ và quản lý tài nguyên cho các công việc phân tán dựa trên chính sách nào đó”.

Còn Ian Foster đưa ra ba đặc điểm của một lưới thực sự :

• Phối hợp sử dụng tài nguyên mà không dựa trên điều khiển tập trung.

• Sử dụng các giao thức chuẩn và có tính mở rộng.

• Cung cấp chất lượng dịch vụ không tầm thường, theo nghĩa tài nguyên hoạt động kết hợp trên môi trường lưới tạo ra chất lượng dịch vụ tốt hơn nhiều so với tổng chất lượng dịch vụ của các tài nguyên đơn lẻ.

Hiện nay, nhiều người vẫn lẫn lộn khái niệm “tính toán lưới” với “tính toán ngang hàng”. Cả hai có điểm chung là cùng giải quyết bài toán chia sẻ tài nguyên phân tán giữa các tổ chức ảo , cùng được xây dựng dựa trên kiến trúc phân tầng, và mỗi hướng tiếp cận có điểm mạnh, điểm yếu riêng. Lưới được xây dựng trên nền tảng kiến trúc chặt chẽ, phục vụ cộng đồng người dùng quy mô nhỏ, thường nằm trong cùng lĩnh vực nghiên cứu mà họ quan tâm, hỗ trợ khả năng tích hợp tài nguyên mạnh mẽ đa dạng hơn tính toán ngang hàng. Ứng dụng trên lưới thường là ứng dụng khoa học, đòi hỏi khả năng tính toán cao, và hướng người dùng. Ngược lại, tính toán ngang hàng được xây dựng trên nền kiến trúc linh hoạt hơn, phục vụ cho một số lượng lớn người dùng, có thể lên đến hàng triệu, chủ yếu hỗ trợ ứng dụng chia sẻ tài nguyên như chia sẻ chu kỳ tính toán hoặc tệp.


1.2. Cấu trúc mô hình tính toan lưới:



Hình 1


1.3. Các chức năng chung
Tính toán lưới tạo ra một mô hình để giải quyết các bài toán tính toán lớn bằng cách sử dụng những tài nguyên rỗi (CPU, và thiết bị lưu trữ) của một loạt các máy tính riêng rẽ, thường là máy để bàn, hệ thống này được coi là một một cụm máy ảo nhúng trong một môi trường liên lạc phân tán. Tính toán lưới tập trung vào khả năng hỗ trợ tính toán giữa các khu vực hành chính, điều này làm cho mô hình này tách biệt so với mô hình cụm tính toán và tính toán phân tán truyền thống.
Lưới cung cấp một giải pháp cho những bài toán về tính toán hiệu năng cao như tạo nếp protein, mô hình hoá tài chính, mô phỏng động đất và dự đoán khí hậu thời tiết. Ngoài ra lưới còn có thể giúp các tổ chức, doanh nghiệp sử dụng một cách tối ưu hoá tài nguyên công nghệ thông tin và tạo ra các dịch vụ tính toán theo nhu cầu cho các khách hàng thương mại và miễn phí trong đó khách hàng chỉ phải trả những gì họ đã sử dụng giống như điện và nước.
Tính toán lưới được thiết kế với mục tiêu giải các bài toán tính toán quá lớn cho một siêu máy tính, trong khi vẫn giữ được sự linh hoạt đối với những bài toán nhỏ hơn. Vì vậy tính toán lưới cung cấp một môi trường đa người dùng. Mục tiêu thứ hai của tính toán lưới là khả năng khai thác tốt hơn những năng lực tính toán chưa được sử dụng và phục vụ cho những nhu cầu tính toán không ngừng của các bài toán khoa học lớn.
Điều này dẫn đến việc sử dụng các cơ chế cấp phép an toàn để cho phép những người sử dụng ở xa có thể điều khiển các tài nguyên tính toán từ xa.
Tính toán lưới thực hiện sử dụng các chuẩn mở để chia sẻ qua mạng những tài nguyên hỗn tạp (trên những nền tảng kiến trúc phần mềm, phần cứng và ngôn ngữ lập trình khác nhau), nằm tại những địa điểm khác nhau tuỳ thuộc vào các khu vực hành chính. Nói một cách đơn giản, nó là việc ảo hoá các tài nguyên tính toán.
1.4. Lưới tính toán có thể phân theo ba giai đoạn phát triển:
- Lưới văn phòng
- Lưới công ty
- Lưới toàn cầu.
Những giai đoạn này tương ứng với một công ty bắt đầu tận dụng tài nguyên trong một nhóm đơn như một đơn vị hoặc phòng chuyên về công nghệ kết nối các máy tính để bàn, các cụm và thiết bị. Lưới sẽ phát triển để trở thành lưới của toàn công ty khi các tài nguyên của các phòng ban còn lại có thể sử dụng để lưu trữ và tận dụng tài nguyên CPU. Một lưới toàn cầu là sự kết nối của các lưới phòng ban và hãng, lưới này sẽ được sử dụng theo kiểu thương mại và cộng tác.
1.4. Tính toán lưới là một loại hình đặc biệt của tính toán phân tán.
Mô hình khái niệm
Bản chất của tính toán lưới giống một nền tảng dạng khái niệm hơn là một tài nguyên vật lý. Lưới được tận dụng để cung cấp tài nguyên cho một nhiệm vụ tính toán. Mục tiêu của công nghệ lưới liên quan tới những yêu cầu của việc cung cấp tài nguyên linh hoạt vượt ra khỏi các khu vực cục bộ.
Tổ chức Ảo
Một môi trường lưới được tạo ra để giải quyết các nhu cầu về tài nguyên. Những tài nguyên này(như CPU, ổ lưu trữ, dữ liệu, các chương trình phần mềm, các thiết bị ngoại vi) thường nằm ở ngoài các khu vực cục bộ. Phương thức cung cấp ngoài này đòi hỏi phải tạo ra một khu vực khác được nhắc đến với cái tên là Tổ chức ảo(Virtual Organization – VO) với một tập riêng rẽ các chính sách quản lý ( các chính sách quản lý cục bộ và các chính sách quản lý tài nguyên bên ngoài tạo thành các chính sách của VO. Ngữ cảnh được tạo ra cho một nhiệm vụ tính toán lưới được phân biệt bằng những yêu cầu được tạo ra khi thực thi ngoài các khu vực cục bộ. Công nghệ Lưới được tận dụng để làm cho việc chuẩn hoá và thống nhất với ngữ cảnh lưới liên quan tới việc thực thi ứng dụng của bạn.
Tận dụng tài nguyên.
Một đặc điểm mà hiện tại phân biệt tính toán lưới và tính toán phân tán là sự trừu tượng hoá của một tài nguyên phân tán thành một tài nguyên lưới. Một kết quả của sự trừu tượng này là nó cho phép việc thay thế tài nguyên trở nên dễ dàng hoàn thành. Vài chi phí liên quan tới sự linh hoạt này nằm ở tầng phần mềm trung gian và thời gian trễ liên quan tới việc truy nhập vào một tài nguyên lưới hoặc tài nguyên phân tán. Những chi phí, đặc biệt là thời gian trễ, phải được đánh giá khi đánh giá sự ảnh hưởng của tới hiệu năng tính toán của một tài nguyên lưới.
Các tài nguyên web hoặc việc truy nhập các tài nguyên web là một phương pháp hấp dẫn để cung cấp tài nguyên lưới. Một sự phát triển gần đây của phần mềm trung gian lưới GGF đã sửa lại kiến trúc và thiết kế của khái niệm tài nguyên lưới bằng cách sử dụng ngôn ngữ mô tả dịch vụ web WSDL của W3C để triển khai một tài nguyên lưới. Các ứng dụng chuyển đổi từ việc sử dụng các tài nguyên liên quan tới vị trí địa lý sang việc sử dụng các tài nguyên web cần quan tâm tới bản chất phi ranh giới của web trong khi vẫn đảm bảo khả năng mở rộng cho web.


II.Nền tảng của tính toán lưới (Grid computing)

Tính toán mạng lưới (grid) ngày nay không còn là một giải pháp hàn lâm hay thử nghiệm. Với những tiến bộ quan trọng về phần mềm triển khai, người ta hy vọng nó sẽ đem sức mạnh của siêu máy tính tới tất cả người dùng PC đơn lẻ trên thế giới.

2.1. Grid là gì và hoạt động như thế nào?

Grid là một loại hệ thống phân tán, bố trí song song, cho phép linh hoạt chia sẻ, tuyển lựa và tập hợp các nguồn tài nguyên độc lập và rải rác về địa lý, tùy theo khả năng sẵn có, công suất, hoạt động, chi phí và yêu cầu về chất lượng dịch vụ của người sử dụng.




Hình 1: Mô hình tính toán lưới


Điện toán mạng lưới (ĐTML) có nghĩa là tất cả hoặc một phần của một nhóm máy tính, máy chủ và thiết bị lưu trữ trong mạng doanh nghiệp, được “ảo hóa” (virtualize) thành một cỗ máy tính lớn. Vì ĐTML giải phóng những khả năng tính toán không được sử dụng vào một thời điểm bất kỳ, chúng có thể cho phép các doanh nghiệp tăng cường rất nhiều về tốc độ, sức mạnh xử lý thông tin và sự liên kết, thúc đẩy các quy trình tính toán mật độ cao. Trong khi đó, chi phí vẫn sẽ được giữ ở mức thấp vì ĐTML có thể được xây dựng từ chính hạ tầng hiện có, góp phần đảm bảo sự huy động tối ưu các khả năng tính toán.


ĐTML cho phép ảo hóa các chức năng tính toán phân tán cũng như các nguồn xử lý, băng thông mạng và khả năng lưu trữ, để từ đó tạo ra một hệ thống đơn đồng nhất, cho phép người sử dụng và các ứng dụng truy cập thông suốt vào các tính năng điện toán rộng lớn. Giống như người lướt web xem một nội dung thống nhất qua web, người sử dụng ĐTML cũng nhìn thấy một máy tính ảo cực lớn duy nhất.






Hình 2: Mô hình tính toán lưới dựa trên Internet


Trọng tâm của ĐTML dựa trên một tập hợp mở của nhiều chuẩn và giao thức, ví dụ Kiến trúc dịch vụ lưới mở (OGSA), cho phép liên lạc qua nhiều môi trường hỗn tạp và phân tán về địa lý. Với ĐTML, các tổ chức và doanh nghiệp có thể tối ưu hóa khả năng tính toán và các nguồn dữ liệu, tập trung chúng lại thành những khối sức mạnh lớn, chia sẻ chúng qua mạng và thúc đẩy sự phối hợp, tương tác.

Giả dụ, khi một người có chiếc máy tính cá nhân tham gia đóng góp sức mạnh xử lý trong một mạng lưới grid muốn chạy một ứng dụng đòi hỏi thêm sức mạnh xử lý thì công việc đang được giải quyết trên chiếc máy đó sẽ được tự động tái phân bổ tới một máy khác trong lưới đang “rảnh rỗi” và không bị trưng dụng sức mạnh tính toàn vào công việc nào.



Hình 3


Xây dựng một lưới grid có thể đơn giản như việc cho phép một số lượng nhỏ PC hoặc server hoặc mạng lưu trữ tận dụng những khả năng chưa được khai thác hết. Từ một quy mô triển khai ban đầu nhỏ, người sử dụng có thể dần dần hoặc lập tức mở rộng lưới tùy theo nhu cầu của doanh nghiệp. Lưới này không chỉ có thể liên kết các quy trình hoạt động của một bộ phận mà có thể phối hợp các phòng ban với nhau hoặc thậm chí liên kết sức mạnh hạ tầng của một số doanh nghiệp độc lập.
2.2. Ích lợi của tính toán lưới:
ĐTML có thể đem lại những ích lợi rất rộng lớn. Nó tăng tốc độ xử lý để rút ngắn thời gian thu được kết quả, từ đó cho phép tiết kiệm thời gian và tài nguyên phục vụ cho việc giải quyết những vấn đề mà trước đó chưa được xử lý. ĐTML nâng cao năng suất và sự phối hợp trong doanh nghiệp bằng cách cho phép các bộ phận và phòng ban phân tán ở nhiều nơi tạo ra các “tổ chức ảo” để chia sẻ dữ liệu và tài nguyên. Grid khiến cho hạ tầng hoạt động của doanh nghiệp linh hoạt hơn với việc cho phép truy nhập lập tức vào hệ thống tính toán và các kho dữ liệu để “cảm nhận” và phản hồi kịp thời những yêu cầu. Grid cũng góp phần đảm bảo khai thác tốt nhất các khả năng tính toán hiện có của một công ty dựa trên những khoản đã đầu tư. Triển khai ĐTML cũng góp phần tránh được nguy cơ phân bổ tài nguyên không cân đối xảy ra rất phổ biến và tránh được các chi phí phát sinh. Một ích lợi lớn khác của ĐTML là nó giải phóng các bộ phận quản lý CNTT khỏi gánh nặng của việc quản lý các hệ thống không đồng nhất.

So sánh grid với các công nghệ khác:
So với khái niệm cluster và điện toán phân tán khác, grid có điểm chung là đem các nguồn sức mạnh tính toán lại làm một nhưng khác ở chỗ nó không cần có sự giới hạn về không gian địa lý hay sự đồng nhất về nền điều hành. Khác biệt cơ bản giữa khái niệm cluster (bó) với grid (lưới) chủ yếu nằm ở phương thức quản lý các nguồn tài nguyên. Đối với cluster, việc phân bổ tài nguyên được thực hiện bởi một đối tượng quản lý tài nguyên trung tâm và tất cả các nút (node) mạng hoạt động phối hợp với nhau như một nguồn đơn thống nhất. Đối với grid, mỗi nút có đối tượng quản lý tài nguyên riêng và các nguồn tài nguyên độc lập trong lưới có thể trải rộng khắp một hoặc nhiều tổ chức.


Trên thực tế grid không phải là một cuộc cách mạng mới mà có thể coi nó là một bước tiến hóa trong công nghệ điện toán phân tán, giống như web, chia sẻ file ngang hàng và các công nghệ ảo khác. Giống như web, ĐTML giảm bớt tính phức tạp khi mà nhiều người cùng khai thác một nền hoạt động thống nhất. Cái khác của nó đối với web chủ yếu là sự hỗ trợ liên lạc. So với mạng ngang hàng (P2P), ĐTML có điểm chung là cho phép người sử dụng chia sẻ file nhưng khác ở chỗ việc chia sẻ đó không chỉ là các file mà có thể là nhiều tài nguyên khác. So với các công nghệ ảo khác, grid giống ở chỗ cho phép ảo hóa các nguồn lực CNTT. Điểm khác là trong khi đối tượng và mục tiêu của các công nghệ ảo là một hệ thống đơn thì grid cho phép ảo hóa những nguồn tài nguyên tản mát và vô cùng rộng lớn.

Grid đã được thương mại hóa như thế nào?
Các nhà cung cấp giải pháp điện toán hàng đầu thế giới như Oracle, IBM, HP, Dell, Microsoft và Sun đều đã và đang có sách lược đầu tư lớn vào việc phát triển các sản phẩm và dịch vụ ĐTML.

Thiết lập một hệ thống ĐTML không đơn thuần chỉ là có một mạng máy tính tốc độ cao. Yếu tố quan trọng nhất chính là một nền phần mềm điều phối sức mạnh của các máy tính tham gia đóng góp sức mạnh nhiều dạng khác nhau trong lưới.

Trên thị trường đã xuất hiện những nền phần mềm thương mại hoặc dịch vụ phục vụ cho việc này. Ví dụ, Oracle đã tung ra thị trường Application Server 10g, được coi là phần mềm trung gian đầu tiên giúp đơn giản hóa việc quản lý các ứng dụng chạy trên môi trường ĐTML. Đây là một bộ sản phẩm gồm khoảng 600 cải tiến trong ứng dụng tích hợp và cơ sở hạ tầng các dịch vụ Web.

Oracle Application Server 10 được xây dựng dựa trên các chuẩn mở, tạo ra một nền tảng thống nhất cho các khả năng hỗ trợ yêu cầu đa dạng của một doanh nghiệp thương mại điện tử, bao gồm các chức năng hỗ trợ như phần mềm cổng dành cho doanh nghiệp, lưu trữ tốc độ cao, tình báo doanh nghiệp, quản lý đồng nhất, phát triển ứng dụng nhanh, kết nối không dây và các dịch vụ Web. Oracle Application Server 10g cũng là sản phẩm trung gian duy nhất trong ngành giải pháp điện toán doanh nghiệp được trang bị các công nghệ tích hợp và ĐTML lắp sẵn.

Với việc đưa thêm khả năng ĐTML, phần mềm Application Server 10g giúp khách hàng giảm thời gian, sức lao động và chi phí cho việc quản lý CNTT bằng cách kết hợp các hệ thống máy chủ, hệ thống lưu trữ và các phần mềm cần thiết. Kết quả là các doanh nghiệp có thể sử dụng sức mạnh của toàn bộ hệ thống hay lưới cho tất cả các ứng dụng dành cho doanh nghiệp chứ không phải mua thêm tính năng cho các ứng dụng riêng biệt. Oracle Application Server 10g được cung cấp với ba phiên bản: Java Edition (giá 5.000 USD tính trên một bộ vi xử lý hoặc 100 USD/một người sử dụng), Standard Edition (10.000 USD/bộ vi xử lý hoặc 200 USD/người sử dụng) và Enterprise Edition (20.000 USD/bộ vi xử lý hoặc 400 USD/một người sử dụng).

Trong khi đó, Sun Microsystems gần đây tung ra một mô hình dịch vụ với cách tiếp cận khác. Họ gọi đây là cơ chế thu tiền tính theo người sử dụng đầu tiên áp dụng đối với kiến trúc ĐTML. Với chi phí khởi điểm là 1 USD/bộ xử lý/giờ, dịch vụ tính toán theo lưới này của Sun được cung cấp theo từng gói tính bằng tiếng đồng hồ. Sun khẳng định mô hình này có thể cho phép khách hàng khai thác sức mạnh tính toán giống như sử dụng các tiện ích thông thường như điện thoại, điện gia dụng hay nước…từ hạ tầng của nhà cung cấp dịch vụ.

Một số lợi thế khá rõ ràng:

1) Không cần phải mua các máy chủ SMP lớn cho các ứng dụng mà có thể được tách ra và nuôi ra các máy chủ nhỏ hơn (trong đó chi phí ít hơn so với các máy chủ SMP). Kết quả sau đó có thể được nối và phân tích khi công việc (s) hoàn thành.

2) Phần lớn hiệu quả hơn sử dụng các nguồn lực nhàn rỗi. Việc làm có thể được nuôi ra máy chủ nhàn rỗi hoặc thậm chí máy tính để bàn nhàn rỗi. Nhiều người trong số các nguồn lực này ngồi nhàn rỗi đặc biệt là trong thời gian off giờ làm việc.

3) Grid môi trường, nhiều hơn modular và không có điểm duy nhất của thất bại. Nếu một trong các máy chủ / máy tính để bàn trong lưới điện không có nhiều nguồn lực khác có thể chọn tải. Việc làm có thể tự động khởi động lại nếu thất bại xảy ra.

4) Các chính sách có thể được quản lý bởi các phần mềm lưới. Một số các lưới cho phép các phần mềm phổ biến nhất bao gồm Platform LSF, Sun Grid Engine, liệu Synapse, PBS, Condor, UnivaUD, trong số những người khác. Mỗi làm tốt công việc giám sát tài nguyên và đệ trình công việc quản lý dựa trên các công cụ chính sách nội bộ.

5) quy mô mô hình này rất tốt. Cần thêm các nguồn tài nguyên tính toán chỉ cần cắm chúng vào lưới khách hàng bằng cách cài đặt trên máy tính để bàn hoặc máy chủ bổ sung. Họ có thể được gỡ bỏ cũng như dễ dàng trên bay.

6) Nâng cấp có thể được thực hiện trên bay mà không có lịch trình thời gian chết. Vì có quá nhiều tài nguyên một số có thể được thực hiện offline, trong khi để lại đủ cho công việc để tiếp tục. Bằng cách này có thể được nâng cấp cascaded như không có hiệu lực các dự án đang tiếp diễn.

7) Việc làm có thể được thực hiện trong thực hiện tăng tốc song song. Sử dụng những thứ như Bộ KH & ĐT sẽ cho phép tin nhắn qua để xảy ra giữa các tài nguyên tính toán.

Một số disadvatages:

1) Đối với các ứng dụng bộ nhớ đói mà không thể tận dụng lợi thế của MPI bạn có thể bị buộc để chạy trên một SMP lớn

2) Bạn có thể cần phải có một kết nối nhanh giữa các tính toán các nguồn lực (gigabit ethernet ở mức tối thiểu). Infiband cho Bộ KH & ĐT mạnh ứng dụng

3) Một số ứng dụng có thể cần phải được tinh chỉnh để có đầy đủ lợi thế của mô hình mới.

4), cấp phép trên nhiều máy chủ có thể làm cho nó cấm đối với một số ứng dụng. Các nhà cung cấp đang bắt đầu được linh hoạt hơn với môi trường như thế này.

Khu vực đã được tận dụng tốt của tính toán lưới bao gồm tin sinh học, cheminformatics, khoan dầu và, và các ứng dụng tài chính.

Với lợi thế được liệt kê ở trên, bạn sẽ bắt đầu để xem con nuôi lớn hơn nhiều của Grids mà nên lợi ích tất cả mọi người tham gia





Hình 4


III. Mốt số thành phần cơ trong mô hình tính toán lưới

Môi trường lưới có thể phân thành 3 lớp:
3.1. Lớp ứng dụng (Grid Application)
Lớp ứng dụng rất phong phú, chẳng hạn, từ việc truy xuất dữ liệu qua điện thoại di động đến những hệ mô phỏng xử lý một lượng dữ liệu lớn để có thể quan sát quá trình diễn biến của một thí nghiệm khoa học nào đó
3.2.Lớp cơ sở hạ tầng (Grid Infrastructures)
Lớp hạ tầng cơ sở gồm hệ thống máy tính, siêu máy tính, các hệ lưu trữ, hạ tầng truyền dẫn và Internet
3.3.Lớp giữa (Grid Middleware).
Còn lớp giữa cung cấp cho lớp ứng dụng và lớp cơ sở hạ tầng những giao thức được chuẩn hóa, tạo khả năng truy cập lưới dễ dàng, thuận tiện.

Có thể xem lớp giữa là một PM hệ thống nằm giữa lớp PM ứng dụng và hệ điềuhành, nhằm cung cấp các dịch vụ (DV) cho các ứng dụng như DV khám phá tài nguyên (Discovery), lưu trữ (Storage), thực thi (Execution), thôngtin (Information), theo dõi tài nguyên (Resource Monitoring), kiểm lỗi và phục hồi (Failure Detector and Recovery)… Đây là những DV cốt lõi đểcho người dùng tham gia vào môi trường lưới. Tùy theo yêu cầu của người dùng, lớp ứng dụng sẽ tạo cho người dùng một nền tảng ứng dụng (Platform) thích hợp.

IV. Từ tính toán lưới đến tính toán đám mây

Ở nước ta trong mấy năm qua, báo chí đã đề cập với những tên gọi khác nhau mà thuật ngữ tiếng Anh là “Grid computing” và “Cloud computing”. Nào là mạng lưới máy tính, mạng lưới tính toán, điện toán lưới, tính toán đám mây, điện toán đám mây, điện toán máy chủ ảo…Ở đây, tôi dùng cụm từ “tính toán lưới” (Grid computing) và “tính toánmây” (Cloud computing) để chỉ những khái niệm này.

Tính toán lưới đã phát triển rất mạnh trên thế giới để liên kết những hệ thống tính toán với nhau nhằm giải những bài toán cực lớn. Hệ thống bao gồm phần cứng, phần mềm (PM), đường truyền và hàng bao nhiêu thiết bị khác…trong những không gian thích hợp tạo một môi trường tính toán gọi là môi trường lưới.

Nói đến tính toán lưới là nói đến những cơsở hạ tầng cực mạnh, những siêu máy chủ, những thiết bị lưu trữ lớn,những clusters, những PM ứng dụng và sự quản trị hệ thống phức hợp; là nói đến tính toán song song, phân chia thời gian, các thuật toán tối ưu xử lý phân bố tài nguyên tính toán, lưu trữ…Những mô hình tính toán lưới gần đây cũng tiếp cận đến cách khai thác PM như một DV, khai thác nền tảng như một DV, đã có DV máy chủ ảo... và thực sự chúng đã chuyển hoá dần sang tính toán mây. Tính toán mây đều có những đặc điếm nói trên của tính toán lưới, nhưng còn phát triển cao hơn ở những khía cạnh sau:

Tính toán mây là một mô hình tính toán năng động cao, có khả năng mở rộng đến các tài nguyên ảo trên Internet. Hạ tầng cơ sở của tính toán mây được khai thác như một DV (IaaS –Infrastructure as aService). Người dùng không phải đầu tư vốn vào thiết bị và không phảilo bảo trì thiết bị và hàng nhiều công việc khác liên quan mà chỉ chịuchi phí khai thác thiết bị ảo trên Internet do nhà cung cấp phân bố,quản lý. Người dùng truy cập đến tính toán mây thông qua các DV Webservices.




Hình 5: Mô hình tính toán mây (hình lấy trên Internet)

Nền tảng của một ứng dụng nào đó được khai thác nhưmột DV (PaaS- Platform as a Service). Người dùng không phải chịu chiphí cho toàn bộ nền tảng của ứng dụng mà chỉ chịu chi phí cho phần nềntảng nào được sử dụng.

PM được khai thác như một DV(SaaS-Software as a Service). Không phải trả bản quyền cho PM mà ngườidùng chỉ trả tiền khai thác PM đó.

Tiện ích tính toán (UtilityComputing). Người dùng chỉ chịu chi phí cho những tài nguyên, tiện íchđược khai thác, không khác gì trả tiền điện, tiền nước theo đồng hồ đomà ta đã rất quen thuộc trong cuộc sống hàng ngày. 

V. Một số ứng dụng thực tiễn
4.1. Nhìn ra thế giới

IBMnói nhiều đến một cơ sở hạ tầng thông minh. IBM phối hợp với ĐH TexasMedical Branch (UTMB) sử dụng Big Blue (siêu máy tính ảo) để xác địnhcác hợp chất hóa học có nhiều khả năng ngăn chặn sự lây lan của viruscúm gia cầm và các loại virus khác. Dự án nghiên cứu nhân đạo này sửdụng một nguồn lực tính toán lớn đến hàng triệu máy tính của hơn400.000 người sẵn sàng hiến thời gian máy của họ cho việc xử lý. DV IBMSmart Business (IBM kinh doanh thông minh) với công nghệ tính toán mâycung cấp cho người dùng khả năng nâng cao chất lượng công việc, đảm bảoan toàn thông tin và tìm kiếm mô hình kinh doanh sáng tạo. IBM đang sởhữu một mạng lưới tính toán mây rất lớn.

Ngoài lắp đặt ở nước ta, IBM còn có những trung tâmkhác như ở Hàn Quốc, Ấn Độ, Brazil…Tháng 5/2008, IBM cho ra mắt siêumáy tính Road Runner (trị giá 133 triệu USD), tốc độ tính toán đạt 1triệu tỷ phép tính/giây(petaflop).

Chúng ta liên tưởng đếnnhững máy tính “cực lớn” của IBM trước đây và các trung tâm tính toántập trung mà người dùng chỉ có thể tiếp cận thông qua các máy trạmtrong những năm 60, 70 của thế kỷ trước. Thời kỳ “tập trung cửa quyền”ấy qua đi, nhường chỗ cho các máy tính cá nhân để bàn (PC) làm việctrong môi trường khách/chủ (client/server), rồi tiếp đến là hình thànhcác mạng máy tính mà nổi bật là mạng Internet. Ngày nay, sự hình thànhtính toán mây với những TTDL cực lớn, người dùng có thể truy cập nhờWeb services bằng các phương tiện như điện thoại di động, netbook,desktop…, làm chúng ta lại nghĩ đến một sự tập trung mới! Nhưng lần nàylà sự tập trung tiến bộ, nâng cao, ảo hóa. 

4.2. Vài nét trong nước

Ở nước ta đã có những đề tài nghiên cứu về tính toán lưới như đề tài Xâydựng dữ liệu lưới cho khí tượng Việt Nam (Construction a Data Grid forMeteorology in Viet Nam) của Đại học Bách khoa Hà Nội và nhiều đề tàikhác của Viện CNTT- Viện Khoa học Công nghệ Việt Nam và của chươngtrình Nghiên cứu cấp nhà nước KC-01.

VN, đã đồng hành cùng thếgiới vào “tính toán mây”. Bộ KH&CN phối hợp với hãng IBM xây dựngcổng thông tin VIP (Vietnam Information for Science and TechnologyAdvance Innovation Portal) với công nghệ tính toán mây từ năm 2007 nhằmtạo một môi trường sáng tạo cho các nhà nghiên cứu, giảng viên, sinhviên các trường ĐH chia sẻ thông tin, thiết lập một cộng đồng hợp tácnghiên cứu. Ngay từ năm 2005, CISCO cũng đã giới thiệu một mô hìnhchuẩn Trung tâm dữ liệu (Data Center) tính toán lưới có khả năng tíchhợp các DV web và khả năng tự động hoá cao cho các doanh nghiệp lớnngành ngân hàng - tài chính. Tại TPHCM và Hà Nội đã có nhiều Trung tâmdữ liệu (TTDL) đạt tiêu chuẩn của Hiệp hội Viễn thông Quốc tế TIA, nhưcủa FPT Telecom, CMC Telecom, Ngân hàng Sài gòn Thương tín- Sacombank.Ngân hàng Đông Nam Á... Tất cả đều cho biết nhờ dùng công nghệ tínhtoán lưới đã tiết kiệm đến 50% chi phí…
4.3. Một số lưu ý
Ở nướcta, Bộ KHCN đã sớm quan tâm đến vấn đề này. Bộ đã tổ chức hội thảo và đã có một số đề tài nghiên cứu, một số dự án được triển khai. Mặt khácBộ cũng rất quan tâm đến một hướng có tính nền tảng là PM nguồn mở(PMNM), là một trong những vấn đề cũng có tính cốt lõi cho phát triểntính toán mây. Tuy nhiên, nên triển khai:
Nghiên cứu xây dựngmột chiến lược phát triển tính toán mây ở nước ta. Chiến lược này sẽtrả lời cho câu hỏi khi hàng loạt các cơ sở tính toán hay là các TTDLcủa nhiều cơ quan, tổ chức doanh nghiệp được trang bị hàng chục năm naytrên cơ sở những công nghệ cũ, bây giờ sẽ phát triển tiếp như thế nào?Sẽ chuyển dần đến tính toán mây như thế nào? Trong tính toán mây thìnơi nào cần có TTDL riêng, nơi nào thuê DV và thuê ở cấp độ nào, loạiDV gì? Câu hỏi này càng phức tạp khi chúng ta đầu tư phát triển hạ tầngcơ sở cho việc đẩy mạnh phát triển chính phủ điện tử.
Cần cóchính sách tâp hợp được lực lượng nghiên cứu có năng lực tham gianghiên cứu lĩnh vực này. Một số trường ĐH lớn nên có nội dung đào tạotính toán mây mà không chỉ dừng lại ở bộ môn tính toán song song như ởcác trường trước đây đã có.
Cần tiếp tục đẩy mạnh việc dùng PMnguồn mở để chuẩn bị sẵn sàng đón nhận công nghệ tính toán mây. Cần cónhững chính sách thỏa đáng thu hút nhân lực cũng như đầu tư vào PMNM. 

4.4. Các tổ chức hỗ trợ và phát triển tính toán lưới
Diễn đàn điện toán lưới toàn cầu GGF

Diễn đàn Grid toàn cầu có mục đích định nghĩa các đặc tả cho tính toán lưới. GGF được phát triển với hợp tác giữa khu vực công nghiệp và khoa học với những hỗ trợ quan trọng từ cả hai khu vực này.
Tổ chức Globus Alliance

Globus Alliance triển khai một số chuẩn được phát triển tại diễn đàn GGF thông qua bộ phần mềm lưới trung gian Globus Toolkit. Với chức năng là một thành phần trung gian trong kiến trúc lưới, bộ phần mềm này cung cấp nền tảng chuẩn để thiết lập các dịch vụ trên lưới tính toán, nhưng tính toán lưới còn cần có nhiều thành phần khác và rất nhiều công cụ để thiết lập và duy trì môi trường lưới.

Globus đã triển khai được các giao thức do GGF định nghĩa để cung cấp các tính năng như:

1. Quản lý tài nguyên: thông qua giao thức phân phối và quản lý tài nguyên - GRAM( Grid Resource Allocation & Management).

2. Các dịch vụ thông tin: Dịch vụ kiểm soát và khai phá thông tin - MDS(Monitoring and Discovery Service)

3. Các dịch vụ bảo mật: Nền tảng bảo mật lưới - GSI(Grid Security Infrastructure)

4. Di chuyển và quản lý dữ liệu: Giao thức truy nhập toàn cầu tới một nơi lưu trữ thứ cấp - GASS(Global Access to Secondary Storage) và GridFTP

Rất nhiều công cụ kết hợp với Globus để tạo ra một nền tảng lưới mạnh, rất hữu ích cho cộng đồng tính toán hiệu năng cao như:

o WebCom và WebCom-G

o Gridbus Grid Service Broker

o Grid Portal Software như GridPort, OGCE and GridSphere

o Grid Packaging Toolkit (GPT)

o MPICH-G2 (Grid Enabled MPI)

o Network Weather Service (NWS) (phần mềm quản lý chất lượng dịch vụ)

o Condor (Tận dụng tài nguyên CPU) và Condor-G (Đệ trình công việc)

o HPC4U Middleware (Phần mềm trung gian có khả năng chịu lỗi và hỗ trợ SLA)

Các dịch vụ web dựa trên XML cung cấp một phương thức để truy nhập tới các dịch vụ và ứng dụng rải rác trong một môi trường phân tán. Từ năm 2003, cộng đồng tính toán lưới và dịch vụ web đã thống nhất cung cấp Lưới như một dịch vụ web (Grid Service). Kiến trúc dịch vụ lưới mở OGSA(Open Grid Service Architecture)đã được hình thành để thực hiện khuynh hướng này, nó định nghĩa ra môi trường cung cấp một vài chức năng liên quan tới dịch vụ lưới. Sứ mệnh của OGSA là mô tả và xây dựng một bộ giao diện chuẩn và thao tác có chức năng như một nền tảng chung cho các hệ thống và ứng dụng hỗ trợ lưới.
4.5. Các sản phẩm tính toán lưới thương mại
Các hãng cung cấp dịch vụ tính toán cung cấp các giải pháp lưới dựa trên bộ công cụ Globus Toolkit hoặc theo một kiến trúc riêng của họ. Nhưng một việc vẫn chưa rõ ràng đó là các hãng này cung cấp dịch vụ tính toán theo yêu cầu hay theo kiểu phân cụm.


KẾT LUẬN

Tính toán lưới đã được khoảng vài năm nay, lợi thế của nó rất nhiều. Lưới điện toán có thể được định nghĩa theo nhiều cách nhưng đối với những cuộc thảo luận chúng ta hãy chỉ đơn giản gọi nó là một cách để thực hiện tính toán công việc (ví dụ: perl script, các truy vấn cơ sở dữ liệu, vv) trên một phân phối thiết lập các nguồn tài nguyên thay vì nguồn tài nguyên trung tâm. Trong quá khứ hầu hết các máy tính đã được thực hiện ở silo hoặc lớn SMP như hộp. Thậm chí ngày nay bạn vẫn sẽ thấy các công ty thực hiện các tính toán về SMP hộp lớn (ví dụ của E10K, HP Superdomes). Tuy nhiên, mô hình này có thể khá đắt tiền và cũng không quy mô.

Cùng đến lưới điện toán và bây giờ chúng ta có khả năng phân phối công việc để các thành phần nhỏ hơn bằng cách sử dụng nhiều máy chủ tải phần mềm chia sẻ tải trọng phân phối đồng đều dựa trên nguồn lực và chính sách. Bây giờ thay vì có một gánh nặng rất nhiều máy chủ tải được trải đều trên nhiều máy tính nhỏ hơn mà có thể lây lan xung quanh các địa điểm khác nhau.

TÀI LIỆU THAM KHẢO

[1] What is the Grid? A three points checklist. Ian Foster. http://www-fp.mcs.anl.gov/~foster/Articles/WhatIsTheGrid.pdf

[2] Introduction to Grid computing – IBM Redbook. Bart Jacob, Michael Brown, Kentaro Fukui, Nihar Trivedi. ibm.com/redbooks

[3] Grid FAQ. http://www.gridcomputing.com/gridfaq.html [4]. Grid computing. Joshy Joseph, Craig Fellenstein. Prentice Hall PTR, 2003.

[5]. http://www.gridcafe.org/

[6]. "A Gentle Introduction to Grid Computing and Technologies", http://www.buyya.com/papers/GridIntro-CSI2005.pdf

[7] http://www.eu-egee.org

[8] http://www.pragma-grid.net/

[9] http://www.globus.org/

[10] http://glite.web.cern.ch/glite/


[TxT]

Ví dụ mảng 2 chiều [C/C++]

BAI TAP MANG 2 CHIEU - 29.11.19 /* Viết các hàm thực hiện 1.Nhập vào từ bàn phím ma trận vuông chứa các số nguyên có kích thước n (3&...