1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Dùng openmp viết chương trình khai thác gpu tính tổng một mảng nhiều phần tử

23 2 0

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

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 23
Dung lượng 3,43 MB

Nội dung

TRƯỜNG ĐẠI HỌC LẠC HỒNG KHOA CÔNG NGHỆ THÔNG TIN - - BÁO CÁO KẾT THÚC MƠN HỌC TÍNH T TỐN ỐN SONG SONG VÀ PHÂN TÁN ĐỀ TÀI: DÙNG OpenMP VIẾT CHƯƠNG TRÌNH KHAI THÁC GPU TÍNH TỔNG MỘT MẢNG NHIỀU PHẦN TỬ GVHD: GS TS Trần Văn Lăng Học viên: Nguyễn Trọng Kha – 921000049 Mã Lớp: 21CC911 Đồng Nai, tháng 11 năm 2022 MỤC LỤC MỤC LỤC HÌNH ẢNH .3 CH ỦĐỀỀ TỔNG QUAN .4 1.1 Tính tốn song song gì? 1.2 Tính tốn song song sử dụng OpenMP LÀ GÌ? [1] 2.1 Giới thiệu OpenMP 2.2 Thiếết kếế 2.3 Lịch sử 2.4 Các yếếu tốế cốết lõi 2.4.1 Tạo luồng 2.4.2 Các cấu trúc chia sẻ công việc 2.4.3 Các thị khác 2.4.4 Các mệnh đề 10 2.4.5 Qui trình thời gian chạy chế độ người dung .14 2.4.6 Các biến môi trường 14 OpenMP HỖỖ TRỢ TĂNG TỖỐC GPU [2] 14 ÁP DỤNG CHO VIỆC TÍNH TỔNG CỦA MỘT MẢNG.[3] 16 4.1 Giới thiệu Kaggle 16 4.2 Cài đ ặ t GCC khai báo cá thống sốế Kaggle 17 4.3 Chương trình tính tổng với mảng có nhiếều phầền tử [4] 20 4.4 Kếết luận 22 TÀI LIỆU THAM KHẢO 23 HÌNH ẢNH Hình Một minh họa đa luồng luồng tách số luồng thực thi khối mã song song Hình Biểu đồ cấu trúc OpenMP Hình Kiếến trúc Power với GPU 15 Hình Cấếu hình phấần c ứ ng mà Kaggle Kernel hỗỗ trợ 17 Hình Cấếu hình GPU T4 x2 18 Hình Danh sách lệnh magic có 18 Hình Chuỗỗi cỗng cụ thử nghiệm 19 Hình Các gói bổ sung GCC 19 Hình Kếết qu ảki ểm tra sỗế lượng GPU kích hoạt 20 Hình 10 Kếết chạy chương trình tính tổng v ới GPU .22 Hình 11 Danh sách tấết c ảcác s ựki ệ n có sẵỗn trến GPU 22 CH ỦĐỀỀ “Trình bày nh ững kiếến thức kèm theo ví d ụ minh ho ạđ ủđ ểviếết chương trình song song bằềng OpenMP v ới ngốn ngữ C/C++ khai thác GPU Áp dụng cho vi ệc tính t ổ ng c ủ am ộ tm ả ng có rầết nhiếều phầền tử” TỔNG QUAN 1.1 Tính tốn song song gì? Trong ng> c?nh đơn gi?n, tıCnh toán song song (Parallel Computing) la việc sG dHng đồng thời nhiều nguồn tai nguyIn tıCnh toán để gi?i vấn đề: – ĐưNc chạy cách sG dHng nhiều CPU – Một vấn đề chia nhiều phần rời rạc đưNc gi?i cách đồng thời – Trong phần đưNc tiếp tHc phSn chia chuỗi cSu lệnh – Nh>ng cSu lệnh đưNc thi hanh cách đồng thời trIn CPU khác 1.2 Tính tốn song song sử dụng – Khoa học sinh học, công nghệ sinh học, di truyền học – Hóa học, khoa học phSn tG – Điạ chất, điạ chấn học – Cơ khí: tW tay chSn gi? tau vX trH – Điện, thiết kế vi mạch, vi điện tG – Khoa học máy tıCnh, toán học – Data Mining – Artificial Intelligence, Machine Learning, Deep Learning – Data Science – Computational Intelligence – Chẩn đoán hınh ` ?nh y tế (Medical image diagnosis) – Qu?n la tbp đoan quốc gia, đa quốc gia – Mô hınh ` tai chıCnh va kinh tế – Đồ họa nSng cao, thực ?o, công nghiệp điện ?nh – Video mạng (Networked video) va công nghệ đa phương tiện – Bai toán sinh học phSn tG OpenMP LÀ GÌ? [1] 2.1 Giới thiệu OpenMP OpenMP (Open Multi-Processing) la giao diện lbp trình ứng dHng (API) ma hỗ trN lbp trình đa xG la nhớ dùng chung đa t?ng C, C++ va Fortran, nhiều t?ng, kiến trúc tbp lệnh va hệ điều hanh, bao gồm Solaris, AIX, FreeBSD, HP-UX, Linux, macOS va Windows Nó bao gồm tbp hNp thị trình biIn dịch, quy trình thư viện va biến môi trường ?nh hưởng đến hanh vi thời gian chạy OpenMP đưNc qu?n la tổ chức công nghệ phi lNi nhubn Ban đánh giá kiến trúc OpenMP (hoặc OpenMP ARB), đưNc xác định loạt nha cung cấp phần cứng va phần mềm máy tính hang đầu, bao gồm Arm, AMD, IBM, Intel, Cray, HP, Fujitsu, Nvidia, NEC , Red Hat, Texas Instruments va Oracle Corporation OpenMP sG dHng mơ hình di động, mở rộng cung cấp cho lbp trình viIn giao diện đơn gi?n va linh hoạt để phát triển ứng dHng song song cho t?ng khác nhau, tW máy tính để ban tiIu chuẩn đến siIu máy tính Một ứng dHng đưNc xSy dựng với mơ hình kết hNp lbp trình song song chạy trIn cHm máy tính sG dHng c? OpenMP va Giao diện truyền thông báo (MPI), cho OpenMP đưNc sG dHng cho song song nút (đa lõi) MPI đưNc sG dHng cho song song gi>a nút CXng có nh>ng nỗ lực để chạy OpenMP trIn hệ thống nhớ dùng chung đưNc phSn phối phần mềm, để dịch OpenMP MPI va mở rộng OpenMP cho hệ thống nhớ không dùng chung OpenMP la triển khai đa luồng, phương pháp song song hóa theo luồng (một chuỗi lệnh đưNc thực thi liIn tiếp) phSn chia số luồng phH cH thể va hệ thống phSn chia nhiệm vH gi>a chúng Các luồng sau chạy đồng thời, với môi trường thời gian chạy phSn bổ luồng cho xG la khác 2.2 Thiết kế Phần mã đưNc dùng để chạy song song đưNc đánh dấu tương ứng, với thị trình biIn dịch khiến luồng hình trước phần đưNc thực thi Mỗi luồng có ID gắn liền với nó, lấy đưNc ham (đưNc gọi la omp_get_thread_num ()) ID luồng la số nguyIn va luồng có ID Sau thực thi mã song song, luồng tham gia trở lại vao luồng chính, tiếp tHc đến cuối chương trình Theo mặc định, luồng thực thi phần mã song song cách độc lbp Các cấu trúc chia sẻ công việc đưNc sG dHng để phSn chia nhiệm vH gi>a luồng để luồng thực thi phần mã đưNc phSn bổ Có thể đạt đưNc c? song song nhiệm vH va song song d> liệu cách sG dHng OpenMP theo cách Môi trường thời gian chạy phSn bổ luồng cho xG la tùy thuộc vao cách sG dHng, t?i máy va yếu tố khác Mơi trường thời gian chạy ấn định số luồng dựa trIn biến môi trường mã lam vby cách sG dHng ham Các ham OpenMP đưNc bao gồm tệp tiIu đề có nhãn omp.h C/C ++ Hình Một minh họa đa luồng luồng tách số luồng thực thi khối mã song song 2.3 Lịch sử Hội đồng Đánh giá Kiến trúc OpenMP (ARB) công bố thơng số kỹ thubt API đầu tiIn mình, OpenMP cho Fortran 1.0, vao tháng 10 năm 1997 Vao tháng 10 năm sau, họ phát hanh tiIu chuẩn C/C++ Năm 2000 chứng kiến phiIn b?n 2.0 thông số kỹ thubt Fortran với phiIn b?n 2.0 thông số kỹ thubt C/C++ đưNc phát hanh vao năm 2002 PhiIn b?n 2.5 la thông số kỹ thubt C/C++/Fortran kết hNp đưNc phát hanh vao năm 2005 LIn đến phiIn b?n 2.0, OpenMP chủ yếu định cách để song song hóa vịng lặp thường xuyIn cao, chúng x?y lbp trình số hướng ma trbn, số lần lặp vịng lặp đưNc biết trước thời điểm nhbp Điều đưNc công nhbn la hạn chế va nhiều phần mở rộng nhiệm vH song song khác đưNc thIm vao triển khai Năm 2005, nỗ lực để tiIu chuẩn hóa song song nhiệm vH đưNc hình thanh, cơng bố đề xuất vao năm 2007 PhiIn b?n 3.0 đưNc phát hanh vao tháng năm 2008 Bao gồm tính 3.0 la khái niệm nhiệm vH va cấu trúc tác vH, mở rộng đáng kể phạm vi OpenMP ngoai cấu trúc vòng lặp song song tạo nIn hầu hết OpenMP 2.0 PhiIn b?n 4.0 đặc điểm kỹ thubt đưNc phát hanh vao tháng năm 2013 Nó bổ sung c?i thiện tính sau: hỗ trN cho máy gia tốc; nguyIn tG học; xG la lỗi; mối quan hệ chủ đề; phần mở rộng nhiệm vH; gi?m người dùng xác định; Hỗ trN SIMD; Hỗ trN Fortran 2003 PhiIn b?n la 5.2, phát hanh vao tháng 11 năm 2021 Lưu a khơng ph?i tất c? trình biIn dịch (va hệ điều hanh) hỗ trN tbp hNp đầy đủ tính cho phiIn b?n 2.4 Các yếu tố cốt lõi Các yếu tố cốt lõi OpenMP la cấu trúc để tạo luồng, phSn phối khối lưNng công việc (chia sẻ công việc), qu?n la mơi trường d> liệu, đồng hóa luồng, quy trình thời gian chạy cấp người dùng va biến mơi trường Hình Biểu đồ cấu trúc OpenMP Trong C/C ++, OpenMP sG dHng #pragmas Các pragmas cH thể OpenMP đưNc liệt kI bIn 2.4.1.Tạo luồng Pragma omp song song đưNc sG dHng để phSn nhánh luồng bổ sung để thực công việc kèm theo cấu trúc cách song song Luồng gốc đưNc ka hiệu la luồng chủ với ID luồng la Ví dH (chương trình C): Hiển thị "Hello, world." sG dHng nhiều chủ đề #include #include int main(void) { #pragma omp parallel printf("Hello, world.\n"); return 0; } SG dHng cờ -fopenmp để biIn dịch GCC: $ gcc -fopenmp hello.c -o hello -ldl Đầu trIn máy tính có hai lõi va có hai luồng: Hello, world Hello, world 2.4.2 Các cấu trúc chia sẻ công việc Được sử dụng để định cách phấn cỗng cỗng vi ệc đ ộc l ập cho m ột ho ặc tấết luỗầng  omp for omp do: đưNc sG dHng để chia nhỏ lần lặp vòng lặp gi>a luồng, đưNc gọi la cấu trúc vòng lặp  sections: gán khối mã liIn tiếp độc lbp cho chủ đề khác  single: định khối mã đưNc thực thi luồng, có hang rao kết thúc  master: tương tự single, khối mã đưNc thực thi master thread va khơng có hang rao nao để kết thúc Ví dụ : kh it o giá tr ịc ủ am ộ t m ả ng l n song song, s ửd ụ ng mỗỗi luỗầng để thực phấần cỗng việc int main(int argc, char **argv) { int a[100000]; #pragma omp parallel for for (int i = 0; i < 100000; i++) { a[i] = * i; } return 0; } Ví dụ song song cách đáng ngạc nhiến phụ thu ộc vào giá tr ịc i C ờsong song OpenMP cho h ệthỗếng OpenMP chia tác v ụ gi aữcác luỗầng làm vi cệc aủnó Mỗỗi ch ủđếầ seỗ nhận đ ược phiến b nảduy nhấết riếng t ưc biếến Ví d ụ: với hai luỗầng làm vi ệc, m ột luỗầng có th để ượ c cung cấếp phiến b ản c i ch ạy t ừ0 đếến 49999 luỗầng th ứhai nh ận đ ược phiến d ch ị ch ạy t ừ50000 đếến 99999 2.4.3 Các thị khác Các ch ỉth ịbiếến thể tính nẵng gi ới thi ệu đặc tả OpenMP 5.0 đ ể t ạo điếầu ki ện cho lập trình viến c ải thi ện tính di đ ộng c hi ệu suấết Chúng cho phép điếầu chỉnh pragmas OpenMP mã ng ười dùng thời ểm biến d ịch Đặc tả xác đ ịnh đ cặđi m ểđ ể mỗ t ả cấếu trúc OpenMP ho ạt đ ộ ng, thiếết b ị th ực thi ch ức nẵng đ ược cung cấếp m ột tri ển khai, chọn ng ữ cảnh dựa trến đặc ểm điếầu kiện người dùng xác đ ịnh, siếu ch ỉ th ị khai báo thị để người dùng lập trình m ột vùng mã với ch ỉ th ịbiếến thể Siếu thị thị thực thi phấn gi ải có điếầu ki ện thành m ột ch ỉth ịkhác t ại th ời ểm biến d ch ị bẵầng cách ch ọn t ừnhiếầu biếến thể thị dựa trến đặc điểm xác định điếầu kiện ho ặc ngữ cảnh OpenMP Ch ỉth ịbiếến thể khai báo có chức nẵng t ương tự siếu thị nh ưng ch ọn m ột biếến thể chức nẵng trang web g ọi d ựa trến ngữ cảnh điếầu kiện người dùng xác định C chếế đ cượ cung cấếp b i ởhai ch th ỉ biếến ị th ểđ ểch ọ n biếến th ể thuận ti nệh nơđ sể dử ng ụ so v i ớx lý tr ướ c C/C ++ hỗỗ tr ợtr ực tiếếp lựa ch ọn biếến thể OpenMP cho phép trình biến dịch OpenMP phấn tích xác đ nhị ch thỉ cuỗếi ị t ừcác biếến thể ngữ cảnh // code adaptation using preprocessing directives int v1[N], v2[N], v3[N]; #if defined(nvptx) #pragma omp target teams distribute parallel for map(to:v1,v2) map(from:v3) for (int i= 0; i< N; i++) v3[i] = v1[i] * v2[i]; #else #pragma omp target parallel for map(to:v1,v2) map(from:v3) for (int i= 0; i< N; i++) v3[i] = v1[i] * v2[i]; #endif // code adaptation using metadirective in OpenMP 5.0 int v1[N], v2[N], v3[N]; #pragma omp target map(to:v1,v2) map(from:v3) #pragma omp metadirective \ when(device={arch(nvptx)}: target teams distribute parallel for)\ default(target parallel for) for (int i= 0; i< N; i++) v3[i] = v1[i] * v2[i]; 10 2.4.4 Các mệnh đề Vì OpenMP m ột mỗ hình l ập trình b ộnh ớdùng chung, hấầu hếết biếến mã OpenMP đ ược hi ể n th ịcho tấết c ả luỗầng theo m ặc đ ịnh Nh ng đỗi biếến riếng cấần thiếết đ ể tránh điếầu ki ện vếầ ch ủng tộc cấần phải chuyển giá trị phấần tuấần t ự vùng song song (khỗếi mã thực thi song song), đó, quản lý tr ường liệu giới thiệu dạng mệnh đếầ thuộc tính chia sẻ liệu bẵầng cách thếm chúng vào thị OpenMP Các loại mệnh đếầ khác là: Các m ệnh đềề thu ộc tính chia s ẻ d ữ li ệu  shared: d> liệu đưNc khai báo bIn ngoai vùng song song đưNc chia sẻ, có nghĩa la tất c? luồng nhìn thấy va truy cbp đồng thời Theo mặc định, tất c? biến vùng chia sẻ công việc đưNc chia sẻ ngoại trW đếm lặp vòng lặp  private: d> liệu đưNc khai báo vùng song song la riIng tư luồng, có nghĩa la luồng có b?n cHc va sG dHng biến tạm thời Một biến riIng khơng đưNc khởi tạo va giá trị khơng đưNc trì để sG dHng bIn ngoai vùng song song Theo mặc định, đếm lặp vòng lặp cấu trúc vòng lặp OpenMP la riIng tư  default: cho phép lbp trình viIn tuyIn bố phạm vi d> liệu mặc định vùng song song đưNc chia sẻ khơng có C/C++ đưNc chia sẻ, riIng tư, riIng tư khơng có Fortran Tùy chọn khơng buộc người lbp trình ph?i khai báo tWng biến vùng song song cách sG dHng mệnh đề thuộc tính chia sẻ d> liệu  firstprivate: giống private ngoại trW đưNc khởi tạo giá trị ban đầu  lastprivate: giống private ngoại trW giá trị ban đầu đưNc cbp nhbt sau xSy dựng  reduction: cách an toan để kết hNp công việc tW tất c? luồng sau xSy dựng 11 Các m nh ệ đềề đồềng b ộ hóa  critical: khối mã kèm theo đưNc thực thi luồng thời điểm va không đưNc thực thi đồng thời nhiều luồng Nó thường đưNc sG dHng để b?o vệ d> liệu đưNc chia sẻ khỏi điều kiện đua  atomic: việc cbp nhbt nhớ (ghi, đọc-sGa-ghi) lệnh đưNc thực atomic Nó khơng lam cho toan tuyIn bố trở atomic; có b?n cbp nhbt nhớ la atomic Một trình biIn dịch sG dHng hướng dẫn phần cứng đặc biệt để có hiệu suất tốt so với sG dHng critical  có thứ tự(ordered): khối có cấu trúc đưNc thực thi theo thứ tự ma lần lặp đưNc thực vòng lặp  barrier: luồng chờ tất c? luồng khác nhóm đạt đến điểm Một cấu trúc chia sẻ công việc có đồng hóa ngầm định cuối  nowait: định luồng hoan công việc đưNc giao tiến hanh ma khơng cần đNi tất c? luồng nhóm hoan Trong trường hNp khơng có điều kho?n nay, luồng gặp ph?i đồng hóa rao c?n cuối cấu trúc chia sẻ công việc L ập l ch ị m ệnh đềề  schedule (type, chunk): Điều h>u ích cấu trúc chia sẻ cơng việc la vịng lặp do-loop vòng lặp for Các bước lặp cấu trúc chia sẻ công việc đưNc gán cho luồng theo phương pháp lbp lịch đưNc định nghĩa điều kho?n Ba loại lbp lịch la: static: Ở đSy, tất c? luồng đưNc cấp phát lần lặp trước chúng thực lần lặp vòng lặp Các lần lặp đưNc chia cho chủ đề theo mặc định Tuy nhiIn, việc định số nguyIn cho tham số chunk phSn bổ số lần lặp liền kề chunk cho luồng cH thể dynamic: Ở đSy, số lần lặp đưNc phSn bổ cho số luồng nhỏ Sau luồng cH thể kết thúc trình lặp đưNc cấp phát nó, quay trở lại để lấy luồng khác tW lần 12 lặp lại Tham số chunk xác định số lần lặp liền kề đưNc phSn bổ cho luồng thời điểm guided: Một lưNng lớn lần lặp liền kề đưNc phSn bổ động cho luồng (như trIn) Kích thước phSn đoạn gi?m theo cấp số nhSn với lần phSn bổ liIn tiếp đến kích thước tối thiểu đưNc định phSn đoạn tham số IF ki ểm soát  if: Điều khiến luồng thực song song nhiệm vH điều kiện đưNc đáp ứng Nếu không, khối mã thực thi Kh ởi t ạo  firstprivate: d> liệu la riIng tư cho luồng, đưNc khởi tạo giá trị biến sG dHng tIn tW luồng  lastprivate: d> liệu la riIng tư cho luồng Giá trị d> liệu riIng tư đưNc chép vao biến toan cHc sG dHng tIn bIn ngoai vùng song song lần lặp la lần lặp cuối vịng lặp song song Một biến la c? riIng tư đầu tiIn va riIng tư cuối  threadprivate: D> liệu la d> liệu chung, la d> liệu riIng tư tWng vùng song song thời gian chạy Sự khác biệt gi>a threadprivate va private la phạm vi toan cầu đưNc liIn kết với threadprivate va giá trị đưNc b?o toan trIn vùng song song Sao chép liệu  copyin: tương tự firstprivate cho biến private, biến threadprivate không đưNc khởi tạo, trW sG dHng copyin để chuyển giá trị tW biến toan cHc tương ứng Khơng cần copyout giá trị biến threadprivate đưNc trì suốt trình thực thi toan chương trình  copyprivate: đưNc sG dHng với single để hỗ trN việc chép giá trị d> liệu tW đối tưNng riIng trIn luồng (luồng đơn) sang đối tưNng tương ứng trIn luồng khác nhóm 13 Sự giảm t  reduction (operator | intrinsic : list): biến có b?n cHc luồng, giá trị b?n cHc đưNc tóm tắt (gi?m) biến chia sẻ toan cHc Điều h>u ích hoạt động cH thể (đưNc định toán tG cho mệnh đề cH thể nay) trIn biến chạy lặp lặp lại, giá trị lần lặp cH thể phH thuộc vao giá trị 2.4.5 Qui trình thời gian chạy chế độ người dung Đ ược s ửd ụng đ ểs ửa đ ổi / ki ểm tra sỗế l ượng luỗầng, phát hi ện xem ngữ cảnh thực thi có nẵầm vùng song song khỗng, có bao nhiếu b ộ x ửlý h ệthỗếng tại, khóa set/unset, chức nẵng timing, v.v 2.4.6 Các biến môi trường Một phương pháp để thay đ ổi tính nẵng th ực thi c ứng dụng OpenMP Được sử dụng đ ể kiểm soát vi ệc l ập l ịch lặp lại vòng l ặp, sỗế luỗầng mặc định, v.v Ví dụ: OMP_NUM_THREADS đ ược sử d ụng đ ể đ nh ị sỗế luỗầng cho ứng dụng OpenMP HỖ TRỢ TĂNG TỐC GPU [2] Trong nh>ng thbp kỷ qua, thấy tốc độ CPU tăng chbm lại va vấn đề ma muốn gi?i trở nIn phức tạp Với tiến công nghệ GPU, việc sG dHng sức mạnh tính tốn GPU trở cách tiếp cbn đầy hứa hẹn Điều tạo thách thức mơ hình lbp trình kiến trúc khơng cịn đồng n>a Các lbp trình viIn khơng muốn xG la ISA (Kiến trúc tbp lệnh) khác ứng dHng họ muốn t?i phần nặng tính tốn ứng dHng xuống GPU thiết bị khác Cần có mơ hình lbp trình lam cho phần cứng bIn trở nIn minh bạch va cung cấp mức độ kh? dHng cao Ủy ban ngôn ng> OpenMP va thIm tính vao đặc t? để khai thác phần cứng có kh? gi?m t?i Trong OpenMP API 4.0 (xuất b?n năm 2013), đặc t? cung cấp tbp hNp lệnh để hướng dẫn trình biIn dịch va thời gian chạy t?i khối mã xuống thiết bị Thiết bị la GPU, FPGA, 14 v.v Tiểu ban tăng tốc tiếp tHc nỗ lực bổ sung thIm nhiều tính va lam rõ cấu trúc thiết bị OpenMP API 4.5 (xuất b?n năm 2015) Trình biến d ch ị XL có cách tiếếp cận tồn di ện đ ể khai thác b ộ xử lý POWER đ cượ kếết nỗếi v ới GPU Nvidia Trong ứng d ụng ể n hình, m ột sỗế b ộph ận phù h ợp đ ểch ạy trến GPU đ ểtẵng tỗếc, ph ận khác đ ể chạy trến CPU Do đó, hi uệsuấết trến c ảCPU GPU đếầu quan tr ọng đỗếi v ới ứng dụng tổng thể Trong sơ đỗầ bến dưới, phác thảo quy trình biến dịch thành phấần c ủ a minh h ọ a cách hỗỗ trợ giảm tải GPU Hình Kiếến trúc Power với GPU Trong thếế h ệkiếến trúc POWER mới, b ộ xử lý POWER gẵến vào GPU Nvidia thỗng qua NVLINK tỗếc đ ộ cao đ ể truyếần d ữ li ệu nhanh chóng gi a ữ CPU GPU Cấếu hình phấần c ng ứ m tộphấần thiếết yếếu d ựán CORAL v ới phịng thí nghi ệm quỗếc gia c Hoa Kỳ có th ể đ ưa đếến gấần với Máy tính Exascale Các trình biến d ịch XL c IBM có m t ộl chị s lấu dài vi cệhỗỗ tr ợAPI OpenMP bẵết đấầu từ phiến b ản đấầu tiến c aủđ cặt ả Các trình biến d chị XL tiếếp t ụ c hỗỗ tr ợ đ ặc t ả OpenMP khai thác kiếến trúc phấần cứng POWER v ới GPU Nhóm biến dịch XL hợp tác ch ặt cheỗ với nhóm Nghiến cứu c IBM để phát triển c s hạ tấầng trình biến d ịch cho c ơchếế giảm tải Ngồi ra, nhóm cộng tác v ới c ộng đỗầng mã nguỗần m ởcho giao di ện th ời gian ch ạy trến th ưvi ện th ời gian ch ạy thiếết b ị GPU 15 Trình biến d ch ị XL đấầu tiến hỗỗ trợ giảm tải GPU Nvidia đ ược phát hành vào tháng 12 nẵm 2016 Đo ạn mã sau minh h ọa l ợi thếế việc giảm tải mã chuyến sấu c máy tính xuỗếng GPU Một vịng lặp nóng chọn để thích bẵầng “#pragma omp parallel for” để song song hóa trến CPU v ới “ #pragma omp target teams distribute parallel for” đ ểgi ả m t ải cho GPU Tỗếc độ tẵng t ừgi ảm t ải đếến GPU (OpenMP GPU) cao h ơn nhiếầu so v ới trến CPU (OpenMP CPU) Trong trường hợp này, vịng l ặp có quyếần truy c ập th ường xuyến vào nhớ giúp khai thác sức mạnh tính tốn GPU for (int i = ; i < n ; ++i) { int indx = idxlist [i]; double dtf = 1.0e+20; double dtdvov = 1.0e+20; if (vdov[indx] != double(0.)) { dtf = ss[indx] * ss[indx] ; dtdvov = dvovmax / (FABS(vdov[indx])+double(1.e-20)); if (vdov[indx] < double(0.) ) { dtf = dtf + qqc2 * arealg[indx] * arealg[indx] * vdov[indx] * vdov[indx] ; } dtf = SQRT(dtf) ; dtf = arealg[indx] / dtf ; } dtcourant = dtf < dtcourant ? dtf : dtcourant; dthydro = dtdvov < dthydro ? dtdvov : dthydro; } ÁP DỤNG CHO VIỆC TÍNH TỔNG CỦA MỘT MẢNG.[3] 4.1 Giới thiệu Kaggle Kaggle đ ượ c biếết đếến cỗng ty con, hoạt đ ộng d ưới s ự điếầu hành, qu ản lý c t ập đoàn Google LLC – m ột t ập đoàn vếầ cỗng ngh ệđa quỗếc gia đ ược thành l ậ p có tr ụs ởchính t i Myỗ Đấy doanh nghiệp l ớn chuyến hoạt đ ộng vếầ nh ững d ch ị v ụvà s ản ph ẩm có liến quan đếến mạng Internet d ịch v cỗng ụ ngh thỗng ệ tin, qu ng ả cáo tr cựtuyếến, cỗng c ụtìm kiếếm thỗng tin, phấần c ứng, phấần mếầm, Và m ột sỗế nh ững t ập đoàn “Big four” trến thếế giới 16 Bàn làm việc Kaggle Kernels – phát minh vếầ bàn làm vi ệc d ựa trến hi ệu ng ứ đám liến quan đếến nghiến c ứ u khai thác khoa h ọ c máy tính, kyỗ thuật với học máy Với bàn làm việc Kaggle cho phép nhà khoa h ọc d ữ liệu thực việc chia sẻ mã, đỗầng thời phấn tích Java, Python R Hiện nay, có tới h ơn 150.000 h ạt nhấn hay g ọi đo ạn mã đ ược chia s ẻthành cỗng trến Kaggle bao gỗầm tấết m ọi thứ, t q trình phấn tích vếầ tình c mả cho đếến phát hi ệ n đỗếi tượng liến quan Chúng ta seỗ dùng nếần t ảng Kaggle Kernel đ ểviếết mã C/C++ v ới toàn tính t ng ổ c aủm t ộm ng ả có rấết nhiếầu phấần t B i Kaggle có hỗỗ tr ợ cho Session tương tự máy ảo, gỗầm có ổ c ứng, RAM, CPU GPU Hình Cấếu hình phấần c ứ ng mà Kaggle Kernel hỗỗ trợ Nh ưchúng ta thấếy ngỗn ngữ trến Kaggle Python v ậy cấần cấếu hình cài đặt thếm GCC nh Ubuntu đ ể có th ể ch ạy đ ược mã C/C++ nh ởphấần tiếếp theo 4.2 Cài đặt GCC khai báo cá thơng số Kaggle Chọn cấu hình GPU để tăng tốc độ tính tốn 17 Hình Cấếu hình GPU T4 x2 Nh chúng ta thấếy Kaggle hỗỗ trợ GPU T4 2, GPU P100 TPU v3-8 Li ệ t kế l ệ nh magic có sẵỗn Kaggle Kernel, bẵầng l ệnh sau: %lsmagic Hình Danh sách lệnh magic có Ta cài đ ặ t chuỗỗi cỗng cụ để thử nghiệm bẵầng lệnh sau: !true | add-apt-repository ppa:ubuntu-toolchain-r/test 18 Hình Chuỗỗi cỗng cụ thử nghiệm Cài dặt gói bổ sung GCC bẵầng cấu lệnh sau: !apt-get -y install gcc-10 g++-10 gcc-10-offload-nvptx libgomp1 Hình Các gói bổ sung GCC Th nghi mệ ki mể tra sỗế l ượng thiếết bị bẵầng đoạn mã C/C++ sau : %%writefile soLuong_ThietBi.c #include 19 #include int main(void) { int soLuong = omp_get_num_devices(); printf("Sỗế l ượng thiếết bị = %d\n", soLuong); } Dùng lệnh sau để chạy biến dịch mã C/C++ !gcc soLuong_ThietBi.c -fopenmp -o soLuong_ThietBi !./soLuong_ThietBi Hình Kếết qu ảki ểm tra sỗế lượng GPU kích hoạt 4.3 Chương trình tính tổng với mảng có nhiều phần tử [4] Ta khai báo mảng có triệu phấần tử #define SIZE 1000000 Và thư viện cấần dùng cho ch ương trình #include #include #include Đoạn mã chương trình sau mơ t? cách tính tổng m?ng có triệu phần tG: Đầu vao : số phSn tG mạng có giá trị tăng tW đến 999,999 ĐSu : Tổng tất c? phần tG va thời gian chạy chương trình Ta thIm đoạn mã sau để sG dHng GPU tính toán #pragma omp target data map(to:array_sum[0:SIZE]), map(from: sum) { 20 for (int i =0; i

Ngày đăng: 26/06/2023, 08:59

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

TÀI LIỆU LIÊN QUAN

w