Soo Hwan's Blog: Matrix multiplication



Matrix Multiplication using ForkJoin

Finally, we show how to adapt the Jama algorithm to jsr166y/forkjoin. We begin by creating a ParallelDoubleArray, based on the input array b[0]; this is because the outer loop of the original Jama algorithm iterates over j from 0 to p; this is the same indexing as for the array b[0]. However, we do not care about the contents of the array (see the sidebar below). Next, we use ParallelArray.replaceWithMappedIndex(Ops.IntAndDoubleToDouble op) to run the inner loop in parallel over the entire array. This performs the equivalent of the sequential for loop

for (int j = 0; j <>

or the threaded

for (int j = from; j <>

with the ForkJoin framework manages the partitioning and outer loop for us. It passes the index j to theOps.IntAndDoubleToDouble operator via its op(int a, double b) method as well as the value b[0][j], which is unused. The method body transposes Bcolj, then performs the two nested loops. Note that since ForkJoin uses a single operator instance (from the anonymous inner class), we must allocate the transient Bcolj array inside the op method. If this were not a local array inside the operation method but was instead and instance field, multiple threads would update it concurrently while working on different columns, causing corruption. (Tim Peierls caught this bug in an earlier version of this algorithm.) Like the threaded example above, this implementation does not require explicit synchronization.


Read full article from Soo Hwan's Blog: Matrix multiplication


No comments:

Post a Comment

Labels

Algorithm (219) Lucene (130) LeetCode (97) Database (36) Data Structure (33) text mining (28) Solr (27) java (27) Mathematical Algorithm (26) Difficult Algorithm (25) Logic Thinking (23) Puzzles (23) Bit Algorithms (22) Math (21) List (20) Dynamic Programming (19) Linux (19) Tree (18) Machine Learning (15) EPI (11) Queue (11) Smart Algorithm (11) Operating System (9) Java Basic (8) Recursive Algorithm (8) Stack (8) Eclipse (7) Scala (7) Tika (7) J2EE (6) Monitoring (6) Trie (6) Concurrency (5) Geometry Algorithm (5) Greedy Algorithm (5) Mahout (5) MySQL (5) xpost (5) C (4) Interview (4) Vi (4) regular expression (4) to-do (4) C++ (3) Chrome (3) Divide and Conquer (3) Graph Algorithm (3) Permutation (3) Powershell (3) Random (3) Segment Tree (3) UIMA (3) Union-Find (3) Video (3) Virtualization (3) Windows (3) XML (3) Advanced Data Structure (2) Android (2) Bash (2) Classic Algorithm (2) Debugging (2) Design Pattern (2) Google (2) Hadoop (2) Java Collections (2) Markov Chains (2) Probabilities (2) Shell (2) Site (2) Web Development (2) Workplace (2) angularjs (2) .Net (1) Amazon Interview (1) Android Studio (1) Array (1) Boilerpipe (1) Book Notes (1) ChromeOS (1) Chromebook (1) Codility (1) Desgin (1) Design (1) Divide and Conqure (1) GAE (1) Google Interview (1) Great Stuff (1) Hash (1) High Tech Companies (1) Improving (1) LifeTips (1) Maven (1) Network (1) Performance (1) Programming (1) Resources (1) Sampling (1) Sed (1) Smart Thinking (1) Sort (1) Spark (1) Stanford NLP (1) System Design (1) Trove (1) VIP (1) tools (1)

Popular Posts