XÂY DỰNG CHƯƠNG TRÌNH XỬ LÝ SONG SONG ĐỂ XÁC ĐỊNH MỘT SỐ NGUYÊN LỚN CÓ PHẢI LÀ SỐ NGUYÊN TỐ HAY KHÔNG? SV Nguyễn Thị Hoài Thương Email: nguyenthuong100492@gmail.com Võ Minh Tiến Email: vmtien88@gmail.com Lớp ĐHCNTT10, Khoa SP Toán – Tin GVHD: ThS Nguyễn Thị Thùy Linh Tóm tắt nội dung: Gần đây, phát triển kiến trúc máy tính song song kèm theo thuật toán song song làm thay đổi nhiều quan niệm khả giải toán lớn Nhiều ứng dụng thực tế yêu cầu phải bảo mật an toàn liệu nên vấn đề bảo mật an ninh mạng quan tâm hàng đầu Để tăng khả xử lý song song máy tính song song phải khai thác tối đa lực xử lý (CPU) Vì vậy, nhằm tăng khả tính toán CPU nâng cao hiệu giải thuật, lựa chọn nghiên cứu “Xây dựng chương trình xử lý song song để xác định số nguyên lớn có phải số nguyên tố hay không?” Đề tài giải vấn đề cải thiện tốc độ xử lý, đáp ứng yêu cầu mã hóa lĩnh vực an toàn bảo mật thông tin, đặc biệt hệ mật mã RSA Mở đầu Tại phải xử lý song song? Hiện nay, với xuất ngày nhiều hệ thống điện tử làm cho lượng thông tin lĩnh vực phát triển nhanh chóng, có cấu trúc đa dạng phức tạp, đòi hỏi máy tính phải xử lý lượng liệu lớn với tốc độ cao Có thể nói máy tính xử lý theo kiểu Von Neumann (có 1CPU) khó đáp ứng yêu cầu thời gian khối lượng công việc thực Xử lý song song trình xử lý gồm nhiều tiến trình kích hoạt đồng thời tham gia giải toán Nói chung, xử lý song song thực hệ thống đa xử lý (hay gọi máy tính song song nay) Do đó, thực xử lý song song máy tính song song để tăng hiệu tốc độ tính toán giải thuật Mô hình xử lý song song phát triển mạnh mẽ, giải vấn đề bế tắc mà mô hình xử lý gặp phải như: vấn đề thời gian thực chương trình, tốc độ xử lý, khả lưu trữ nhớ,… Trong bối cảnh định “Xây dựng chương trình xử lý song song xác định số nguyên lớn có phải số nguyên tố hay không?” nhằm giải vấn đề Bài toán kiểm tra số nguyên tố toán quan trọng khoa học máy tính, đặc biệt lĩnh vực an toàn bảo mật thông tin Thuật toán song song “xác định số nguyên lớn có phải số nguyên tố hay không?” đáp ứng nhu cầu tính toán ngày cao thời gian, tốc độ, quy mô, toán Nếu giải thuật song song cho toán thời gian, tốc độ xử lý chậm, khả lưu trữ, quy mô nhỏ đặc biệt làm hạn chế việc ứng dụng toán cho ứng dụng quan trọng…Vì nhu cầu thực tính toán song song để tính toán, giải vấn đề lúc nhiều vi xử lý khác trở nên cấp thiết cần nghiên cứu Kết 2.1 Đặt vấn đề Kiểm tra số có phải số nguyên tố hay không toán quan trọng lĩnh vực bảo mật thông tin Vì số nguyên tố sử dụng rộng rãi giải thuật mã hóa dùng khóa mở (public key cryptography algorithms), ứng dụng phát sinh số giả ngẫu nhiên (pseudorandom) bảng hash (hash table) Vấn đề đặt phải kiểm tra số nguyên tố lớn Việc tính toán số nguyên lớn nhiều thời gian, đòi hỏi phải xử lý song song cho trình xác định số nguyên lớn có phải số nguyên tố không? Muốn giải thuật kèm theo phải thuật toán song song 2.2 Thiết kế thuật toán song song cho toán “xác định số nguyên lớn có phải số nguyên tố hay không?” 2.2.1 Định nghĩa số nguyên tố Số nguyên tố số nguyên dương chia hết cho Theo định nghĩa số nguyên tố số tự nhiên có hai ước số phân biệt, số thân 2.2.2 Thiết kế thuật toán Input: Số nguyên dương x; Output = True, x số nguyên tố Flase, ngược lại Xử lý: B1: //Chữ số cuối x là: 0,2,4,5,6,8 if ( (x chia hết cho 2) (x >5 x chia hết cho 5) ) return false; B2: //Chữ số cuối x là: 1,3,7,9 Gọi cx = số ký tự (căn bậc x); n = số ký tự x; cx = (n+1)/2 (lấy phần nguyên); /*Chứng minh: Giả sử √x =a ; cx = số ký tự a; n = số ký tự x; x có tối đa: cx + (cx+1) ký tự, tối thiểu cx+(cx-1) ký tự, Ví dụ: a=84 cx=2, x=a*a=84*84 x có tối đa 2+2+1=5 ký tự, tối thiểu 2+2-1=3 ký tự 84*10 < x < 84*100 ; Vậy n = 2cx-1 2cx 2cx+1 cx = (n+1)/2 n/2 (n-1)/2 Ta chọn cx = (n+1)/2 (lớn kết tìm số gần với kết căn(x) , cho cx lớn mà phải đảm bảo kết tìm lớn căn(x) Thuật toán chia từ 3, căn(x), quyền chia khỏi căn(x) không bỏ sót phần từ từ 3…căn(x)) Ví dụ: √125 có (3+1)/2 = ký tự x=125, n=3, cx=2 (căn(x) có chữ số, xác số nào, nên chọn số nguyên lớn có chữ số 99, thuật toán chia x cho khoảng (3,99) B3: // Ta có cx số ký tự √x Gọi m số nguyên lớn có cx ký tự Thực chia x cho S, với S={3,5,7,9, ,m} Phân hoạch tập S thành S1,S2,S3,S4 tùy ý ngẫu nhiên Phân công cho nhân CPU xử lý tập S1,S2,S3,S4 với nhân thực thi lệnh sau: if ( x chia hết cho i) return false; Nếu nhân trả False dừng nhân lại chương trình trả False, ngược lại True 2.3 Cài đặt thuật toán OpenMP (Open Multi-Processing) nhà phát triển tích hợp thành chuẩn ngôn ngữ lập trình phổ biến như: C/C++,…Và hỗ trợ hầu hết hệ điều hành OpenMP giao diện lập trình ứng dụng (API - Application Program Interface) sử dụng để điều khiển luồng (Thread) dựa cấu trúc chia sẻ nhớ chung Do đó, để cài đặt thuật toán cho toán sử dụng ngôn ngữ lập trình C++ với OpenMP Visual Studio 2010 Cấu trúc liệu: Xây dựng class SuperInt, để khai báo kiểu số nguyên lớn với tối đa 10000 ký tự, lớn Với phương thức bản: Cộng, Trừ, Nhân, Chia, Chia lấy dư có cấu trúc sau: #include using namespace std; #include #include #define maxInt 10000 class SuperInt{ public: char supInt[maxInt]; public: SuperInt::SuperInt(char *s){ } void SuperInt::setValue(char s[]){ } bool SuperInt::checkType(){ } SuperInt::SuperInt(){} }; Hàm kiểm tra số nguyên tố: bool isChan(SuperInt a){ } void isNgto(SuperInt s, SuperInt a, SuperInt b){ } Chương trình sử dụng thư viện quan trọng: #include #include #include #include #include #include "stdafx.h" "targetver.h" "SuperInt.h" Đoạn chương trình xử lý song song: #pragma omp parallel shared() private() { #pragma omp sections nowait { #pragma omp section { //Hàm thực thi} #pragma omp section { //Hàm thực thi} } } 2.4 Kết thực Chương trình thực nghiệm máy Server Trường Đại học Đồng Tháp với cấu hình máy: - Vi xử lý: Intel (R) Xeon (R) CPU E5540 @2.53GHz (8CPUs), ~2.5GHz - Bộ nhớ trong: 6132 MB RAM - Hệ điều hành: Windows Server® 2008 Standard (6.0, Build 6002) Kết thực nghiệm: Số nguyên lớn 2147483647 68718952447 274876858367 Song song (s) 11.03621 120.56385 130.56179 Bảng : Thống kê kết Tuần tự (s) 45.70646 509.29799 564.68737 Thời gian (s) 600 500 400 Tuần tự Song song 300 200 100 2147483647 68718952447 274876858367 Số nguyên lớn Hình 1: Đồ thị so sánh kết Nhận xét: Thời gian thực chương trình rút ngắn (tốc độ xử lý song song nhanh khoảng lần so với tốc độ xử lý tuần tự) Tốc độ tính giây (s) tùy thuộc vào lượng công việc có hệ thống Giải thuật tối ưu với số nguyên dương lớn 10 chữ số giải thuật xử lý song song, phép toán phải thực qua bước trung gian class SuperInt Phương pháp kiểm tra số nguyên tố cổ điển đơn giản dễ thực hiện, đương nhiên áp dụng toán có liệu nhỏ, độ phức tạp bình thường thời gian cho phép,