CSC/ECE 506 Spring 2010/ch 2 aj/Data Parallel Programming: Difference between revisions
Jump to navigation
Jump to search
Line 14: | Line 14: | ||
// a simple code | // a simple code | ||
sum = 0; | |||
'''for''' (i = 0; i < a.length; i++) | '''for''' (i = 0; i < a.length; i++) | ||
{ | { | ||
a[i] = a[i] * i; | a[i] = a[i] * i; | ||
sum = sum + a[i]; | |||
} | } | ||
Line 38: | Line 38: | ||
my_sum = my_sum + temp; | my_sum = my_sum + temp; | ||
} | } | ||
sum = my_sum; | |||
// data reorganization via shared memory | // data reorganization via shared memory | ||
'''shared''' | '''shared''' sum; | ||
lock(); | lock(); | ||
sum = sum + my_sum; | sum = sum + my_sum; |
Revision as of 15:40, 28 January 2010
Data-Parallel Programming Model
Introduction
Relationship with SIMD
Other Parallel Programming Models
Message Passing Programming Model
Examples
// a simple code sum = 0; for (i = 0; i < a.length; i++) { a[i] = a[i] * i; sum = sum + a[i]; }
// data parallel programming: let each PE perform the same task on different pieces of distributed data pe_id = getid(); my_sum = 0; for (i = pe_id; i < a.length; i += number_of_pe) { a[i] = a[i] * i; my_sum = my_sum + a[i]; }
// data reorganization via message passing if (pe_id != 0) send_msg (0, my_sum); else for (i = 1; i < number_of_pe; i++) { recv_msg (i, temp); my_sum = my_sum + temp; } sum = my_sum;
// data reorganization via shared memory shared sum; lock(); sum = sum + my_sum; unlock(); barrier;
References
1) Old textbook
2) Internet article