/// <summary>Initializes CL kernels</summary> public static void Init() { if (kernelCholeskyDiagBlock == null) { if (CLCalc.CLAcceleration == CLCalc.CLAccelerationType.Unknown) { CLCalc.InitCL(); } if (CLCalc.CLAcceleration == CLCalc.CLAccelerationType.UsingCL) { if (kernelCholeskyDiagBlock == null) { SUBMATRIXSIZE = (int)Math.Sqrt((double)CLCalc.Program.CommQueues[CLCalc.Program.DefaultCQ].Device.MaxWorkGroupSize); SUBMATRIXSIZE = Math.Min(16, SUBMATRIXSIZE); string strSubSize = SUBMATRIXSIZE.ToString(); string strTotSize = (SUBMATRIXSIZE * (SUBMATRIXSIZE + 1) / 2).ToString(); LinalgSrc src = new LinalgSrc(); string srcBlockChol = src.srcBlockCholesky.Replace("CONSTSUBMATRIXSIZE", strSubSize).Replace("CONSTGLOBALSIZE", strTotSize); CLCalc.Program.Compile(new string[] { srcBlockChol, src.srcBkSubs, src.srcOperations, src.srcVecSum, src.srcpNorm, src.strFeasibFunc, src.srcLogistReg }); kernelCholeskyDiagBlock = new CLCalc.Program.Kernel("CholeskyDiagBlock"); kernelCholeskyComputePanel = new CLCalc.Program.Kernel("CholeskyComputePanel"); kernelCholeskyForwardProp = new CLCalc.Program.Kernel("CholeskyForwardProp"); kernelFwdUpperBackSubs = new CLCalc.Program.Kernel("FwdUpperBackSubs"); kernelBkLowerBackSubs = new CLCalc.Program.Kernel("BkLowerBackSubs"); kernelFwdPropag = new CLCalc.Program.Kernel("FwdPropag"); kernelFwdPropag2 = new CLCalc.Program.Kernel("FwdPropag2"); kernelBackPropag = new CLCalc.Program.Kernel("BackPropag"); kernelBackPropag2 = new CLCalc.Program.Kernel("BackPropag2"); kernelInPlaceSubtract = new CLCalc.Program.Kernel("InPlaceSubtract"); kernelElemWiseAbs = new CLCalc.Program.Kernel("ElemWiseAbs"); kernelInnerProd = new CLCalc.Program.Kernel("InnerProd"); //Linear algebra kernelSymMatrVecMultiply = new CLCalc.Program.Kernel("SymMatrVecMultiply"); kernelSymMatrMatrMultiply = new CLCalc.Program.Kernel("SymMatrMatrMultiply"); kernelComputeAtWA = new CLCalc.Program.Kernel("ComputeAtWA"); kernelComputeAinvHAt = new CLCalc.Program.Kernel("ComputeAinvHAt"); kernelRegularMatrTranspMatrProd = new CLCalc.Program.Kernel("RegularMatrTranspMatrProd"); kernelRegularMatrMatrProd = new CLCalc.Program.Kernel("RegularMatrMatrProd"); kernelCopyBuffer = new CLCalc.Program.Kernel("CopyBuffer"); kernelLinearComb = new CLCalc.Program.Kernel("LinearComb"); kernelMatrVecProd = new CLCalc.Program.Kernel("MatrVecProd"); kernelTranspMatrVecProdW = new CLCalc.Program.Kernel("TranspMatrVecProdW"); kernelMatrVecProdSumVec = new CLCalc.Program.Kernel("MatrVecProdSumVec"); kernelDiagVecProd = new CLCalc.Program.Kernel("DiagVecProd"); kernelDiagTranspMatProd = new CLCalc.Program.Kernel("DiagTranspMatProd"); kernelElemWiseProd = new CLCalc.Program.Kernel("ElemWiseProd"); kernelElemWiseInv = new CLCalc.Program.Kernel("ElemWiseInv"); kernelElemWiseInv2 = new CLCalc.Program.Kernel("ElemWiseInv2"); kernelClear = new CLCalc.Program.Kernel("ClearResps"); kernelPreSum = new CLCalc.Program.Kernel("PreSum"); kernelCoalLocalSum = new CLCalc.Program.Kernel("CoalLocalSum"); kernelHasPositiveEntry = new CLCalc.Program.Kernel("HasPositiveEntry"); //pNorm minimization floatOptimization.CurveFitting.kernelpNorm = new CLCalc.Program.Kernel("pNorm"); floatOptimization.CurveFitting.kerneldpNorm = new CLCalc.Program.Kernel("dpNorm"); //Logistic regression floatOptimization.LogisticRegression.kernelComputeLogistRegParams = new CLCalc.Program.Kernel("ComputeLogistRegParams"); floatOptimization.LogisticRegression.kernelpNorm = floatOptimization.CurveFitting.kernelpNorm; floatOptimization.LogisticRegression.kerneldpNorm = floatOptimization.CurveFitting.kerneldpNorm; //Feasibility floatOptimization.QuadraticProgramming.kernelgetLast = new CLCalc.Program.Kernel("getLast"); } } } }
/// <summary>Initializes CL kernels</summary> public static void Init() { if (kernelCholeskyDiagBlock == null) { if (CLCalc.CLAcceleration == CLCalc.CLAccelerationType.Unknown) CLCalc.InitCL(); if (CLCalc.CLAcceleration == CLCalc.CLAccelerationType.UsingCL) { if (kernelCholeskyDiagBlock == null) { SUBMATRIXSIZE = (int)Math.Sqrt((double)CLCalc.Program.CommQueues[CLCalc.Program.DefaultCQ].Device.MaxWorkGroupSize); SUBMATRIXSIZE = Math.Min(16, SUBMATRIXSIZE); string strSubSize = SUBMATRIXSIZE.ToString(); string strTotSize = (SUBMATRIXSIZE * (SUBMATRIXSIZE + 1) / 2).ToString(); LinalgSrc src = new LinalgSrc(); string srcBlockChol = src.srcBlockCholesky.Replace("CONSTSUBMATRIXSIZE", strSubSize).Replace("CONSTGLOBALSIZE", strTotSize); CLCalc.Program.Compile(new string[] { srcBlockChol, src.srcBkSubs, src.srcOperations, src.srcVecSum, src.srcpNorm, src.strFeasibFunc, src.srcLogistReg }); kernelCholeskyDiagBlock = new CLCalc.Program.Kernel("CholeskyDiagBlock"); kernelCholeskyComputePanel = new CLCalc.Program.Kernel("CholeskyComputePanel"); kernelCholeskyForwardProp = new CLCalc.Program.Kernel("CholeskyForwardProp"); kernelFwdUpperBackSubs = new CLCalc.Program.Kernel("FwdUpperBackSubs"); kernelBkLowerBackSubs = new CLCalc.Program.Kernel("BkLowerBackSubs"); kernelFwdPropag = new CLCalc.Program.Kernel("FwdPropag"); kernelFwdPropag2 = new CLCalc.Program.Kernel("FwdPropag2"); kernelBackPropag = new CLCalc.Program.Kernel("BackPropag"); kernelBackPropag2 = new CLCalc.Program.Kernel("BackPropag2"); kernelInPlaceSubtract = new CLCalc.Program.Kernel("InPlaceSubtract"); kernelElemWiseAbs = new CLCalc.Program.Kernel("ElemWiseAbs"); kernelInnerProd = new CLCalc.Program.Kernel("InnerProd"); //Linear algebra kernelSymMatrVecMultiply = new CLCalc.Program.Kernel("SymMatrVecMultiply"); kernelSymMatrMatrMultiply = new CLCalc.Program.Kernel("SymMatrMatrMultiply"); kernelComputeAtWA = new CLCalc.Program.Kernel("ComputeAtWA"); kernelComputeAinvHAt = new CLCalc.Program.Kernel("ComputeAinvHAt"); kernelRegularMatrTranspMatrProd = new CLCalc.Program.Kernel("RegularMatrTranspMatrProd"); kernelCopyBuffer = new CLCalc.Program.Kernel("CopyBuffer"); kernelLinearComb = new CLCalc.Program.Kernel("LinearComb"); kernelMatrVecProd = new CLCalc.Program.Kernel("MatrVecProd"); kernelTranspMatrVecProdW = new CLCalc.Program.Kernel("TranspMatrVecProdW"); kernelMatrVecProdSumVec = new CLCalc.Program.Kernel("MatrVecProdSumVec"); kernelDiagVecProd = new CLCalc.Program.Kernel("DiagVecProd"); kernelDiagTranspMatProd = new CLCalc.Program.Kernel("DiagTranspMatProd"); kernelElemWiseProd = new CLCalc.Program.Kernel("ElemWiseProd"); kernelElemWiseInv = new CLCalc.Program.Kernel("ElemWiseInv"); kernelElemWiseInv2 = new CLCalc.Program.Kernel("ElemWiseInv2"); kernelClear = new CLCalc.Program.Kernel("ClearResps"); kernelPreSum = new CLCalc.Program.Kernel("PreSum"); kernelCoalLocalSum = new CLCalc.Program.Kernel("CoalLocalSum"); kernelHasPositiveEntry = new CLCalc.Program.Kernel("HasPositiveEntry"); //pNorm minimization floatOptimization.CurveFitting.kernelpNorm = new CLCalc.Program.Kernel("pNorm"); floatOptimization.CurveFitting.kerneldpNorm = new CLCalc.Program.Kernel("dpNorm"); //Logistic regression floatOptimization.LogisticRegression.kernelComputeLogistRegParams = new CLCalc.Program.Kernel("ComputeLogistRegParams"); floatOptimization.LogisticRegression.kernelpNorm = floatOptimization.CurveFitting.kernelpNorm; floatOptimization.LogisticRegression.kerneldpNorm = floatOptimization.CurveFitting.kerneldpNorm; //Feasibility floatOptimization.QuadraticProgramming.kernelgetLast = new CLCalc.Program.Kernel("getLast"); } } } }