Queue không hỗ trợ xử lý song song

Successfully reported this slideshow.

Your SlideShare is downloading. ×

Queue không hỗ trợ xử lý song song

Seminar at HCMUS City HCM summer 2013.

Queue không hỗ trợ xử lý song song

Working at Information Technology - HCMUS

Seminar at HCMUS City HCM summer 2013.

More Related Content

  1. 1. SONG SONG HOÁ CÁC THAO TÁC XỬ LÝ ẢNH DÙNG OPENCL Môn học: Xử Lý Ảnh Số & Video Số Giáo viên lý thuyết: Thầy Nguyễn Trọng Việt Lớp: 11HCA – Nhóm SFF
  2. 2. Saigon Forever Friends Group - SFF STT HọTên MSSV Ghi chú 1 Võ MinhVô 1141481 Nhóm trưởng 2 LêVănTú 1141468 3 TrầnThànhÂn 1141309 4 TrầnThành Đạt 1141334 5 Phan Duy Long 1141385 6 Phạm Phong Lưu 1141394 7 Trần Bình Minh 1141397 8 Lê ĐìnhThái 1141440 9 TrầnVĩnhTiến 1141452 10 NguyễnThịTrang 1141457
  3. 3. Nội dung trình bày  Giới thiệu  Cơ sở lý thuyết song song  Sơ lược OpenCL  OpenCL trên window  Nhận xét  Hỏi đáp
  4. 4. GIỚI THIỆU Phan Duy Long
  5. 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.
  6. 6. Giới thiệu  Lợi ích song song hóa mang lại 1 2 3
  7. 7. CƠ SỞ LÝ THUYẾT SONG SONG Nguyễn Thị Trang
  8. 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. 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. 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. 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. 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. 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.
  14. 14. SƠ LƯỢC OPENCL Phạm Phong Lưu Trần Thành Đạt Lê Văn Tú
  15. 15. Sơ lược OpenCL  OpenCL là một chuẩn mở.  Đồng bộ hóa các tác vụ xử lý song song.  Bắt nguồn từ C.  Không phụ thuộc vào phần cứng.
  16. 16. Sơ lược OpenCL
  17. 17. Đặc điểm OpenCL  Khả năng làm việc trên môi trường không đồng nhất.
  18. 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.
  19. 19. Tổng quan OpenCL  Thuật ngữ
  20. 20. Tổng quan OpenCL  OpenCL Frame work được cấu thành từ:  C Platform Layer API  Kernel Language Specification  C Runtime API
  21. 21. Tổng quan OpenCL  C Platform Layer API Mô hình phần cứng của OpenCL
  22. 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. 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. 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
  25. 25. Các bước tạo chương trình OpenCL
  26. 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. 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.
  28. 28. OPENCL TRÊN WINDOW Trần Bình Minh Võ Minh Vô Trần Thành Ân
  29. 29. OpenCL trên window  Ý nghĩa, đầu vào, đầu ra một số hàm thông dụng trong OpenCL.
  30. 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. 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. 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. 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. 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. 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. 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. 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. 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)
  39. 39. OpenCL trên window  Tạo đối tượng Kernel: cl_kernel clCreateKernel (cl_program program, const char *kernel_name, cl_int *errcode_ret)  Hàm chứa các đối tượng Kernel: cl_int clSetKernelArg (cl_kernel kernel, cl_uint arg_index, size_t *arg_size, const void *arg_value)(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)
  40. 40. OpenCL trên window  Xem thông tin Kernel: cl_int clGetKernelInfo (cl_kernel kernel, cl_kernel_info param_name, size_t param_value_size, void *param_value, size_t *param_value_size_ret)  Giải phóng đối tượng Kernel: cl_int clReleaseKernel (cl_kernel kernel)  Theo dõi trạng thái Kernel: cl_int clRetainKernel (cl_kernel kernel)
  41. 41. OpenCL trên window  Hướng dẫn cài đặt, cấu hình CUDA và OpenCL trên Visual Studio 2010.  Các bước làm.
  42. 42. Bước 1  Vào đường link: developer.nvidia.com
  43. 43. Bước 2  Dowload Cuda 5.5
  44. 44. Bước 3  Chọn hẹ điều hành đang sử dụng để chạy
  45. 45. Bước 4  Tiến hành cài đặt Cuda
  46. 46. Bước 5  Tạo project mới trong visual studio 2010
  47. 47. Bước 6  Thực hiện đặt tên project như hình sau
  48. 48. Demo  Đang cập nhật …
  49. 49. HỎI ĐÁP
  50. 50. Hỏi đáp
  51. 51. Tài liệu tham khảo [1]. AaftabMunshi,BenedictR.Gaster,TimothyG.Mattson,JamesFung,DanGinsburg.OpenCL programmingguide. [2].OpenCLOverview -http://www.khronos.org/assets/uploads/developers/library/overview/opencl-overview.pdf [3].The OpenCLSpecification -KhronosGroup - http://www.khronos.org/registry/cl/specs/opencl-1.1.pdf [4].An Introductionto the OpenCLProgrammingModel, JonathanTompeson,Kristofer Schlachter
  52. 52. CẢM ƠN THẦY VÀ CÁC BẠN ĐÃ LẮNG NGHE