• Tidak ada hasil yang ditemukan

D

N/A
N/A
Protected

Academic year: 2024

Membagikan "D"

Copied!
9
0
0

Teks penuh

(1)

ITNG D U N G K H U N G L A M V I E C J A V A F O R K / J O I N T H V C THI M O T S O T H U i ^ T T O A N S A P X E P S O N G S O N G

NGUYEN LE TRUNG THANH NGUYEN VAN KHANG - DINH THI DIEU MINH Tnrdng Bgi hoc Suphgm — Dgi hgc Hui T6m tat: Bai bao trinh b^y khung lam viec Java Fork/Jom - m^t d5c digm mdi trong Java 7. Khung Iam vide nay thich hgp dk giai quy8t Icrp bai toan sii dung ky diulit de quy, trong do cac bai toan sau khi phan ra co kich thudc tuong doi nho. Mpt trong nhung uu diem cCia khung lam viec Fork/Join la kJ thuat work-stealing, kJ' thuat nay tao nen sir can bing vd kh6i lugng cac cong vi?c thiic hien song song vai chi phi ddng bO hoa tuong d6i thip.

Khung l^m vi|c Fork/Join dugc ap dung dk th\rc thi cac thuat toan sSp xep de quy tidu biau: sip xkp tr^n va sip xdp nhanh. K^t qua dugc thd hien qua thoi gian thuc hien va hf s6 tang t6c cua thuat toan song song.

Tu khda: khung Iam viec Fork/Jom, thuat toan work-stealing, sip xdp trdn song song, sap xep nhanh song song

l.GICil THIEU

Ngon ngii Java da hd trg luong (thread) va tuon^ tranh (concurrency) tii rit som. Tuy nhien, cho ddn nam 1995 hau hdt cac nen tang phin ciing v i n chua h6 trg vide tmh toan song song. Tai thai diem do, luong chii ydu dugc su dung cho nhiing cong vide co tinh khong dong bg thay vi nhung cong viec co tinh tuong tranh.

Theo thai gian, cac he thong da bp vi xu Iy ngay cang dd tiep can han, cac iing dung khai thac siic manh cua tinh toan song song trdn hd thong da bg vi xir ly cimg nhilu han. Lap trinh vidn nhan thay rang xay dung chuang trinh song song tren nen tang cu tra nen kho khan va dd phat sinh loi. Mac du goi java.util.concurrent dugc bo sung vao Java 5 ho trg cac thanh p h i n huu ich trong vide xay dung cac chuong trinh tuang tranh:

hang dgi, thread pool..., tuy nhien nhiing ky thuat nay thich hgp cho viec giai quydt nhiing bai toan ma sau khi dugc phan ra co kich thuac tuong doi lan; cac chuong trinh ling dung chi can phan ra cong vide ciia chung sao cho so cong viec tuang tranh khong it h a n so lugng bp vi xii ly hidn co.

Toe dp tinh toan cua CPU khong tang nhieu trong khoang 10 nam gan day [3]. Dd tang toe dp tinh toan. thay vi tang toe dp xir Iy ciia CPU, nguai ta thiet ke nhieu nhan (core) tren mpt chip. Voi xu huang da niian ciia p h i n ciing, van de dat ra la can phai co mot c a chd son§ song thich hgp dd giai quyet cac bai toan sau khi dugc phan ra co kich thuac t u a n g doi nho.

v i n dd trdn dugc giai quydt bang khung lam viec Fork/Join tren Java theo y tuong cua Doug Lea [I ]. Tac gia mo ta khung Iam viec cho phep ho trg lap trinh song song, trong

T^p chi Khoa hpc va Giao due, Tniong Dai hoc Su pham Hu^

ISSN !859-1612, sa 02(30)/2014; tr. 73-81

(2)

NGUYEN LE TRUNG THANH va cs.

do cong viec ban diu duac phan ra thanh nhirng cong viec nho hon va thuc Men tinh toan song song tren nhimg cong viec nay.

Vi vay. khung lam viec Fork/Jom da duoc dua vao Java 7 nham de giai quyet cac bai toan sau khi dugc phan ra co kich thuoc tuong dai nho mot each hieu qua.

2. TONG QUAN VE KHUNG LAM VEC FORK/JOIN

Khung lam viec Fork/Join la su thuc thi cua giao dien ExecutorService. No dugc thiSt kk dk giai quy8t bai toan theo chien luge "chia de tri":

1. Phan ra (fork) bai toan ban diu thanh nhiing bai toan con nho hon.

2. Thuc thi cac bai toan dugc phan ra bang cac ludng (tiep tuc phan ra bai toan nSu kich thudc ciia no chua dii nho).

3. Cha dgi va k^t hgp Ooin) k6t qua nhan dugc tir cac bai toan con de co dugc ket qua ciia bai toan ban dau.

Khung lam viec Fork/Jom phan phoi cong viec cho cac luong thuc thi trong thread pool.

Thread pool da xuat hien tir Java 5, tuy nhien vai khung lam viec Fork/Join g Java 7, thread pool quan ly eae ludng thuc thi biing thuat toan work-stealing. Thuat toan work- steahng dugc ap dung trong Cilk [4] vdi y tuong la cac luong thuc thi sau khi hoan tat cac cdng vice cua minh cd the "13y cap" cong viee cua cac luong chua hoan tat cong vice khac de diuc hien.

Trung tam ciia khung lam viec Fork/Join la lop ForkJoinPool, mot su mo rgng ctia lop AbstractExecutorService. ForkJoinPool true tiep thuc hien thuat toan "work-steaUng"-|

va chay cac the hien thuc thi ForkJomTask. Cac ddi tugng ForkJoinTask co 2 phuong ' thuc cliinh;

• Phuang thilc fork(): cho phep ForkJoinTask hien tai khai dgng mgt ForkJoinTask mgi

• Phuong thiic joinO: cho phep mpt ForkJoinTask cha dgi su hoan tit cua ForkJoinTask khac.

Cd 2 loai ForkJoinTask:

• RecursiveAction: cac die hien cua RecursiveAction khong tra ve gia tri khi dugc thuc thi.

• RecursiveTask: cac the hien cua RecursiveTask tra lai gia tri khi dugc thuc thi.

3. KY THUAT WORK-STEALING

Khung lam viec Fork/Join giam tranh chSp cong viec a hang doi bSng ky thuat co ten work-stealing. Trong do, mSi ludng thuc thi co mgt hang dai rieng. Hang dgi nay, co ten got la dequeue, co the thao tac vol cac cong viec a ca 2 diu cua hang dai. Moi ludng thuc hien cong viec dugc giag bang each phan ra thanh cac cong vice nho'hgn Sau khi phan ra, cac cong viec mai nho hon dugc them vao diu cua dequeue. Ludng lai tiSp tac

(3)

LTNG DUNG KHUNG LAM VI$C JAVA FORK/JOIN...

lay cong viec a dku cua dequeue de thuc hien. Vide b6 sung va lay cong vide tai diu cua dequeue dugc tidn hanh theo n^yen tic ngan xdp (cong vide nao dugc thdm vao sau Cling se dugc lay ra thuc hidn dau tien). Sau mgt s6 lin lap, cac cong vide nho se nim phia truac hang dgi, cac cong vide Ion hon va chua dugc phan chia se nam a phia cuoi hang dgi.

Vai each hoat dpng nhu vay, vide tranh chip giua cac luong dugc giam di dang ke vi nhiing nguyen nhan sau:

L Moi luong se thuc thi cac cong viec tai didm diu hang dgi cua no. Ndu thuc hien xong cac cong vide ciia minh, no se truy cap vao diem cuoi hang dgi ciia luong khac de liy cong vide. Didu nay Iam cho xung dot se khong xay ra a didm diu ciia hang dgi.

2. Vide "tranh chap*' neu co xay ra thi se dien ra o cuoi hang dgi. Tuy nhidn, hidn tugng nay xay ra tuong doi it \*i chi khi cac luong khac hoan tit cong vide cua mmh, chiing mai nhan cong vide cija luong khac dd thuc thi. Cac cong vide a cuoi hang dgi la cac cong vide co khoi lugng Idn vi vay neu dugc giao cho mgt lu6ng nao do, luong nay se mat nhidu thai gian dd xii Iy cong viec din ddn so lan giao tiep ciia luong nay voi cac luong khac dugc giam xu6ng.

Vide giam tranh chap xay ra giua cac luong dan den vide giam dang ke chi phi ddng bp hoa so voi each tiep can su dung thread pool. Ky thuat work-stealing tao ndn su can bang trong thuc hidn cac cong vide vdi chi phi dong bg hda tuong d6i thip.

4. SU" DUNG KHUNG LAM VIEC FORK/JOIN THUC THI MOT SO THUAT TOAN SAP XEP SONG SONG

Vdi dac thii cua khung Iam vide Fork/Join tren Java, no thich hgp voi lop bai toan su dung ky thuat dd quy, trong do co cac bai toan sap xdp. Cac thuat toan sip xdp ciing la mgt phan quan trgr^ trong chuang trinh hgc ciia sinh vidn khoa Tin hpc thonp qua mgt so hgc phin bat bupc nhu "Cau tnic dii lieu va giai thuat", "Phan tich va thidt kd thuat toan". Trong khuon kho chuong trinh, cat thuat toan sap xdp dugc giai thieu cho sinh vien deu a dang thuat toan tuan tu. Nhom tac gia ap dung khung lam vide Fork/Jom dd thirc thi mgt so thuat toan sap xep de quy tieu bidu la sap xep trpn va sap xep nhanh voi muc dich giai thidu cho sinh vidn cac thuat toan sap xdp duai goc dp cua lap trinh song song, giup sinh vidn hinh thanh tu duy lap trinh da d ^ g va phong phii han.

4.L s i p xep tron song song (Parallel Mei^e Sort)

sip xep trgn la vi du dien hinh ciia thuat loan sap xdp su dung ky thuat dd quy. Y tuong sap xep trpn la lidn tidp phan ra du lieu ban dau cho den khi con mpt hoac hai phan tir, sip xep roi trpn chiing lai vai nhau [5]. Thuat toan sap xep trpn song song dugc thuc hidn nhu sau:

I. Neu kich thuac ciia dii lieu ban dau (thuang la mang) nho hon nguong xac dinh, thuc hidn sap xdp theo thuat toan sap xep trgn tuan tu.

(4)

NGUYEN LE TRUNG THANH va cs.

i

2. Ndu kich thuoc cua mang lan hon nguong xac dinh. chia mang lam hai phan, thuc hien vide sip xep trdn timg phin mot each song song.

3. Sau khi timg phin dugc sip xdp, thuc hien \'idc iron hai phin do de dugc mang ggp dugc sap xdp.

Khung Iam viec Fork/Join thich hgp cho viec thuc thi thuat loan sap xdp tron song song:

tai moi buac, vide sip xep timg nua cua mang dugc thuc hien song song. Duai da>- la mpt phin doan ma cua thuat toan:

protected void compute 0 { if (start >= end) {

return;

} else if (end - s t a r t < threshold) {

MergeSort.sequentialSort(array, s t a r " , end) ; } else {

in:; middle = s t a r t + [end-start) /2,-

MergeSort^Action workerl = new MergeSortAction (array, s t a r t , middle, threshold);

MergeSortAction worker2 = new MergeSortAction(array, middle + i, end, threshold);

invokeAll (woricerl, worker2) ; merge (iniddle);

Trong do, lop MergeSortAction la mo rgng ciia lop Recursi\eAction. Ham lao MergeSortAction(array, start, end, threshold) khi dugc ggi se thuc thi phuong Ihuc computeO thuc hien sap xep m ^ g array tir chi so start den chi so end. Neu kich Ihuoc ciia mang nho hon mgt nguong xac dinh (threshold) ihi mang dugc sap xep UTJC tiep bing thuat toan sap xdp trpn tuan tu qua lai gpi phuong thiic sequenlialSorl(array, siarl.

end). Ndu kich thuac mang lan han nguong, cdng viec dugc chia lam hai: the hien workerl ciia lop MergeSortAction chiu trach nhi?m sap xep nua ben trai cua mang, the hi^n worker2 chiu trach nhiem sap xdp nira con lai. Hai cong \'iec dugc tien hanh song song qua loi ggi invokeAII(workerl, worker2). Phuang thiic imokeAlI bao g6m viec phan chia cong vide (phuang thtrc fork()) cho workerl, worker2 va cho dgi cho ddn khi workerl. worker2 hoan tat cong vide (phuang thiic join()). Sau khi tirng phin cong viec dugc hoan tat, cac ket qua dugc trgn lai mpt each tuan tu qua loi gpi phuang thiic merge(middle).

De sap xep mang ban diu, tac vu task dugc tao ra va thuc thi thong qua doi tugng ForkJoinPool:

public void parallelKergeSort(int[] array) {

M l

(5)

IJMG DUNG KHUNG LAM VI$C JAVA FORK/JOIN...

ForkJoinPool pool new ForkJoinPool(};

new MergeSorr.iVction [array.

MergeSortAction task array.length-1,

array.length/Runtime.getRuntime0.availableProcessors0) pool.invoke(task) ;

Thai gian thuc hien ciia thuat toan sSp x8p trpn tuan tu va sSp x i p trpn song song tren mang cac sd nguyen duac smh ngSu nhien, kich thudc mang tit 2000000 dkn 20000000 dupc the hien qua hmh 1 va hmh 2. Thuat toan lan luat chay tren he thdng 2 nhan va 4 nhan vcri thong tin cu thi: (2 nhan) Pentium(R) Dual-Core CPU E5700@ 3.00GHz 3.00GHz 1.96 GB of RAM, 32-bit Operating System; (4 nlian) Intel(R) Core(TM) 17- 3820QM CPU @ 2.70Ghz 2.70GHz, 12.0 GB of RAM, 64-bit Operatmg System, x64- based processor, duac cai dat tren moi truong phat triSn tich hpp Echpse Juno.

Sap xep tron song song sir dung khung lam viec Fork/Join

Kicb tbiro'c dtr lien

-Sap xep trpn tuan tv (2 nbkn)

- SSp xip trOn song som (2 - S ^ xep tron tuan tir (4

•han)

- S ^ xep trgn song song (4 nban)

Hinh I. Sdp xep trgn tudn tu, sdp xep Iron song song ti-en he thdng 2 nhdn vd 4 nhdn He so tang toe (speedup) ciia chuong trinh song song dugc tinh bang thuang sd ciia thai gian thuc hidn tuan tu va thai gian thuc hien song song trdn p nhan [2]. He so tang toe cho thay su gia tang ve toe do thuc hien chuang trinh. Thong thuong, truong hgp Iy tirang la he so tang toe bang so lugng nhan dang sii dung, tuy nhidn tnrong hgp ly tuang nay h i u nhu hidm khi xay ra [2]. Kdt qua cho thiy rang he so tang toe cua thuat toan sap xdp trgn song song xap xi 1,5 tren he thong 2 nhan va he so tang toe xap xi 2,7 trdn he thong 4 nhan. Doi vai thuat toan sap xdp trpn, buac trpn cac ket qua dugc sap xep dugc thuc hien tuan tu va buac nay chidm kha nhidu thai gian (vd Iy thuydt la 0(n) vai n la kich thuac ciia m a n g ) . Neu buac trgn dugc thuc hidn song song, kdt qua thu dugc se tot han. Tuy vay ket qua thu dugc a trdn la dang ghi nhan va m a ra kha nang cho nhirng cai tien khac nham tang toe do thuc hidn thuat toan nhanh han niia.

(6)

NGUYEN LE TRUNG THANH va cs.

He s6 tang toe (speedup) cua sap xep tron song song

7"

• > » » • » » •

-Speedi?) (2 nhan) -Speediqi (4 nhan) r # J ^ * ' r?FrS? CV^(# # 6 ^ 6 ^ #

V V S^ V IT Kicb thu-tyc dft lifu

Hinh 2. He sd tdng tde (speedup) cua sdp xep trdn song song tren he ihdng 2 nhdn vd 4 nhdn 4.2. Sap xep nhanh song song (Parallel Quicksort)

Y tuang cua thuat toan sap xep nhanh la chpn ra phan tir chot (pivot), dua cac phin tu nho hon phan ttr chot vd mot phia va cac phan tir Ion han vd mpt phia, sau do tidp tuc thirc hien sap xdp trdn timg phan [5].

Thuat toan sap xdp nhanh song song dugc thuc hien nhu sau:

1. Chon phin tu chot.

2. Phan chia dfi lieu thanh hing phin gom cac p h i n tir be h a n p h i n tfr chdt, phin tir chot, cac phan tii Idn han phin tir ch6t

3. Ndu kich thuac cua mang be hon nguong xac dinh, thuc hien thuat toan theo sip xdp nhanh tuin tu

4. Ndu kich thuoc cua mang be hon nguong xac dinh, thuc hien song song:

a. Sap xep nhanh tren cac p h i n tir be han p h i n tii chdt b. Sap xep nhanh tren cac phin tir Ion han p h i n tir chot

Thuat toan sap xep nhanh dugc thuc hidn thong qua phuang thiic compute() thupc lop QuickSortAction - la ma rgng ciia Icrp RecursiveAction. Phuang thirc computeQ dugc thuc thi khi ham tao QuickSortAction(array, start, end, threshold) dugc ggi.

p r o t e c t e d void computed { ^ i f ( s t a r t < end) {

i n r p i v o t = Q u i c k s o r t . p a r t i t i o n ( a r r a y , s t a r t , end) ; i f (end - s t a r t < t h r e s h o l d ) {

(7)

UNG DUNG KHUNG LAM VIEC JAVA FORK/JOIN..,

Q u i c k S o r - c . s e q u e n t i a l S o r c ( a r r a y , s t a r t , e n d } ; } e l s e {

QuickSortAction workerl = new QuickSortAction(array, start, pivot - 1, threshold);

QuickSortAction worker2 = new QuickSortAction(array, pivot + 1, end, threshold);

invokeAll(workerl, worker2);

}

Phin tu chot pivot dugc chon thong qua phuang thiic partition(array, start, end) cua lap Quicksort dugc thidt ke de sap xep nhanh tuin tir. Ndu kich thuac cua mang nho hon nguong (threshold) thi thi^c hi?n sip xdp nhanh tuin tu bing lai ggi phuong thiic sequentialSort(array, start, end). Ngugc lai, neu kich thuac ciia mang Idti hon r^uang, cong vide dua chia tam hai: the hidn workerl ciia ldp QuickSortAction (la ma rpng cua lap RecursiveAction) thuc hien vide sap xdp tir dau mang den phin tii chot, the hidn worker2 thuc hien vide sap xep tir phan tii chot den cuoi mang. Cong vide dugc thuc hidn song song thong qua lai gpi invokeAII(workerl, worker2).

Vide sip xdp mang ban diu the hien qua tac vu task va dugc thuc thi bang loi ggi invoke(task) thong qua the hien pool ciia lop ForkJomPooI:

private void parallelQuickSort(int[] array) (

QuickSortAction task = new QuickSortAction(array, 0, array.length - 1, array.length /

Runtime.getRuntime().availableProcessors());

ForkJoinPool pool = new ForkJoinPool();

pool.invoke(task);

}

Kdt qua thuat toan sip xdp nhanh song song thuc Men trdn cac mang so nguyen ngau nhidn vai kich thuac tir 2000000 ddn 20000000 dugc thd hien & hmh 3 va hinh 4.

(8)

NGUYEN LE TRUNG THANH v

Sap xep nhanh song song sa dung khung lam viec Fork/Join

Kicb tbiro'c dir b^u

— Ssp xep nhanh tuan tir (2 nhan)

-Sap xep uhanli song song (2 nhan)

'^ Sap xep nhanh tuii tir (4 ahan)

-Sap xep nhanh sons song (4 nban)

Hinh 3. Sdp xep nhanh tudn Hr. sdp xep nhanh song song tren he thdng 2 nhdn vd 4 nhan He so tang toe (speedup) cua sap xep nhanh song song

-Speedup (2 nhan) -Speedup (4 nhan)

s?* . # * . # * .

^# <P ^iP .,«? .f ,^

Kich Ihuti'c dii lieu

Hinh 4 //f id ldng ldc (speedup) cua sdp xip nhanh song .mng iren hi Ihdng 2 nhdn vd 4 nhdn Tir ket qua tren. co thS nhan tMy sjp xIp nhanh song song tuong dSi hieu qua voi he s6 tang toe xap xi 1.6 do. voi he thong 2 nhan va he s6 tang t6c xIp xi 3.5 d6i vdi he th6ng 4 nhan. Ket qua tren tucmg doi tieh cue khi he s6 tang t6c cua thuat toan sjp x6p nhanh so]ig song cao hon so vol sap xep tron song song. Trong thuat toan sjp xSp nhanh song song.^thu tue phan chia mang theo phan lu ch6t dugc thuc hien tuSn tu va co do phiic tap ve h thu>et la 0(,„. ^•cri „ la kich thuoc ctia mang. T6c do thuc hien thuat toan sip xep nhanh song song se duge tang them khi t h i tuc phan chm mang theo phdn ttt chot dugc tliuc hien sons sona.

(9)

OlMG DUNG KHUNG LAM VI$C JAVA FORK/JOIN..,

5. KET LUAN

Bai bao trinh bay khung lam vice Fork/Join trong Java 7, nhom tac gia da ling dung khung lam viec nay d l thuc thi cac thuat toan s i p xkp song song: sip xkp trpn va sJp xep nhanh. Thuat toan duge nhom tac gia cai dat tren moi truong phat triSn tich hgp Eclipse Juno va tien hanh danh gia ISn lugt tren he thong 2 nhan va 4 nhan. K6t qua danh gia cho thay s i p xep trgii co he s6 tang t6c x i p xi 1,5 tren he thdng 2 nhan va xap xi 2,7 tren he thong 4 nhan; sap xep nhanh co he so tang t6c x i p xi 1,6 tren he thong 2 nhan va x i p xi 3,5 tren he thong 4 nhan. K€t qua thu dugc p h i n nao khing dinh su hieu qua ciia khung lam viec Fork/Join. Cac thuat toan s i p x i p tren se tiep tuc dugc nghien cuu theo huong song song hoa cac thii tuc tuin tu con ton tai n h i m cai thien hon nua toe do thuc thi.

TAI LIEU THAM KHAO

[1] D. Lea (2000). A Java Fork/Join fi-amework. In Proceedings of the ACM 2000 conference on Java Grande, pages 36-43, New York.

[2] Grossman D. (2012). A sophomoric introduction to shared-memory parallelism and concurrency. Lecture notes. University of Washington.

[3] Herb Sutter (2005). The Concurrency Revolution, C/C++ Users Journal, 23(2).

[4] Robert D. Blumofe, Christopher P. Joerg, Bradley C. Kuszmaul, Charles E.

Leiserson, Keith H. Randall, Yuli Zhou (1996). Cilk An Efficient Multithreaded Runtime System. J. Parallel Distributed Computing, 37(1): pages 55-69.

[5] T. H. Gormen, C.E. Leiserson, R.L. Rivest, and C. Stein (2009). Introduction to Algorithms, Third Edition, MIT Press.

Title: IMPLEMENTATION OF PARALLEL SORTING ALGORITHMS USING JAVA FORK/JOIN FRAMEWORK

Abstract: This article presents a Java Fork/Join framework, which is a new feature in Java 7.

This framework was designed to efficiently execute divide-and-conquer algorithms, which recursively divide problems into fine-grained sub-problems. One of the advantages of Fork/Join fi-amework is work-stealing technique, which produces reasonable load balancing with no central coordination and minimal synchronization costs. This framework was applied for implementing two specific recursive sorting algorithms: merge sort and quicksort. The results were presented through running time and speedup ofthese algorithms.

Keywords: Fork/Join framework, work-stealing algorithm, parallel merge sort, parallel quicksort

ThS. NGUYEN LE TRUNG THANH ThS. NGUYEN VAN KHANG ThS. DINH THI DIEU MINH

Khoa Tin hpc, Truong Dai hgc Su pham - Dai hoc Hui

Referensi

Dokumen terkait

Ngoai sy phuc hdi gia va miic tigu thy ciia mot sd mat hang tren thi tradng the gidi, cac chfnh sach hd trg, khuyen khich, dieu hanh xuat khau cua Chinh phu chinh la nhiing tac ddng

Quan triet ndi dung nay, nhieu dcm vi quan dgi tren cac dia ban da cd nhiing md hinh hay, each lam sang tao rieng, phii hpp vdi didu kien dac thii cua dja phuong de teien khai hieu qua

Viec tham gia vao cac td chirc xa hdi mdt mat lam cho con ngudi thda man cae nhu cau tu nhien, nhung mat khac ciing chinh la noi de hg cd thd phat huy dugc nhiing tiem nang dang an

Phdng chuyen traeh quan ly PPP ed the ed ba chde nang chinh: - Xay dUng chinh sich va chuong trinh PPP tren dia ban tinh Quing Ninh; - Hd trg cac co quan ehu q u i n va ehu dau tU t u

Tuy nhien, cac boat ddng truyen thong thudng tap trung nhieu vao viec nang cao nhan thiic dl phdng chdng tinh trang mua ban ngudi trong khi chua hudng tdi viec nang cao nhan thiic va

Xay d u n g he thd'ng tieu c h i Do cac md khae nhau phan bd d cae vj tri cd dac diem tu nhien kinh te, xa hpi khac nhau nen he thdng cac tieu chi nay se phan anh toan bp dae diem md

Nuac Viet ta vdn cd tieng la nuac van hien, tii cac ^ X trieu xua dyng nuac cung da cd nhieu bac vua chiia tai gidi, nhiing tha van lam ra tdt nhien phai cd, ma sach vdr khdng chep,

Giai phap cho van de nay dugc thuc hien bang each, tinh toan them cac gia tri nang suat cat tuang irng vdi cac che do cat da thi nghiem, sau dd sir dung cdng cu xep chdng dudng mire va