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 TOÁ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ƯỜ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Ố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 CH ỦĐỀỀ .4 TỔNG QUAN 1.1 Tính tốn song song gì? .4 1.2 Tính tốn song song sử dụng .4 OpenMP LÀ GÌ? [1] 2.1 Giới thiệu OpenMP 2.2 Thiếết kếế .6 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 .9 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]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ầềnu phầều phầềnnử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 .8 Hình Kiếến trúc Power với GPU 15 Hình Cấếu hình phấần cn 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ằều phầềnngOpenMP với ngốn ngữ C/C++ khai thác GPU Áp dụng cho việc tính t c m ột m ảng có rầết nhiếều phầềnu phầều phầềnnử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 ho ặc tấết luỗần cng 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 ởi t ạo giá tr ịc m ột m ảng l ớn song song, s ửd ụng mỗỗi luỗần cng để thực phấần cn cỗng vicệ 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ỗần cnglàm vi cệc aủnó Mỗỗi ch ủđếần cseỗ nhận phiến b nảduy nhấết riếng t ưc biếến Ví dụ: với hai luỗần cnglàm việc, luỗần cngcó th để ượccung cấếp phiến b ản c i ch ạy t ừ0 đếến 49999 luỗần cng 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ếần cukiệ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ếần cuch ỉnh pragmas OpenMP mã người dùng thời điểm biến dịch Đặc tả xác định đ cặđi mể đ ểmỗ t cácả cấếu trúc OpenMP ho ạt đ ộng, thiếết bị thực thi ch ức nẵng đ ược cung cấếp triển khai, chọn ngữ cảnh dựa trến đặc điểm điếần cukiện người dùng xác định, siếu thị khai báo thị để người dùng lập trình vùng mã với th ịbiếến thể Siếu thị thị thực thi phấn giải có điếần cukiện thành m ột ch ỉth ịkhác t ại th ời ểm biến d chị bẵần cngcách ch ọn t ừnhiếần cubiếến thể thị dựa trến đặc điểm xác định điếần cukiện 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ếần cu kinệ 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 ướcC/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ấần cuhếết biếến mã OpenMP đ ược hi ển th ịcho tấết luỗần cng theomặc định Nh ngư đỗi biếến riếng cấần cn thiếếtđể tránh điếần cukiện vếần cchủng tộc cấần cnphải chuyển giá trị phấần cntuấần cntự 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 đếần cthuộc tính chia sẻ liệu bẵần cng cách thếm chúng vào thị OpenMP Các loại mệnh đếần c khác là: Các m ệnh đềề thuộc tính chia sẻ 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ư 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 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 q 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 Sự giảm bớ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ỗần cng,phát xem ngữ cảnh thực thi có nẵần cmtrong 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 ứng dụng OpenMP Được sử dụng để kiểm sốt việc lập lịch lặp lại vịng lặp, sỗế luỗần cngmặc định, v.v Ví dụ: OMP_NUM_THREADS sử dụng để đ nhị sỗế luỗần cng hoc ứ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 toá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 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 đếần cuquan tr ọng đỗếi với ứng dụng tổng thể Trong sơ đỗần cbến dưới, phác thảo quy trình biến dịch thành phấần cn 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, xử lý POWER gẵến vào GPU Nvidia thỗng qua NVLINK tỗếc đ ộ cao để truyếần cndữ liệu nhanh chóng gi a ữCPU GPU Cấếu hình phấần cnc ngứ m tộphấần cnthiếết yếếu d ựán CORAL v ới phịng thí nghi ệm quỗếc gia Hoa Kỳ đưa đếến gấần cnhơn với Máy tính Exascale Các trình biến dịch XL IBM có m t ộl chị s lấuử dài vi cệhỗỗ tr ợAPI OpenMP bẵết đấần cu ừt phiến đấần cu 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 cncứ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 IBM để phát triển sở hạ tấần cng trình biến dchị cho c ơchếế giảm tải Ngồi ra, nhóm cộng tác với cộng đỗần cngmã nguỗần cn 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 đấần cutiến hỗỗ trợ giảm tải GPU Nvidia 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 máy tính xuỗếng GPU Một vịng lặp nóng chọn để thích bẵần cng “#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 nhiếần cuso với trến CPU (OpenMP CPU) Trong trường hợp này, vịng lặp có quyếần cntruy 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.e20)); if (vdov[indx] < double(0.) ) { dtf = dtf + vdov[indx] * vdov[indx] ; } qqc2 * arealg[indx] * arealg[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 đ ượcbiếết đếến cỗng ty con, hoạt động điếần cu hành, qunả lý c t ập đoàn Google LLC – m ột t ập đoàn vếần c cỗng nghệđa quỗếc gia thành l ập có tr ụs ởchính t ạiMyỗ Đấy doanh nghiệp lớn chuyến hoạt động vếần c 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 cn cứng, phấần cn mếần cm, àVđấy m ột sỗế tập đoàn “Big four” trến thếế giới 16 Bàn làm việc Kaggle Kernels – phát minh vếần c bàn làm vicệ 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 liệu thực việc chia sẻ mã, đỗần cng thi phấn tích Java, Python R Hiện nay, có tới 150.000 hạt nhấn hay gọi đoạn mã đ ược chia s ẻthành cỗng trến Kaggle bao gỗần cmtấết thứ, từ trình phấn tích vếần c tình cmả cho đếến phát hi ện đỗếi tượng liến quan Chúng ta seỗ dùng nếần cn tngả Kaggle Kernel đ ểviếết mã C/C++ với tồn tính t ngổ c aủm t ộm ngả có rấết nhiếần cu phấần cn ửt.B ởivì Kaggle có hỗỗ trợ cho Session tương tự máy ảo, gỗần cm óc ổ cứng, RAM, CPU GPU Hình Cấếu hình phấần cn cứng mà Kaggle Kernel hỗỗ trợ Nh ưchúng ta thấếy ngỗn ng ữ trến Kaggle Python v ậy cấần cn cấếu hình cài đặt thếm GCC Ubuntu để chạy mã C/C++ nh ởphấần cn 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ẵần cng ệlnh sau: %lsmagic Hình Danh sách lệnh magic có Ta cài đ ặt chuỗỗi cỗng cụ để thử nghiệm bẵần cng ệlnh sau: !true | add-apt-repository ppa:ubuntu-toolchain-r/test Hình Chuỗỗi cỗng cụ thử nghiệm Cài dặt gói bổ sung GCC bẵần cng 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ẵần cng đonạ mã C/C++ sau : %%writefile soLuong_ThietBi.c #include