Mục tiêu và nội dung nghiên cứu Mục tiêu : Tim hiểu và nghiên cứu về chương trình xử lí tri thức trên các máy tính cụm tại Trung tâm tính toán hiệu năng cao, Trường Đại học Khoa học Tự n
Trang 1ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC KHOA HỌC T ự NHIÊN
> [ « » 2 * * t « « 1 # » [ « wjw » Ị 1* ì ị » *ỊW » Ị » » Ị * r p r ] S « n
TÊN ĐỂ TÀI
Tổ chức xử lí tri thức đ ồn g thời trên các cụm m áy của M áy tính h iệu năng cao
5 TS Nguyễn Văn Tảo
6 Ths Nguyễn Thị Thanh Duyên
7 Ks Lê Trung Nghĩa
HÀ NỘI - 2007
Trang 25 TS Nguyễn Văn Tảo
6 Ths Nguyễn Thị Thanh Duyên
7 Ks Lê Trung Nghĩa
d Mục tiêu và nội dung nghiên cứu
Mục tiêu : Tim hiểu và nghiên cứu về chương trình xử lí tri thức trên các máy tính cụm tại Trung tâm tính toán hiệu năng cao, Trường Đại học Khoa học Tự nhiên, Đại học Quốc gia Hà Nội.
Nội dung :
■ Tim hiểu về hệ thống máy tính hiệu năng cao;
■ Cài đặt và thử nghiệm chương trình GNƯ Prolog;
■ Đề xuất xử lí tri thức trên máy tính cụm.
■ Chương trình thử nghiệm về ngổn ngữ Prolog trên máy tính hiệu nãng cao ;
■ Một số luận vãn tốt nghiệp đại học, cao học liên quan đến đề tài;
■ Bài báo khoa học.
Trang 3f Tình hình kinh phí của đề tài
Tổng kinh phí 20.000.000 đ (Hai mươi triệu đồng chẵn)
KH OA QUẢN LÝ (Ký và ghi rõ họ tên)
GS TS Nguyễn Hữu D ư Dỗ Trung T
TRƯ ỜNG ĐẠI H Ọ C KHOA H Ọ C T ự NHIÊN
CHÚ TR Ì ĐỂ TÀI(Ký và
Trang 4■ MA Thuy TranThi
■ MA Binh DoVan
d Project Objective and Content
Objective : Researching and studying on programs for manipulating knowledge on clusters of High Performance Computer, University of Science, Vietnam National University, Hanoi
C ontent:
■ Studying about High Performance Computer systems;
■ Installing and testing GNU Prolog programs;
■ Proposals of knowledge manipulation in clusters
e Some results
■ Studying about High Performance Computer systems, University of Science, Vietnam National University, Hanoi;
■ Installing and testing GNU Prolog programs on High Performance Computer;
■ Some test programs in GNU Prolog;
■ Thesis concerning the project content;
■ Some articles
Trang 5L ời cám ơn
ĐỀ tài nghiên cứu khoa học cấp Đại học Quốc gia Hà Nội mã số QT0708 xin chân thành cảm ơn :
ũ Ban khoa học Đại học Quốc gia Hà Nội;
□ Trường Đại học Khoa học tự nhiên, đặc biệt Phòng quản ỉý khoa học và
công nghệ, Phòng Tài vụ; Khoa Toán Cơ Tin học,
đã tạo điều kiện cho các cán bộ tham gia đề tài này được nghiên cứu và tìm hiểu, thừ nghiệm về tri thức và xử ỉỉ tri thức trên hệ thống mảy tính hiệu năng cao.
Xin chân thành cám om lãnh đạo, cán bộ nhân viên Trung tâm tính toán hiệu năng cao Trường Đại học Khoa học Tự nhiên, Đại học Quốc gia Hà Nội đã tạo điêu kiện
đẻ đề tài được thực hiện.
Hà nôi, 3 / 2008 Thav mặt đề tài
Trang 6Chủ nhiệm đề tài : PGS TS Đỗ Trung Tuấn,
Khoa Toán Cơ Tin học, trường Đại học Khoa học tự nhiên
Đại học Quốc gia Hà nội
Đe tài nghiên cứu cơ bản đã thực hiện các nhiệm vụ đã đăng kí trong hợp đồng nghiên cứu khoa học, kí giữa
ũ Trường Đại học Khoa học tự nhiên,
Đại diện : GS TS Trần Nghi, Phó Hiệu trường, Trường Đại học Khoa học tự nhiên,
Q Chủ nhiệm đề tài, PGS TS Đỗ Trung Tuấn
Đề tài đã thực hiện các công việc với kinh phí cấp năm 2007 là
20.000.000 đ (hai mươi triệu đồng chẵn)
■ Một số luận văn tổt nghiệp đại học, cao học liên quan đến đề tài;
■ Bài báo khoa học
Hà nội, 15 tháng 3 năm 2008 Chù nhiệm đề tài 201606
Đồ Trung Tuấn
Trang 7M u c lu c
• _#
1 Giới thiệu về hệ thống máy tính hiện năng cao trang 4
2 Cài đặt phần mềm GNƯ Prolog trên máy tính hiệu năng cao trang 11Phần mềm xử lí tri thức GNU Prolog
3 Thử nghiệm chương trình với phần mềm cài đặt trang 17
Trang 86 NgiiVcn thị Thanh Duvên
7 Lê Truns Nghĩaw w
Thời gian thực hiện đề t à i : thán-: 4/ 2C07 - 4/ 2CCS
Trang 91 Giới thiệu về hệ thống máy tính hiệu nảng cao
Máy tính cụm thực chất là liên kết của nhiều bộ xử lí để hợp tác trong việc giải bài toán như một thực thể đom Do vậy quản lí các nhiệm vụ trên các bộ xử lí, quản trị các tài nguyên, như bộ nhớ, thời gian cần đến các kĩ thuật phù hợp
Do máy tính cụm làm việc như một thực thể nên tạo ra một số điểm lợi nổi bật, bao gồm
1 Khả năng tính toán cao, do kết hợp năng lực của nhiều bộ xử lí và thiết bị phức tạp;
2 Quản lí tài nguyên hợp lí Đối với vấn đề yêu cầu tài nguyên, như bộ xử lí, thời gian,
bộ nhớ, thiết bị ngoại vi hệ thống điều phối và kết hợp nhiều tài nguyên nhỏ lẻ với nhau;
3 Sử dụng tối ưu các tài nguyên Máy tính cụm chia sẻ nhiều tài nguyên, có cái nhìn tổng quát về tài nguyên Điều này tạo điều kiện để thực hiện nhiệm vụ một cách hợp
lí, tiến đến tối ưu;
4 Phục vụ theo vùng địa lí Việc chia sẻ tài nguyên với hạ tầng mạng không bị không gian địa lí hạn chế;
5 Đảm bảo phục vụ đều đặn và giảm rủi ro Do tập các bộ xử lí làm việc liên tục, thay thế nhau qua hệ thống quản lí tài nguyên, người dùng được phục vụ liên tục;
6 Khắc phục lỗi Các sau sót, rủi ro trên một máy tính được kiểm định và thực hiện đối chứng trên máy tính khác Một máy tính hỏng sẽ được máy tính khác chia sẻ nhiệm vụ thay thế Máy tính này không nhất thiết ở ngay vùng có sai sót;
7 Phân tán theo các chiều không gian và thời gian Việc dùng chung các bộ xử lí và thiết bị ngoại vi cho phép thể hiện tính phân tán theo nhiều chiều;
8 Quản lí hệ thống tập trung Công ty lớn như IBM cho phép bảo trì các hệ thống cụm phân tán tại một số trạm nhất định Kiến trúc quản lí tập trung là hiệu quả
1.2 Hệ thống máy tính cụm IBM 1600
Máy tính cụm IBM 1600 là kết hợp của các máy tính dịch vụ IBM POWER5™ và POWER5+™ với bộ đa xử lí đối xứng (SMP) Hệ thống điều hành sử dụng là AIX 5L™ hay Linux® Máy tính cụm 1600 sử dụng cho mô hình tính toán đa hướng, cho phép xây dựng
Trang 10v ề liên kết mạng, hệ thống IBM 1600 có thể dùng mạng Ethernet, mạng InfiniBand hay Chuyển mạch hiệu năng cao của IBM Hệ thống được phần mềm quản trị cụm CSM quản lí Đây là công cụ thiết kế phù hợp cho hệ thống máy tính cụm.
1.2.1 Một số nét chung
• Các giải pháp AIX 5L hay Linux là phù họp đổi với mô hình hóa tính toán qui mô lớn, cơ sở dữ liệu lớn và trung tâm dữ liệu hiệu quả, máy tính chủ;
• Hệ thống quản trị cụm CSM cho phép quản lí mềm dẻo, linh động;
• Các tùy chọn kết nối cụm : có thể dùng mạng Ethernet 1/ 10Gb đối với AIX 5L hay Linux, dùng chuyển mạch hiệu năng cao IBM đổi với AIX 5L và CSM;
• Tùy chọn về hệ thống điều hành : AIX 5L thể hệ 5.2 hay 5.3, dùng Server Linux SUSE 8/ 9, dùng Linux Red Hat 4;
• Bộ phần mềm hoàn thiện cho phép tạo, tinh chinhe các ứng dụng song song như ESSL (Engineering & Scientific Subroutine Library), ESSL song song, môi trường song song, Fortran XL, hay VisualAge c++;
• Hệ thong file song song đổi với cụm GPFS, có độ sẵn sàng và hiệu năng cao;
• Phần mềm đặt lịch công việc để tối ưu tài nguyên và thông lượng truyền thông cụm;
• Phần mềm HACMP™ (High Availability Cluster Multiprocessing) cho phép truy cập phần mềm và ứng dụng
1.2.2 Tổng quát về phần cứng
Các máy chủ POWERS+ và IBM POWERS dưới đây là phù hợp với nhau :
• IBM System p5™ 595, 590, 575, 570, 560Q, 550Q, 550, 520Q, 520, 510Q, 510, 505Q và 505
• IBM eServer™ p5 595, 590, 575, 570, 550, 520, và 510
Người ta có thể dùng đến 128 máy chủ hay các máy LPAR, tức hệ thống điều hành máy AIX 5L hay Linux, đối với mỗi cụm, tùy theo phần cứng
Hình 1 Máy tính cụm IBM
Trang 111.2.3 Tham số về bộ xử lí POWER™ dựa trên AIX 5L™ và các cụm Linux m m •
Người ta sử dụng bộ xử lí này nhằm tính toán khoa học, kĩ thuật, dùng cho cơ sở dừ liệu
lớn.
Máy dịch vụ : IBM System p5 595, 590, 575, 570, 560Q, 550Q, 550, 520Q, 520, 510Q,
510, 505Q và 505
■ Bộ xử lí : 1.5 GHz đến 2.3 GHz IBM POWER5+, POWER5
■ Số các máy tính chủ , phần logic (LPAR):
o Có đến 64 bộ với 1 đến 8 nhân SMPs và 128 LPARs
o Có đến 32 bộ với 16 đến 32 nhân SMPs và 128 LPARs
o Có đến 16 bộ với 48 đến 64 nhân SMPs và 128 LPARs
• Liên kết mạng :
o 10/100Mbps Ethernet (AIX 5L hoặc Linux)
o 1/10 Gigabit Ethernet (AIX 5L hoặc Linux)
o 4x/12x GX HCA (AIX 5L hoặc Linux)
o SP Switch2 (AIX 5L và PSSP)
o Chuyển mạch hiệu năng cao Switch (AIX 5L và CSM)
o Myrinet-2000 (AIX 5L và Linux)
1.3 Hệ thống máy tính cụm IBM 1350
Nhiều ứng dụng được xây dựng trong môi trường Windows của Microsoft và Linux, Cá hai hệ thống đều sử dụng cùng tài nguyên, trên cùng thiết bị cứng và hạ tầng mạng máy tính Ngoài ra hai hệ thống điều hành cũng sử dụng mã nguồn mở, cùng dùng sản phẩm của hãng thứ ba khác Để đáp ứng hiện thực khách quan như vậy, máy tính cụm cần có khả năng dù cho tốn kém về chi phí
Công ty IBM thiết kế máy tính cụm IBM 1350 đáp ứng các yêu cầu trên Người dùng có thể làm việc với máy tính hiệu năng cao HPC Họ được sừ dụng các công nghệ tiến tiến của Intel® Xeon®, AMD Opteron™ và của IBM Power Architecture™ trên các nút máy tính chủ Phần mềm quản trị cụm với nối kểt của IBM 1350 được đánh giá sử đụng công nghệ tot của IBM và của hãng khác
Máy tính cụm IBM 1350 được thiết kế để ứng dụng được nhiều trong môi trường thiết
kế công nghệ, dịch vụ tài chính Các lĩnh vực này cần đến quản lí tốc độ cao và khối lượng lớn các thao tác xử lí dữ liệu
1.3.1 Tổng quan về máy tính cụm IBM 1350
Máy tính IBM System Cluster 1350 có tổng quan về hệ thống : Blade servers: HS21, LS21, LS41, JS22, ỌS21; Rack servers: x3455, x3550, x3650, x3655, x3755
về mạng máy tính
• Ethernet
• Blade Network Technologies, Brocade, Cisco, ForcelO, Nortel, Qlogic, SMC
• InfiniBand
Trang 12• Phần mềm quản trị cụm IBM (CSM) cho Linux V I.5.1 (tùy chọn)
• Hệ thống quản trị tệp song song IBM (GPFS) cho Linux V3.2 (tùy chọn)
Qui mô
• Hệ thông trang bị một nút quản trị và một nút dự trữ Tùy theo yêu cầu người dùng, có thể dùng hai đến tối đa là 1,024 nút Tuy nhiên, số bản quyền phần mềm
có thể hạn chế trên một số nút, Có thể sử dụng đến 64 nút được phép lưu trữ
• Cấu hình tối đa là 1,026 nút, gồm cả nút tính toán, nút lưu trừ và nút quàn trị Có thể sử dụng cấu hình cao hơn với xử lí đặc biệt
Các dịch vụ
• Phần cứng cụm 1350 nhất thiết trên bộ nổi 42Ư và 25Ư.
• Các dịch vụ phần mềm HPC và SupportLine cho các cụm Linux Clusters đêu săn
Trang 13sàng, như dịch vụ miễn phí.
• Các dịch vụ trợ giúp cài đặt đã có thône qua CET (Cluster Enablement Team), như phần mềm miễn phí
1.3.3 Thông tin k ĩ th uật chi tiết cùa m áy tính cụm IBM 1350
Máy tính cụm IBiM 1350 có bộ xử lí Intel® Xeon®, AMD Opteron™ và dùno các nút cụm HPC với công nehệ dựa trên IBM Power Architecture™, cho phép thực hiện các giải pháp về Linux hay Windows để tăng hiệu năng tính toán
Máy chủ có thể lựa chọn trong :
■ Bộ xử lí Dual-core AMD Opteron, có khả năns đến 3.0 GHz (x3455)
■ Bộ xử lí Duaỉ-core AMD Opteron có khà năns đến 2.8 GHz AMD Opteron(x3655)
■ Bộ xử lí Dual-core AMD Opteron có khả năng đen 3.0 GHz (x3755)
* Bộ xử lí Duaỉ-Core Intel Xeon có khả năns đến 3.0 GHz, với bus có khả năngđến 1333 MHz, hoặc bộ xử lí Quad-Core Intel Xeon có kha năns đến 2.33 GHz, với bus có khả năng đến 1333 MHz (HS21 XM)
■ Bộ xử lí Dual-Core Intel Xeon có khả năng đến 3.0 GHz, với bus có khả năngđến 1333 MHz, hoặc bộ xừ lí Quad-Core Intel Xeon có khả năne đến 3.0 GHz, với bus có khả năns đển 1333 MHz (HS21)
- Four 64-bit 4.0 GHz POWER6 (JS22)
■ Bộ xử lí Dual-core AMD Opteron có khả năng đến 3.0 GHz (LS21, LS41)
■ Đa bộ xừ lí Multi-core 3.2 GHz Cell Broadband Engine™(QS21)
Hình 2 Máv tính IBiVl 1350
Trang 14số các máy chủ : lên đến 1,024 cluster nodes; 1- to 8-core nodes
Với hạ tầng Ethernet nhanh, hay Ethernet Giga, chuyển mạch này có thể dùng làm chuyển mạch đường trục đối với ứng dụng mức vừa phải
Người dùng có thể thực hiện chia đường IP chất lượng cao trên chuyển mạch này Vậy
có thể dùng nó trong chuyển mạch LAN truyền thống hay mạng Intranet
Chuyển mạch CISCO 3750
Trang 151.5 Cơ chế truy cập máy tính và hạ tầng mạng tại Trung tâm
Việc truy cập mạng chủ tại Trung tâm theo kiến trúc khách/ chủ Người dùna sừ dụna máy đơn
T rao đổi thông qua Putty
■ Bộ nhớ RAM hiện là 2G cho mồi nút
Để lập trình dùng hết năns lực của các cụm máy tínhT người ta có hai cơ chế :
1 Lập trình theo Open MP : cho phép tự động chọn quản trị bộ nhớ chuns tự động chia sẻ tải nguyên;
2 Lập trình theo MPI yêu cầu nsười dùng tự quản li tài nguyên, tự chia công việc ứng với bài toán ra các nhiệm vụ nhỏ
Có hai máy tinh cụm, IBM 1600 và IBM 1350 Thôn2 số k ĩ thuật của hai máy tính này
đã nêu trên Địa chi IP hiện thời của máv IBM 1600 lã 172.72.20.0
■ Máy tính IBM 1600 là cụm 5 máy Mồi máv có 8 CPU Hệ thống điều hành nhận
8 CPU
■ Chuyển mạch Cisco Catalvst 3750 và 3550
A IX A dvanced Interactive executive
16C0
máy
Hình 6 Nối các máy tính qua LAN
Trang 16Việc chuyển dữ liệu, dưới dạng các file trong hệ thống được tiến hành theo :
■ Sử dụng hệ thống điều hành Linux và các lệnh xử lí file; hoặc
■ Sử dụng cơ chế giao diện Windows với Linux
Hình 7 Hệ thống điều hành trên một số máy
Từ máy trạm trong Trung tâm tính toán hiệu năng cao, người ta có thể truy cập mạng Internet qua máy chủ của Đại học Quốc gia Hà Nội, hay qua máy chủ VDC, nhờ đường thuê bao ADSL Hệ quản trị mạng tại Trung tâm là NIS (network information service), và Windows NT sử dụng TCP/IP
AIX
Hình 8 Nổi mạng với INTRANET của đại học Quốc gia Hà nội
Trang 172 Phần mềm xử lí tri thức GNU Prolog
2.1 về GNU Prolog
GNƯ Prolog là chương trình dịch Prolog với việc giải các ràng buộc trên lĩnh vực vô hnạ
do Daniel Diaz phát triển
Ngôn ngữ này chấp nhận Prolog và chương trình với ràng buộc, sinh các mã nhị phân, giống như gcc sinh ra từ chương trình ngôn ngữ c
Chương trình trực khai thu được sau khi dịch và liên kết là chương trình chạy độc lập Kích thước của chương trình nhỏ do GNU Prolog có thể tránh việc liên kết đến các vị từ không cần thiết của quá trình xử lí tri thức Vậy nên hiệu quả của GNƯ Prolog cao
Ngoài việc dịch ra mã nguồn, GNU Prolog cho phép tìm lỗi chương trình theo chế dodọ
2.2 Cài đặt GNU Prolog trên máy tính hiệu năng cao
2.2.1 Bước 1 Kiểm tra cấu hình
[tuandt@portaI src]$ /configure — prefix=$HOME
checking for gcc gcc
checking for c compiler default output file name a out
checking whether the c compiler works yes
checking whether we are cross compiling no
checking for suffix of executables
checking for suffix of object files o
checking whether we are using the GNU c compiler , yes
checking whether gcc accepts -g yes
checking for gcc option to accept ISO C89 none needed
checking for ranlib ranlib
checking whether make sets $ (MAKE) yes
checking for a BSD-compatible install /usr/local/bin/install -c
checking whether In -s works yes
checking build system type i686-pc-linux-gnu
checking host system type i686-pc-linux-gnu
checking how to run the c preprocessor gcc -E
checking for grep that handles long lines and -e /bin/grep
checking for egrep /bin/grep -E
checking for ANSI c header files yes
checking for sys/types h yes
checking for sys/stat.h yes
checking for stdlib.h yes
checking for string.h yes
checking for memory.h yes
checking for strings.h yes
Trang 18checking for inttypes.h yes
checking for stdint.h yes
checking for unistd.h yes
checking for long yes
checking size of long 4
checking sys/ioctl_compat.h usability no
checking sys/ioctl_compat.h presence no
checking for sys/ioctl_compat.h no
checking termios.h usability yes
checking termios.h presence yes
checking for termios.h yes
checking malloc.h usability yes
checking malloc.h presence yes
checking for malloc.h yes
checking for stdlib.h (cached) yes
checking for unistd.h (cached) yes
checking for getpagesize yes
checking for working mmap yes
checking for mprotect yes
checking for mallopt yes
checking for fgetc yes
checking for socklen_t yes
checking for inline inline
checking for socket yes
checking for gethostbyname yes
/home/tuandt/gprolog-1.3.0/doc /home/tuandt/gprolog-1.3 0/doc/html_node /home/tuandt/gprolog-1.3.0
configure: creating /config.status
creating Win32/gp-setup.iss creating EnginePl/gp_config.h EnginePl/gp_config.h is unchanged
[tuandt@portal src]$ make
(cd EnginePl; make config)
make[l]: Entering directory '/home/tuandt/src/EnginePl'
make[l]: Nothing to be done for 'config’
Trang 19make[l]: Leaving directory '/home/tuandt/src/EnginePl'
•/SETVARS;for i in TopComp EnginePl Wara2Ma Ma2Asm Linedit BipsPl Pl2WamFd2C EngineFD BipsFD;do (cd $i; make) I I exit 1; done;\
(cd TopComp; make gprolog)
makefl]: Entering directory '/home/tuandt/src/TopComp'
make[l]: Nothing to be done for 'first'
make[l]: Leaving directory '/home/tuandt/src/TopComp'
make[l]: Entering directory '/home/tuandt/src/EnginePl'
make[l]: Nothing to be done for 'all'
make[l]: Leaving directory '/home/tuandt/src/EnginePl'
make[l]: Entering directory '/home/tuandt/src/Wam2Ma'
make[l]: Nothing to be done for 'all'
make[l]: Leaving directory '/home/tuandt/src/Wam2Ma'
make[l]: Entering directory '/home/tuandt/src/Ma2Asm'
make[l]: Nothing to be done for 'all'
make[l]: Leaving directory '/home/tuandt/src/Ma2Asm'
make[l]: Entering directory '/home/tuandt/src/Linedit'
make[l]: 'liblinedit.a ' is up to date
make[l]: Leaving directory '/home/tuandt/src/Linedit1
make[l]: Entering directory '/home/tuandt/src/BipsPl'
make[l]: 'libbips_pl.a ' is up to date
make[l]: Leaving directory '/home/tuandt/src/BipsPl'
make[l]: Entering directory '/home/tuandt/src/P12Wam'
make[l]: 'pl2wam' is up to date
make[l]: Leaving directory '/home/tuandt/src/P12Wam'
make[l]: Entering directory '/home/tuandt/src/Fd2C'
make[l]: 'fd2c' is up to date
make[l]: Leaving directory '/home/tuandt/src/Fd2C'
make[l]: Entering directory '/home/tuandt/src/EngineFD'
make[l]: 'libengine_fd a ' is up to date
make[l]: Leaving directory '/home/tuandt/src/EngineFD'
make[l]: Entering directory '/home/tuandt/src/BipsFD'
make[l]: 'libbips_fd.a ' is up to date
make[l]: Leaving directory '/home/tuandt/src/BipsFD'
make[l]: Entering directory '/home/tuandt/src/TopComp'
make[l]: 'gprolog' is up to date
make[l]: Leaving directory '/home/tuandt/src/TopComp'
2.2.3 Tạo các thư mục cho GNU Prolog
[tuandt@portal src]S make install
./mkinstalldirs /home/tuandt/gprolog-1.3.0 /home/tuandt/gprolog-1.3.o/bin
for i in COPYING VERSION NEWS ChangeLog; do /usr/local/bin/install -c -m
644 /$i /home/tuandt/gprolog-1.3.0; done
for i in gplc hexgplc gprolog pl2wam wam2ma ma2asm fd2c; do
/usr/local/bin/install -c */$i /home/tuandt/gprolog-1.3 o/bin; done
for i in top_level.o all_pl_bips.o debugger.o all_fd_bips.o; do
/usr/local/bin/install -c -m 644 */$i /home/tuandt/gprolog-1.3.o/lib; done
Trang 20f°r Ị in libengine_pl.a libbips_pl.a liblinedit.a libengine_fd.a
libbips_fd.a; do /usr/local/bin/install -c -m 644 */$i
/home/tuandt/gprolog-1.3.o/lib; done
for i in gprolog.h fd_to_c.h; do /usr/local/bin/install -c -m 644 */$i /home/tuandt/gprolog-1.3.o/include; done
f°r i in /home/tuandt/gprolog-1.3.o/lib/*.a; do ranlib $i; done
if test /home/tuandt/gprolog-1.3.0/doc != none; then \
./mkinstalldirs /home/tuandt/gprolog-1.3 0/doc; \
{F='cd /doc; echo ???*.dvi ???*.ps ???*.pdf ???*.chm ???*.eps
(F='cd /doc/html_node; echo ???*.html ???*.gif ???*.css'; \
for i in $F; do /usr/local/bin/install -c -m 644 /doc/html_node/$i /home/tuandt/gprolog-1.3 0/doc/html_node; done); \
fi
mkdir /home/tuandt/gprolog-1.3.0/doc/html_node
if test /home/tuandt/gprolog-1.3.0 != none; then \
./mkinstalldirs /home/tuandt/gprolog-1.3.O/ExamplesPl; \
(F='cd /ExamplesPl; echo Makefile README PROGS ??*.pl*; \
for i in $F; do /usr/local/bin/install -c -m 644 /ExamplesPl/$i /home/tuandt/gprolog-1.3 O/ExaraplesPl; done); \
./mkinstalldirs /home/tuandt/gprolog-1.3•O/ExamplesC; \
(F='cd /ExamplesC; echo Makefile README ??*.pl ??*_c.c'; \
for i in $F; do /usr/local/bin/install -c -m 644 /ExamplesC/$i
/home/tuandt/gprolog-1.3.O/ExamplesC; done); \
./mkinstalldirs /home/tuandt/gprolog-1.3.O/ExamplesFD; \
(F='cd /ExamplesFD; echo Makefile ??*.pl ??*.fd'; \
for i in $F; do /usr/local/bin/install -c -m 644 ,/ExamplesFD/$i /home/tuandt/gprolog-1.3,O/ExamplesFD; done); \
fi
mkdir /home/tuandt/gprolog-1.3.O/ExamplesPl
mkdir /home/tuandt/gprolog-1.3.O/ExamplesC
rakdir /home/tuandt/gprolog-1.3.O/ExamplesFD
if test /home/tuandt/bin != none; then \
{cd /home/tuandt/bin 2>/dev/null && rm -f gplc hexgplc gprolog pl2wam wam2ma ma2asm fd2c); \
rmdir /home/tuandt/bin 2>/dev/null; \
2.2.4 Kiểm tra lại việc cài đặt
[tuandt@portal src]S make check
{cd EnginePl; make check) && \
(cd Ma2Asm; make check) && \
(cd P12Wam; make check) && \
(cd BipsPl; make check) && \
Trang 21echo All tests succeeded
make[l]: Entering directory '/home/tuandt/src/EnginePl'
f°r i in 1 2 3 4 5; do echo -e "#define OBJ_NO $i\\n#include
\"test_oc_defs.h\"” >/tmp/test_oc_m$i.c; done
gcc -march=pentiumpro -03 -fomit-frame-pointer -o test_oc test_oc.c
obj_chain.c -I /tmp/test_oc_m[1-5].c
rm -f /tmp/test_oc_m[l-5].c
./test_oc
starting
object cobject #5> found &name:0x804cle0
object <object #4> found iname:0x804clc0
object <object #3> found &name:0x804cla0
object cobject #2> found &name:0x804cl80
object <object #1> found &name:0x804cl60
finished - OK !
make[l]: Leaving directory '/home/tuandt/src/EnginePl'
make[l]: Entering directory '/home/tuandt/src/Ma2Asm'
if [ "$FC" = "Y" ]; then FCFLAGS=1-DFAST'; fi; \
gplc — c-compiler "gcc -march=pentiumpro" -C "-03 -fomit-frame-pointer
$FCFLAGS" -c chkma.c
if [ "$FC" != "Y" ]; then MAFLAGS='— ignore-fast'; fi; \
./ma2asm — comment 5MAFLAGS chkma_ma.ma
gplc -c chkma_ma.s
gcc -march=pentiumpro -03 -fomit-frame-pointer -o chkma chkma.o chkma_ma.o /EnginePl/enginel.o
./chkma
check running without FC (NO fast call}
reg_bank=&X(0):0x8052840 B:0x804b7c0 E:0x804c7c0 &Y (0) :0x804c7b0
Trang 22make[l]: Leaving directory '/home/tuandt/src/Ma2Asm'
make[l]: Entering directory '/home/tuandt/src/P12Wam'
./check_boot -a && echo Bootstrap Prolog Compiler OK
Bootstrap Prolog Compiler OK
make[l]: Leaving directory '/home/tuandt/src/P12Wam'
make[l]: Entering directory '/home/tuandt/src/BipsPl'
/P12Wam/check_boot -a && echo Bootstrap Prolog Bips OK
Bootstrap Prolog Bips OK
make[l]: Leaving directory '/home/tuandt/src/BipsPl1
All tests succeeded
2.2.5 Các thư mục hiện tại liên quan đến truy cập NGU Prolog
[tuandt@portal tuandt]$ Is
bin COPYING ExamplesC ExamplesPl INSTALL PROBLEMS srcChangeLog doc ExamplesFD gprolog-1.3.0 NEWS README VERSION[tuandt@portal tuandt]$ cd
griduser hangkt mimwebroot ngoandt thangdq trungtv
[tuandt@portal home]$ cd
Trang 23[tuandt@portal /]$ ls
bin dev gpfs initrd lost+found mnt proc root share tmp
boot etc home lib
3 Thử nghiệm chương trình
3.1 Thừ chương trình về bài toán gia phả
Name •- Size Type Date Modified
[âj giapha warn 2 KB WAM File 11/15/2007 10:45 AM
giapha 24 KB Microsoft Word Doc 11/15/2007 10:59 AM
3.1.1 Nội dung File giapha.pl
x \ = Y
kq anhemR(X,Y),
write('anh em ruot '),write(X),
cha/2 (/home/tuandt/gprolog-1.3 0/bin/giapha.pi:1)
Trang 24switch_on_atom([(toto,2),(mo,3),(man,4)]),fast Switch_On_Atom(st(0) , 3)
label(2),try(6),fast Create_Choice_Point2{&Lpredl_sub_0)Lpredl_6
trust(8), fast Delete_Choice_Point2()Lpredl_8
label(3),try(10),fast Create_Choice_Point2(&Lpredl_sub_l)Lpredl_10
trust(12), fast Delete_Choice_Point2()Lpredl_12
label(4),try(14),fast Create_Choice_Point2(&Lpredl_sub_2)Lpredl_14
trust (16), fast Delete_Choice_Point2()Lpredl_l6
label(5),
try_me_else(7) , fast Create_Choice_Point2(&Lpredl_7) label(6),
get_atom(toto,0), fast Get_Atom_Tagged(ta(0) , X (0))
get_atom(mo,1), fast Get_Atom_Tagged(ta(1) , X (1) )proceed,
label(7),retry_me_else(9),fast Update_Choice_Point2(&Lpredl_9) label (8),
Lpredl_8:
40: get_atom(toto,0),
Trang 25call c fast Get Atom Tagged(ta(0),X (0))
Trang 26call_c fast Get_Atom_Tagged(ta (2) , X (0) )
; *** Predicate: anhemR/2 (/home/tuandt/gprolog-1.3.O/bin/giapha
pl_code global X616E68656D52_2
Trang 27; 108: trust me else fail,
call c fast Delete Choice Point(0
c code local Prolog Object Initializer
call c fast Create Atom 1., 3.0/bin/giapha pi")
Trang 28call_c fast Create_Pred(at(1),2,at(0) , 1,1, &X636861_2)
call_c fast Create_Swt_Table(3)
move_ret st(0)
call_c fast Create_Swt_Atm_Element(st (0) , 3, at (2) , &Lpredl_2)call_c fast Create_Swt_Atm_Element(st(0),3,a t (3),&Lpredl_3)call_c fast Create_Swt_Atm_Element(st(0),3,a t (4),&Lpredl_4)call_c fast Create_Pred(at(5),2,at(0),8, 1, &X616E68656D52_2)call_c fast Create_Pred(a t (6),0,at(0),12,1, &X6B71_0)
Trang 3011 15 2007 10:45:28
1.3.0 (Jan 4 2007'
p l ' )
1 0: predicate(cha/2,1,static,private,user,[Predicate: cha/2 (/home/tuandt/gprolog- 1.3.0/bin/giapha.pl:1)
$3,%edxSwitch_On_Atom 21: jump_ret
*%eax22: ; 16: label(2),24: Lpredl_2:
switch_on_atom([(toto,2), (mo,3), (man,4 fast Switch_On_Atom(st(0),3)
Trang 33%eax,%eax fail
95: ; 4 996: call_c ta+12,%eax reg_bank+4,%edx Get_Atom Tagged 97: fail_ret
%eax,%eax fail
98: ; 50: proceed,99: pl_ret
*reg_bank+1036 100: ; 52: label(11),102: Lpredl 11:
fast Get_Atom Tagged (ta (1) , X (0) )
get_atom (am, 1) , fast Get_Atom_Tagged(ta(3),X(1)
104: call_c
$Lpredl_13+0,%eax Update_Choice_Point2 105: ; 5 5; label(12),107: Lpredl 12:
etry_me_else(13) ,fast Update_Choice_Point2(&Lpredl 13)
g e t _ a t o m ( m o , 0) , fast G e t _ A t o m _ T a g g e d ( t a (1), X ( 0 ;
58: proceed,ret
reg_bank+1036 116: ; 60: label(13),118: Lpredl 13:
$Lpredl 15+0,%eax