示例#1
0
        public static T MultiplyAll <T>(ICommunicator comm, T value)
            where T : ICloneable, SettableToProduct <T>
        {
            string     key = StringUtil.TypeToString(typeof(T));
            TimingInfo timingInfo;

            lock (MultiplyAllTimingInfos)
            {
                if (!MultiplyAllTimingInfos.TryGetValue(key, out timingInfo))
                {
                    timingInfo = new TimingInfo();
                    MultiplyAllTimingInfos.Add(key, timingInfo);
                }
            }
            timingInfo.watch.Start();
            var reduced = comm.Allreduce(value, (a, b) =>
            {
                T result = (T)a.Clone();
                result.SetToProduct(a, b);
                return(result);
            });

            timingInfo.watch.Stop();
            timingInfo.ItemsTransmitted++;
            return(reduced);
        }