1. Trang chủ
  2. » Luận Văn - Báo Cáo

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

7 464 1

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 7
Dung lượng 272,6 KB

Nội dung

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?. Nguyễn Thị Thùy Linh Tóm tắt nội dung: Gần đây, sự phát triển của kiến trúc máy t

Trang 1

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, sự phát triển của kiến trúc máy tính song song đi kèm theo nó là các thuật toán song song đã làm thay đổi nhiều quan niệm về khả năng giải quyết các bài toán lớn hiện nay Nhiều ứng dụng trong thực tế yêu cầu phải bảo mật và an toàn dữ liệu nên vấn đề bảo mật và an ninh mạng được quan tâm hàng đầu

Để tăng khả năng xử lý song song của máy tính song song thì phải khai thác tối

đa năng lực của các bộ xử lý (CPU) Vì vậy, nhằm tăng khả năng tính toán của các

CPU và nâng cao hiệu quả của giải thuật, chúng tôi lựa chọn nghiên cứu “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?” Đề tài có thể giải quyết được vấn đề về cải thiện tốc độ xử lý, đáp

ứng yêu cầu mã hóa trong lĩnh vực an toàn và bảo mật thông tin, đặc biệt là hệ mật mã

RSA

1 Mở đầu

Tại sao phải xử lý song song?

Hiện nay, với sự xuất hiện ngày càng nhiều các hệ thống điện tử đã làm cho lượng thông tin trong mọi lĩnh vực phát triển nhanh chóng, có cấu trúc đa dạng và phức tạp, đòi hỏi máy tính phải xử lý một lượng dữ liệu rất lớn với tốc độ cao Có thể nói rằng những máy tính xử lý tuần tự theo kiểu Von Neumann (có 1CPU) khó có thể

Trang 2

đó, thực hiện xử lý song song trên các máy tính song song để tăng hiệu quả và tốc độ tính toán của giải thuật

Mô hình xử lý song song đã và đang phát triển mạnh mẽ, giải quyết những vấn

đề bế tắc mà mô hình xử lý tuần tự gặp phải như: vấn đề thời gian thực hiện chương trình, tốc độ xử lý, khả năng lưu trữ của bộ nhớ,… Trong bối cảnh đó chúng tôi quyết

định “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?” nhằm giải quyết vấn đề trên

Bài toán kiểm tra số nguyên tố là một trong những bài toán cơ bản nhưngkhá quan trọng trong khoa học máy tính, đặc biệt là lĩnh vực an toàn và bảo mật thông tin

Thuật toán song song “xác định một số nguyên lớn có phải là số nguyên tố hay không?” sẽ đáp ứng được nhu cầu tính toán ngày càng cao về thời gian, tốc độ, quy

mô, của bài toán Nếu không có giải thuật song song cho bài toán này thì thời gian, tốc độ xử lý chậm, khả năng lưu trữ, quy mô nhỏ và đặc biệt là làm hạn chế việc ứng dụng bài toán cho các ứng dụng quan trọng…Vì vậy nhu cầu thực hiện tính toán song song để có thể tính toán, giải quyết một vấn đề nào đó cùng một lúc trên nhiều vi xử lý

khác nhau đã trở nên cấp thiết và cần được nghiên cứu

2 Kết quả chính

2.1 Đặt vấn đề

Kiểm tra một số có phải số nguyên tố hay không là một bài toán khá quan trọng trong lĩnh vực bảo mật thông tin Vì số nguyên tố được sử dụng rất rộng rãi trong các giải thuật mã hóa dùng khóa mở (public key cryptography algorithms), ứng dụng trong các bộ phát sinh số giả ngẫu nhiên (pseudorandom) và bảng hash (hash table)

Vấn đề đặt ra là phải kiểm tra số nguyên tố lớn Việc tính toán trên số nguyên lớn

mất rất nhiều thời gian, đòi hỏi phải xử lý song song cho quá trình xác định số nguyên lớn có phải là số nguyên tố không? Muốn vậy thì giải thuật đi kèm theo nó phải là

thuật toán song song

Trang 3

2.2 Thiết kế thuật toán song song cho bài toán “xác định một số nguyên lớn có phải là số nguyên tố hay không?”

2.2.1 Định nghĩa số nguyên tố

Số nguyên tố là số nguyên dương chỉ chia hết cho 1 và chính nó Theo định nghĩa này số nguyên tố là số tự nhiên và chỉ có hai ước số phân biệt, đó chính là số 1 và bản thân nó

2.2.2 Thiết kế thuật toán

Input: Số nguyên dương x;

Output = True, nếu x là số nguyên tố

Flase, ngược lại

Xử lý:

B1: //Chữ số cuối của x là: 0,2,4,5,6,8

if ( (x chia hết cho 2)

hoặc (x >5 và x chia hết cho 5) ) return false;

B2: //Chữ số cuối của x là: 1,3,7,9

Gọi cx = số ký tự (căn bậc 2 của x); n = số ký tự của x;

cx = (n+1)/2 (lấy phần nguyên);

/*Chứng minh:

Giả sử √x =a ;

cx = số ký tự của a;

n = số ký tự của x;

x sẽ 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

Trang 4

 cx = (n+1)/2 hoặc n/2 hoặc (n-1)/2

Ta chọn cx = (n+1)/2 (lớn nhất trong 3 kết quả vì tìm một số gần với kết quả căn(x) , cho cx lớn nhất mà phải đảm bảo kết quả tìm được lớn hơn căn(x) Thuật toán sẽ chia từ 3, căn(x), được quyền chia khỏi căn(x) nhưng không bỏ sót phần từ nào từ 3…căn(x))

Ví dụ: √125 có (3+1)/2 = 2 ký tự

x=125, n=3, cx=2 (căn(x) có 2 chữ số, nhưng không biết chính xác là số nào, nên chọn số nguyên lớn nhất có 2 chữ số là 99, khi đó thuật toán sẽ chia x cho khoảng (3,99)

B3: // Ta có cx là số ký tự của √x

Gọi m là số nguyên lớn nhất có cx ký tự Thực hiện 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 ý và ngẫu nhiên

Phân công cho các nhân CPU xử lý trên 4 tập S1,S2,S3,S4 với mỗi nhân thực thi lệnh sau:

if ( x chia hết cho i)

return false;

Nếu 1 nhân trả về False thì dừng các nhân còn lại và chương trình

trả về False, ngược lại thì True

2.3 Cài đặt thuật toán

OpenMP (Open Multi-Processing) đã được các nhà phát triển tích hợp thành chuẩn trong các ngôn ngữ lập trình phổ biến như: C/C++,…Và được hỗ trợ trong hầu hết các hệ điều hành OpenMP là một giao diện lập trình ứng dụng (API - Application Program Interface) được sử dụng để điều khiển các luồng (Thread) dựa trên cấu trúc chia sẻ bộ nhớ chung

Do đó, để cài đặt thuật toán cho bài toán chúng tôi sử dụng ngôn ngữ lập trình C++ với OpenMP trên Visual Studio 2010

Cấu trúc dữ liệu:

Trang 5

Xây dựng class SuperInt, để khai báo kiểu số nguyên lớn với tối đa 10000 ký tự,

hoặc lớn hơn Với các phương thức cơ bản: Cộng, Trừ, Nhân, Chia, Chia lấy dư có cấu trúc như sau:

#include <iostream>

using namespace std;

#include <conio.h>

#include <String.h>

#define maxInt 10000

class SuperInt{

public : char supInt[ maxInt ];

public :

SuperInt::SuperInt( char * s ){

}

void SuperInt::setValue( char []){

}

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 chính sử dụng thư viện quan trọng: <omp.h>

#include "stdafx.h"

#include "targetver.h"

#include <math.h>

#include <omp.h>

#include <conio.h>

#include "SuperInt.h"

Đoạn chương trình xử lý song song:

Trang 6

2.4 Kết quả thực hiện

Chương trình đã được thực nghiệm trên máy Server của 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 quả thực nghiệm:

Bảng 1 : Thống kê kết quả

Trang 7

Hình 1: Đồ thị so sánh kết quả

Nhận xét:

Thời gian thực hiện chương trình rút ngắn (tốc độ xử lý song song nhanh hơn khoảng 4 lần so với tốc độ xử lý tuần tự) Tốc độ này tính bằng giây (s) và còn tùy thuộc vào lượng công việc hiện có trong hệ thống

Giải thuật chỉ tối ưu với số nguyên dương lớn hơn 10 chữ số trong cùng giải thuật

và xử lý song song, vì các phép toán cơ bản phải thực hiện qua bước trung gian của

2147483647 68718952447 274876858367

0

100

200

300 400

500

600

Số nguyên lớn

Tuần tự Song song Thời gian (s)

Ngày đăng: 25/08/2016, 15:43

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w