Show More
@@ -885,7 +885,62 b' class FullBlockingMultiEngineClient(InteractiveMultiEngineClient):' | |||||
885 | targets, block = self._findTargetsAndBlock(targets, block) |
|
885 | targets, block = self._findTargetsAndBlock(targets, block) | |
886 | return self._blockFromThread(self.smultiengine.run, filename, |
|
886 | return self._blockFromThread(self.smultiengine.run, filename, | |
887 | targets=targets, block=block) |
|
887 | targets=targets, block=block) | |
|
888 | ||||
|
889 | def benchmark(self, push_size=10000): | |||
|
890 | """ | |||
|
891 | Run performance benchmarks for the current IPython cluster. | |||
|
892 | ||||
|
893 | This method tests both the latency of sending command and data to the | |||
|
894 | engines as well as the throughput of sending large objects to the | |||
|
895 | engines using push. The latency is measured by having one or more | |||
|
896 | engines execute the command 'pass'. The throughput is measure by | |||
|
897 | sending an NumPy array of size `push_size` to one or more engines. | |||
|
898 | ||||
|
899 | These benchmarks will vary widely on different hardware and networks | |||
|
900 | and thus can be used to get an idea of the performance characteristics | |||
|
901 | of a particular configuration of an IPython controller and engines. | |||
|
902 | ||||
|
903 | This function is not testable within our current testing framework. | |||
|
904 | """ | |||
|
905 | import timeit, __builtin__ | |||
|
906 | __builtin__._mec_self = self | |||
|
907 | benchmarks = {} | |||
|
908 | repeat = 3 | |||
|
909 | count = 10 | |||
|
910 | ||||
|
911 | timer = timeit.Timer('_mec_self.execute("pass",0)') | |||
|
912 | result = 1000*min(timer.repeat(repeat,count))/count | |||
|
913 | benchmarks['single_engine_latency'] = (result,'msec') | |||
|
914 | ||||
|
915 | timer = timeit.Timer('_mec_self.execute("pass")') | |||
|
916 | result = 1000*min(timer.repeat(repeat,count))/count | |||
|
917 | benchmarks['all_engine_latency'] = (result,'msec') | |||
888 |
|
918 | |||
|
919 | try: | |||
|
920 | import numpy as np | |||
|
921 | except: | |||
|
922 | pass | |||
|
923 | else: | |||
|
924 | timer = timeit.Timer( | |||
|
925 | "_mec_self.push(d)", | |||
|
926 | "import numpy as np; d = dict(a=np.zeros(%r,dtype='float64'))" % push_size | |||
|
927 | ) | |||
|
928 | result = min(timer.repeat(repeat,count))/count | |||
|
929 | benchmarks['all_engine_push'] = (1e-6*push_size*8/result, 'MB/sec') | |||
|
930 | ||||
|
931 | try: | |||
|
932 | import numpy as np | |||
|
933 | except: | |||
|
934 | pass | |||
|
935 | else: | |||
|
936 | timer = timeit.Timer( | |||
|
937 | "_mec_self.push(d,0)", | |||
|
938 | "import numpy as np; d = dict(a=np.zeros(%r,dtype='float64'))" % push_size | |||
|
939 | ) | |||
|
940 | result = min(timer.repeat(repeat,count))/count | |||
|
941 | benchmarks['single_engine_push'] = (1e-6*push_size*8/result, 'MB/sec') | |||
|
942 | ||||
|
943 | return benchmarks | |||
889 |
|
944 | |||
890 |
|
945 | |||
891 | components.registerAdapter(FullBlockingMultiEngineClient, |
|
946 | components.registerAdapter(FullBlockingMultiEngineClient, |
General Comments 0
You need to be logged in to leave comments.
Login now