मैंने par
और pseq
का उपयोग करके एक साधारण समांतर मैट्रिक्स गुणा लिखा था।समांतर मैट्रिक्स गुणन
इस कार्यक्रम को चलाने के बाद, कोई भी स्पार्क परिवर्तित नहीं हुआ (स्पार्क्स: 20 (0 रूपांतरित, 0 छिद्रित))।
मैं इस कार्यक्रम को बेहतर बनाने के बारे में आपकी टिप्पणी सुनना चाहता हूं।
हास्केल में समांतर प्रोग्रामिंग सीखने के दृष्टिकोण के बारे में भी।
import Data.List
import Control.Parallel
parHelp :: (Num a) => [ a ] -> [ a ] -> a
parHelp [] [] = 0
parHelp (x : xs) (y : ys) = ret where
ret = par a (pseq b (a + b)) where
a = x * y
b = parHelp xs ys
helpMult :: (Num a) => [ a ] -> [ [ a ] ] -> [ a ]
helpMult _ [] = []
helpMult x (y : ys) = ret where
ret = par a (pseq b (a : b)) where
a = sum . zipWith (*) x $ y
b = helpMult x ys
mult :: (Num a) => [ [ a ] ] -> [ [ a ] ] -> [ [ a ] ]
mult [] _ = []
mult (x : xs) ys = ret where
ret = par a (pseq b (a : b)) where
a = helpMult x ys
b = mult xs ys
main = print $ mult [[1 .. 4 ] , [ 1 .. 4 ] , [ 1 .. 4 ] , [ 1 .. 4] ] (transpose [[1 .. 4 ] , [ 1 .. 4 ] , [ 1 .. 4 ] , [ 1 .. 4] ])
ओटी। कोशिश करें http://codereview.stackexchange.com –
सूचियों की एक सूची एक मैट्रिक्स नहीं है। मेरा सुझाव है कि आप इस उद्देश्य के लिए रेपा सीखें और उपयोग करें। यदि आप समांतर पैकेज का उपयोग करना सीखना चाहते हैं, तो मैं आपको एक और एप्लिकेशन डोमेन चुनने और प्रश्न पूछने के लिए प्रोत्साहित करता हूं। –
धन्यवाद। मैं रेपा की कोशिश करूंगा। –