5. Giới thiệu
XL dữ liệu LỚN
Trong t/gian ngắn
Tốc độ CPU
TĂNG
Nhiệt độ CPU
TĂNG
Ra đời Xử
lý song
song GPU.
Phát triển công nghệ đa
lõi.
Năm 2007, NVIDIA sản
xuất GPU NV30
CUDA phát triển ứng
dụng song song.
8. Khái niệm
Là quá trình xử lý thông tin trong đó
nhấn mạnh việc nhiều đơn vị dữ liệu
được xử lý đồng thời bởi một hay
nhiều bộ xử lý để giải quyết một bài
toán.
9. Xử lý tuần tự và song song
Bài toán được tách thành một chuỗi các câu
lệnh rời rạc.
Các câu lệnh được thực hiện một cách tuần
tự.
Tại mỗi thời điểm chỉ thực hiện được một
câu lệnh.
Mỗi phần được tách thành câu lệnh rời
rạc.
Mỗi lệnh được thực hiện từ những CPU
khác nhau.
Trong xử lý song song nhiều CPU, phức
tạp hơn nhưng nhanh hơn.
10. Xử lý tuần tự và song song
Xử lý tuần tự Xử lý song song
-Mỗi thời điểm chỉ thực hiện được một
phép toán
-Thời gian thực hiện phép toán chậm
-Mỗi thời điển có thể thực hiện được
nhiều phép toán
-Thời gian thực hiện phép toán nhanh
Tiêu chí đánh giá thuật toán
-Thời gian thực hiện thuật toán
- Không gian bộ nhớ
- Khả năng lập trình
- Các tiêu chuẩn như thuật toán tuần
tự
- Những tham số về Bộ xử lý: số bộ xử
lý, tốc độ xử lý
- Khả năng của các bộ nhớ cục bộ
- Sơ đồ truyền thông
-Thao tác I/O
11. Hình thức song song trong OpenCL
OpenCL hỗ trợ lập trình
Song song tác vụ. (Trong OpenCL lập trình song song
tác vụ bao gồm việc lập hàng đợi nhiều kernel)
Lập trình song song dữ liệu. (Các tiến trình song
song dữ liệu thực thi nhiều thể hiện của kernel trên các
OpenCL devices)
12. Chương trình có thể song song hóa ?
Chương trình tính tổng hai ma trận.
Chương trình nhân hai ma trận.
Giải hệ phương trình tuyến tính.
Tô màu đồ thị ...
Vậy khi nào thì chương trình có thể
song song hóa?
13. Song song hóa công việc
Bài toán có thể chia thành được các
nhiệm vụ nhỏ hơn.
Các công việc nhỏ được gán cho các
bộ xử lý một cách phù hợp.
Các công việc lại tiếp tục được phần
chia như vậy.. Cho đến khi nào công
việc được hoàn thành.
17. Đặc điểm OpenCL
Khả năng làm việc trên môi trường không
đồng nhất.
18. Tổng quan OpenCL
Các thuật ngữ
Host : CPU
Device: GPU
Context: Là môi trường thực thi
những work-item gồm: device,
memory, command queue.
Work-item: Là một thể hiện của kernel.
Index-space: Xác định số lượng work-items
cần thiết để hoàn thành công việc.
22. Mô hình bộ nhớ OpenCL
Truy xuất vùng nhớ tường minh: Host->global->local và ngược lại.
23. Mô hình thực thi OpenCL
Chia thành 2 phần: Thực
thi ở host và thực thi ở
device.
Context
Hàng đợi thực thi kernel
Theo thứ tự.
Không theo thứ tự.
24. Đồng bộ hóa: Queues & Events
Events: đồng bộ hóa giữa kernel và queue
Đồng bộ hóa 2 queue với 2 devices
26. Chi tiết bước làm: 9 bước
Bước 1: Truy vấn system host cho các
thiết bị OpenCL.
Bước 2: Tạo một context liên kết đến các
thiết bị OpenCL.
Bước 3: Tạo các chương trình mà nó sẽ
chạy trên một hoặc nhiều các device đã
liên kết.
Bước 4: Từ các chương trình đó, chọn
các kernel để thực thi.
27. Chi tiết bước làm: 9 bước
Bước 5: Tạo memory objects trên host hoặc
trên device.
Bước 6: Sao chép dữ liệu từ bộ nhớ đến
device khi cần thiết.
Bước 7: Cung cấp các đối số cho các
kernel.
Bước 8: Đẩy các kernel vào hàng đợi để
thực thi.
Bước 9: Sao chép kết quả từ device đến
host.
29. OpenCL trên window
Ý nghĩa, đầu vào, đầu ra một số hàm
thông dụng trong OpenCL.
30. OpenCL trên window
Lấy thông tin Platform:
cl_int clGetPlatformIDs (cl_uint
num_entries, cl_platform_id *platforms,
cl_uint *num_platforms)
Giá trị trả về CL_SUCCESS nếu hàm thực thi thành
công.
Ngược lại, nó trả về CL_INVALID_VALUE nếu
num_entries = 0 và platforms != NULL, hoặc
nếu cả num_platforms và platforms là NULL.
Khi đã có cl_platform_id dùng hàm
clGetPlatformInfo(…) để lấy thông tin OpenCL
platform.
31. OpenCL trên window
cl_int clGetPlatformInfo (cl_platform_id
platform, cl_platform_info param_name,
size_t param_value_size, void
*param_value, size_t
*param_value_size_ret)
Giá trị trả về CL_SUCCESS nếu hàm thực thi thành
công.
Ngược lại, nó trả về một trong các lỗi sau:
CL_INVALID_PLATFORM nếu platform không
phải là platform hợp lệ.
CL_INVALID_VALUE nếu param_name không
được hỗ trợ.
CL_OUT_OF_HOST_MEMORY nếu không được
phân bổ từ mã nguồn.
32. OpenCL trên window
Lấy thông tin Devices:
cl_int clGetDeviceIDs (cl_platform_id
platform,cl_device_type device_type,cl_uint
num_entries,cl_device_id *devices,cl_uint
*num_devices)
Giá trị trả về CL_SUCCESS nếu hàm thực thi thành
công.
Ngược lại, nó trả về một trong các lỗi sau:
CL_INVALID_PLATFORM : platform không hợp lệ.
CL_INVALID_DEVICE_TYPE: device_type là một
giá trị không hợp lệ.
CL_INVALID_VALUE: nếu num_entries bằng 0 và
devices không phải giá trị NULL hoặc cả
num_entries và devices đều mang giá trị NULL.
33. OpenCL trên window
Truy vấn thông tin devices:
cl_int clGetDeviceInfo (cl_device_id device,
cl_device_info param_name, size_t
param_value_size, void *param_value, size_t
*param_value_size_ret)
Giá trị trả về CL_SUCCESS nếu hàm thực thi thành
công.
Ngược lại, nó trả về một trong các lỗi sau:
CL_INVALID_DEVICE: device không hợp lệ.
CL_INVALID_VALUE: param_name không được hỗ
trợ.
CL_OUT_OF_RESOURCE nếu không được phân bổ từ
mã nguồn OpenCL trên device.
CL_OUT_OF_HOST_MEMORY nếu không được phân bổ
từ mã nguồn OpenCL trên host..
34. OpenCL trên window
Tạo Contexts:
cl_context clCreateContext (const
cl_context_properties *properties,cl_uint
num_devices, const cl_device_id *devices,
void (CL_CALLBACK *pfn_notify)(const char
*errinfo, const void *private_info,
size_t cb, void *user_data),
void *user_data,cl_int *errcode_ret)
Giá trị trả về CL_SUCCESS nếu hàm thực thi thành công.
Ngược lại, nó trả về một trong các lỗi sau:
CL_INVALID_PLATFORM : platform không hợp lệ.
CL_INVALID_PROPERTY: property không được hỗ trợ.
CL_INVALID_VALUE: properties không hợp lệ; số lượng device
là 0; danh sách device_id là null hoặc không hợp lệ.
CL_INVALID_DEVICE: devices không hợp lệ.
CL_DEVICE_NOT_AVAILABLE : danh sách device_id hiện không
khả dụng.
CL_OUT_OF_HOST_MEMORY: Host không thể cấp tài nguyên.
35. OpenCL trên window
Tạo Command Queue:
cl_command_queue clCreateCommandQueue (cl_context
context,cl_device_id device,
cl_command_queue_properties properties,
cl_int *errcode_ret)
Giá trị trả về CL_SUCCESS nếu hàm thực thi thành công.
Ngược lại, nó trả về một trong các lỗi sau:
CL_INVALID_CONTEXT : context không hợp lệ.
CL_INVALID_DEVICE: device không hợp lệ hoặc không
có mối liên hệ nào với context.
CL_INVALID_QUEUE_PROPERTIES: giá trị của
properties hợp lệ nhưng không được hỗ trợ từ
device.
CL_OUT_OF_RESOURCES: nếu không được phân bổ từ mã
nguồn OpenCL trên device.
CL_OUT_OF_HOST_MEMORY: Host không thể cấp tài
nguyên.
36. OpenCL trên window
Tạo đối tượng Program từ source:
cl_program_queue clCreateProgramWithSource
(cl_contextcontext, cl_uint count, const
char **strings, const size_t *lengths,
cl_int *errcode_ret)
Gọi hàm clBuildProgram() để tạo đối tượng
Program sau hàm clCreateProgramWithSource()
cl_int clBuildProgram(cl_program program,
cl_uint num_devices, const
cl_device_id *device_list, const char
*options, void (CL_CALLBACK
*pfn_notify)(cl_program program,
void *user_data),
void *user_data)
37. OpenCL trên window
Xem thông tin Program:
cl_int clGetProgramInfo (cl_program
program, cl_program_info param_name,
size_t param_value_size, void
*param_value, size_t
*param_value_size_ret)
38. OpenCL trên window
Tạo đối tượng Program từ binary:
cl_program_queue
clCreateProgramWithBinary (cl_context
context, cl_uint num_devices, const
cl_device_id *device_list, const
size_t *lengths, const unsigned char
**binaries, cl_int *binary_status,
cl_int *errcode_ret)
Hàm lưu trữ nhị phân
clSaveProgramBinary (cl_program program,
cl_device_id device, const char *
file_name)