Chiết xuất Berberin từ cây vàng đắng - Một phương pháp hiệu quả

MỤC LỤC

Kiến trúc siêu máy tính Beowulf

Đã có rất nhiều định nghĩa khác nhau về Beowulf, có nhiều người cho rằng một hệ thống máy tính được gọi là beowulf khi và chỉ khi nó được tổ chức tương tự như hệ thống máy tính của Nasa nhưng cũng có những quan điểm khác lại cho răng một hệ thống được gọi là beowulf thì chỉ các máy trạm của nó làm việc theo các giải thuật song song là đủ. Beowulf chỉ yêu cầu về các phần mềm hết sức bình thường như hệ điều hành Linux và các thư viện lập trình song song PVM( Parallel Vitual Machine), MPI( Message Passing Interface), đồng thời điểm mạnh của mô hình này là các máy trạm chỉ cần là các máy tính cá nhân hết sức bình thường chứ không yêu cầu bất kỳ một máy tính chuyên dụng đặc biệt nào.

Thư viện lập trình

Máy server có nhiệm vụ điều khiển toàn bộ tiến trình tính toán, nó điều khiển tất cả các bó tin và các server file đến các client, ngoài ra server còn có nhiệm vụ giao tiếp với thế giới bên ngoài để thu thập các yêu cầu cũng như trả lại kết quả của bài toán sau khi đã được tính toán. Các thư viện truyền thông điệp hiện nay cho hệ thồng bó có thể kể đến là MPI, PVM, Active Message, CMMD, trong đó MPI với nhiều ưu điểm vượt trội có thể coi là sự lựa chọn tốt cho các hệ tính toán bó.

Thư viện truyền thông điệp MPI

Cấu trúc chương trình

Hệ thống bó là hệ thống các máy tính có bộ nhớ phân tán, vì vậy việc truyền thông giữa các nút trong quá trình tính toán thường là truyền thông điệp.

Một số kiểu dữ liệu được dùng

Các hàm gửi, nhận dữ liệu theo Blocking sẽ kết thúc khi điều kiện kết thúc của nó xảy ra.Các hàm gửi, nhận dữ liệu theo NonBlocking sẽ kết thúc ngay mà không cần bất cứ kiện điện nào, nó không quan tâm đến việc dữ liệu đã thực sự được truyền đi hoặc nhận về hay chưa. • Thao tác Reduction : Thao tác này thực hiện 1 phép tính trên các biến của các tiến trình trong nhóm và kết quả sẽ được truyền về 1 biến trên vùng nhớ cục bộ của 1 tiến trình.

Hệ quản lý tài nguyên và phân tải

Phân hệ quản lý công việc PBS_Server

Chức năng của phân hệ quản lý công việc là cung cấp các dịch vụ lô, như là nhận/tạo ra các công việc lô (batch công việc), thay đổi các công việc, bảo vệ công việc khi có sự cố hệ thống, và thực hiện công việc (chuyển công việc cho phân hệ thực thi công việc). Nếu công việc được thực hiện, Phân hệ Quản lý công việc sẽ gửi công việc cùng với yêu cầu thực thi xuống cho Phân hệ Quản lý tài nguyên và Thực thi công việc.

Phân hệ lập lịch PBS_Scheduler

    Sau khi nhận được yêu cầu lập lịch từ PBS_Server thì phân hệ lập lịch sẽ tiến hành lấy các thông tin về máy chủ(Server), hàng đợi (queue), các nhiệm vụ (job) để tìm ra nhiệm vụ tốt nhất cần chạy, sau đó nó sẽ gửi yêu cầu các thông tin về tài nguyên cho phân hệ PBS_Mom tại mỗi nút, sau đó tìm ra nút tốt nhất để chạy nhiệm vụ đó và thông báo lại kết quả cho PBS_Server để PBS__Server chạy nhiệm vụ đó tại các nút đã chọn. Thông tin đó sẽ đựợc chuyển xuống cho Phân hệ Thu thập tài nguyên và thực thi công việc để tiến hành thực hiện công việc đồng thời trong qua trình thực hiện công việc, các thông tin có liên quan sẽ được cập nhật và lưu trữ trong Phân hệ quản lý công việc.

    Hình 3.2.1: Lập lịch thực hiện công việc trên 1 nút
    Hình 3.2.1: Lập lịch thực hiện công việc trên 1 nút

    Giao tiếp giữa PBS_Server và PBS_Sheduler

    Từ Phân hệ Lập lịch đến Phân hệ quản lý tài nguyên và thực thi công việc: yêu cầu thông tin tài nguyên do Phân hệ quản lý tài nguyên thu thập được. Từ Phân hệ Quản lý tài nguyên và thực thi công việc đến Phân hệ Lập lịch: thông tin tài nguyên đã thu thập được.

    Giao tiếp giữa PBS_Server và PBS_Mom

    Tuy nhiên cũng có một vài yêu cầu phức tạp và gồm nhiều yêu cầu hợp lại hay là có nhiều yêu cầu phụ đi kèm, mà trong bất kỳ trường hệ thống cũng có thể bỏ qua các yêu cầu phụ này. PBS sử dụng kiểu má hoá dữ liệu theo dạng xâu theo chuẩn ISO ASN.1 để truyền dữ liệu giữa các phần ngoại trừ việc giao tiếp giữa PBS_Sheduler và RM, dữ lieu được mã hoá theo dạng DIS(Data Is String), ưu điểm là.

    Hình 4.3: Giao tiếp giữa Phân hệ Quản lý công việc và Phân hệ Quản lý tài nguyên và
    Hình 4.3: Giao tiếp giữa Phân hệ Quản lý công việc và Phân hệ Quản lý tài nguyên và

    Phương pháp mã hoá DIS

    Mục đích của DIS là cung cấp một phương pháp mã hoá dữ liệu nhanh chóng, đơn giản, gọn nhẹ và độc lập với định dạng của máy cho việc mã hoá dữ liệu về dạng xâu ký tự và ngược lại. Một nhược điểm của phương pháp này là với một số nguyên dương nhỏ chúng ta không thể nói là đấy là số dạng signed hay unsigned chars, short, ints or long sau khi chúng ta đã biết dạng mã hoá của nó.

    Đóng gói dữ liệu có cấu trúc

    PBS cung cấp sẵn một tập hợp các hàm để tiến hành mã hoá và giải mã với các dạng dữ liệu cơ sở, tập hợp các hàm này nằm trong thư viện đi kèm. Việc mã hóa cũng được tiến hành tương tự như trên tức là đầu tiên tính số phần tử của mảng, mã hóa số đó ra gói tin, sau đó mã hóa từng phần tử của mảng với cách mà hóa tương tự như trên.

    Một số kết quả trung tâm đã đạt được

    Đây cũng chính là cách mà PBS sử dụng để mã hóa những cấu trúc phức tạp mã ta sẽ thấy sau này.

    Tìm hiểu về chương trình Debugger

    • High Performance Debugger Version 1-HPD 1 Giao diện

      Không giống như khi debugger một chương trình tuần tự, khi mà mỗi lệnh chỉ sử dụng cho một luồng duy nhất, khi debugger một chương trình song song thì có thể có nhiều luồng điều khiển riêng biệt và đồng thời cũng có nhiều vị trí khác nhau trao đổi thông tin với chương trình. Nhóm được thành lập năm 1997 với mục đích là đưa ra một công cụ debugger chuẩn cho hệ thống tính toán song song(High Performance Computing-HPC). Mục tiêu của nhóm là xây dựng công cụ debugger chuẩn cho cả hệ thống chia sẻ bộ nhớ và hệ thống bộ nhớ phân tán. Phưong pháp tiếp cận vấn đề của nhóm HPDF là chia chia nhỏ vấn đề thành các lớp bài toán nhỏ hơn và dễ giải quyết hơn sau đó tiến hánh hoàn thiện dần và sẽ cho ra đời các version với version sau là sự kế thừa cảu version trước. Trong bài này chúng ta sẽ cùng tìm hiểu về phiên bản đầu tiên và các lệnh chuẩn cũng như giao diện cơ sở của một chơng trình debugger song song. High Performance Debugger Version 1-HPD 2.1 Giao diện. Trong phiên bản đầu tiên này mới chỉ đưa ra giao diện dòng lệnh. Vì vậy khi một chương trình cũng có giao diện dòng lệnh mà lại được điều khiển bằng chương trỡnh debugger này thỡ quan hệ giữa hai dao diện này là khụng được rừ rang lắm. Cú thể xảy ra trường hợp cả chương trình debugger và ứng dụng của người dùng đều đang ghi lên thiết bị đầu cuối tại cùng một thời điểm. Vì vậy cần thiết phải có một kỹ thuật qua đó cho phép người dùng có thể phân biệt được dữ liệu nào là của chương trình , dữ liệu nào là của debugger. Điều này đã được thực hiện bằng cách chốt dữ liệu giữa debugger và chương trình. Nếu khởi tạo chế độ debugger input thì mọi dữ liệu đầu vào sẽ là của giao diên debugger và để chuyển sang chế độ program input thì lệnh proginput phải được đưa ra và khi này thiết bị input chính là giao diện của chương trỡnh, khi này mọi lệnh gừ ra đều khụng ảnh hưởng đến chương trỡnh debugger. Để quoay trở lại chế độ giao diện của chương trình debugger cần phải ngắt lệnh proginput bằng các phím user interrupt key, việc làm này sẽ làm tự động quay trở lại chế độ debugger input và dấu nhắc sủa debugger sẽ xuất hiện trên màn hình. Đoạn mó dưới đõy sẽ giải thớch rừ hơn về điều này:. [all]> Debugger prompts for next command. Enter degrees of freedom: Program prompts for first value proginput User switches to program input mode 4 User interacts with program,. File for results: temp.dat .. ^C then exits back to debugger input mode [all] Debugger prompts for next command 2.2 Khởi tạo. Để khởi tao chúng ta tạo ra file debugger initation file, file này cung cấp một kỹ thuật cho việc khởi tạo các phiên debugger bằng cách thiết lập các lựa chọn về môi trường debugger. File này phải được đặt tên dạng .hpdinit và được lưu dữ trong thư mục user home directory. Bình thường file khởi tạo ở trên dùng để lưu trữ các đặc tả các lệnh của người dùng hoặc các lệnh để chạy một cách tự động mỗi khi quá trình debugger được thực hiện. Ngoài ra chương trình debugger cũng lưu giữ các lệnh đã sử dụng gần đây và điều này cho phép chúng ta thấy được các lệnh đã được thực hiên trước đây hoặc thực hiện lại các lệnh này. Và người sử dụng có thể điều khiển độ dài của danh sách này thông qua biến trạng thái của debugger là MAX_HISTORY. Để chạy chương trình trong môi trường debugger thì cần sử dụng hai lệnh sau:. load command và tiếp theo là run command. Việc phân làm hai lệnh riêng biệt này cho phép người sử dụng khởi tạo điểm actionpoint bên trong chương trình trước khi bắt đầu thực hiện chương trình, và qua đó chúng ta có thể chạy debugger hơn một lần với những trạng thái debugger đã chọn sẵn. Một số lệnh đặc biệt:. • attach command: lệnh này dùng để gắn một chương trình đang được thực hiện với chương trình debugger. • detach command: lệnh này ngược với lệnh attach command, lệnh này dùng để đưa một chương trình đang được điều khiển bởi chương trình debugger về trạng thái chạy bình thường. • Core command: lệnh này được thực hiện khi debugger được gắn với core file image. Actionpoints là các điểm tại đó chương trình có thể phải dừng lại dưới một điều kiện đặc biệt nào đó. Có ba loại actionpoints được hỗ trợ trong HPD version1. Mỗi loại cho phép người sử dụng xác định chương trình hực thi sẽ dừng khi một vài sự kiện đặc biệt của chương trình xuất hiện. • Breakpoint: điểm dừng này sẽ xác định chương trình sẽ dừng khi chạy đến dòng lệnh được đánh dấu sẵn ơ trong source. • Watchpoint: cung cấp một cơ chế điều khiển tương tự như khi dữ liệu được lưu trữ trong bộ nhớ và nó sẽ dừng chương trình mỗi khi giá trị các biến được thay đổi. • Barrier: điểm này dùng để đồng bộ hoá các tiến trình với nhau, nó ngăn không cho một tiến trình không chạy tiếp cho đến khi các tiến trình đèu đã chạy đến đây và đã được đồng bộ hoá. Thường dùng đặt trước các lời giải thớch cho chương trỡnh được rừ nghiữa hơn.  Alias-tạo ra hoặc xem kại một lệnh do người dùng định nghĩa.  Tạo ra một lệnh mới do người dùng định nghĩa. alias command-name command-body.  Xem lại một lệnh đã tồn tại trước rồi. Trong đó command-name là tên của lệnh được định nghĩa. Command- body xác định lệnh được định nghĩa là lệnh đơn giản hay là lệnh hình thành bằng cách ghép các lệnh lại với nhau. Câu lệnh alias sẽ gắn lệnh mà người dùng vừa định nghĩa với tập lệnh của chương trình debugger vì vậy sau đó nó được sử dụng nh một lệnh của chương trình debugger. Chú ý rằng nếu câu lệnh alias mà không có tham số kềm theo thì kết quả nhận được sẽ là toàn bộ các lệnh do người dùng định nghĩa. Câu lệnh alias khi thực hiện nếu người dùng cố gắng định nghĩa lại một lệnh của chương trình debugger thì sẽ sinh ra lỗi và xuất hiện thông báo lỗi tương ứng. Còn nếu khi muốn xem một lệnh không tồn tại hoặc đã bị xoá bởi lệnh unalias thì một cảnh báo sẽ được sinh ra để báo rằng lệnh như trên không tồn tại.Ví dụ:. alias nt next Định nghĩa một lệnh nt để thực hiện lệnh tiếp theo. alias nt Hiển thị định nghĩa về lệnh nt. alias step2 “step;step” Định nghĩa lệnh step2 để thực hiện hai lệnh step trên cùng một dòng. alias steptoo “step0;[1.*] step” Định nghĩa lệnh steptoo thực hiện đòng thời hai lệnh, lệnh đầu ảnh hưởng đến mọi luồng trong tiến trình 0, lệnh thứ hai tác động tương tự lê tiến trình 1.  Unalias: lệnh này ngược với lệnh alias ở trên. Cũng như alias như lệnh alias lệnh unalias sẽ gặp lỗi nếu người sử dụng cố gắng xoá đi một lệnh của chương trình debugger. unalias step2 loại bỏ lệnh step2 ra khỏi chương trình, chú ý rằng nếu lệnh step2 được sử dụng trong việc định nghĩa một lệnh khác thì lệnh này không bị ảnh hương gì bởi lệnh loại bỏ step2. unalias –all lệnh này loại bỏ mọi alias.  history: tham chiếu đến các lệnh đã được sử dụng 1) Hiển thị lệnh được sử dụng gần nhất. 2) Thực hiện lại lệnh được thực hiện gần nhất. 3) Thực hiện lại một lệnh đã được thực hiện trước đây. Lệnh history thực hiện một vài thao tác có liên quan đến lệnh cần được thực hiện lại được lưu trong command history list, theo mặc định sẽ có 20 lệnh được lưu lại trong danh sách này, kích thước cảu danh sách này được lưu trong biến trạng thái MAX_HISTORY và có thể thay đổi được. history hiển thị danh sách của 20 lênh được thực hiên gần nhất history 10 hiển thị 10 lệnh được thực hiên gần đây nhất. !! thực hiện lại lệnh ngay trước. !print thực hiện lệnh print cuối cùng. !pr thực lệnh cuối cùng mà bắt đầu bằng chữ pr.  set: thay đổi hoặc xem giá trị của các biến trạng thái 1) Thay đổi giá trị của biến trạng thái. set debugger-var = value 2) Xem giá trị hiện thời của một biến trạng thái.

      Hình 2.1: Quan hệ giữa debugger và chương trình đích
      Hình 2.1: Quan hệ giữa debugger và chương trình đích