48 from daal
import step1Local, step2Master, step3Local
49 from daal.algorithms
import qr
50 from daal.data_management
import FileDataSource, DataSourceIface
52 utils_folder = os.path.realpath(os.path.abspath(os.path.dirname(os.path.dirname(__file__))))
53 if utils_folder
not in sys.path:
54 sys.path.insert(0, utils_folder)
55 from utils
import printNumericTable
57 DAAL_PREFIX = os.path.join(
'..',
'data')
63 os.path.join(DAAL_PREFIX,
'distributed',
'qr_1.csv'),
64 os.path.join(DAAL_PREFIX,
'distributed',
'qr_2.csv'),
65 os.path.join(DAAL_PREFIX,
'distributed',
'qr_3.csv'),
66 os.path.join(DAAL_PREFIX,
'distributed',
'qr_4.csv')
69 dataFromStep1ForStep2 = [0] * nBlocks
70 dataFromStep1ForStep3 = [0] * nBlocks
71 dataFromStep2ForStep3 = [0] * nBlocks
76 def computestep1Local(block):
77 global dataFromStep1ForStep2, dataFromStep1ForStep3
80 dataSource = FileDataSource(
81 datasetFileNames[block],
82 DataSourceIface.doAllocateNumericTable,
83 DataSourceIface.doDictionaryFromContext
87 dataSource.loadDataBlock()
90 algorithm = qr.Distributed(step1Local)
92 algorithm.input.set(qr.data, dataSource.getNumericTable())
95 pres = algorithm.compute()
97 dataFromStep1ForStep2[block] = pres.get(qr.outputOfStep1ForStep2)
98 dataFromStep1ForStep3[block] = pres.get(qr.outputOfStep1ForStep3)
101 def computeOnMasterNode():
102 global R, dataFromStep2ForStep3
105 algorithm = qr.Distributed(step2Master)
107 for i
in range(nBlocks):
108 algorithm.input.add(qr.inputOfStep2FromStep1, i, dataFromStep1ForStep2[i])
111 pres = algorithm.compute()
113 for i
in range(nBlocks):
114 dataFromStep2ForStep3[i] = pres.getCollection(qr.outputOfStep2ForStep3, i)
116 res = algorithm.finalizeCompute()
117 R = res.get(qr.matrixR)
120 def finalizeComputestep1Local(block):
124 algorithm = qr.Distributed(step3Local)
126 algorithm.input.set(qr.inputOfStep3FromStep1, dataFromStep1ForStep3[block])
127 algorithm.input.set(qr.inputOfStep3FromStep2, dataFromStep2ForStep3[block])
132 res = algorithm.finalizeCompute()
134 Qi[block] = res.get(qr.matrixQ)
136 if __name__ ==
"__main__":
138 for i
in range(nBlocks):
141 computeOnMasterNode()
143 for i
in range(nBlocks):
144 finalizeComputestep1Local(i)
147 printNumericTable(Qi[0],
"Part of orthogonal matrix Q from 1st node:", 10)
148 printNumericTable(R,
"Triangular matrix R:")