Show More
@@ -886,6 +886,61 b' class FullBlockingMultiEngineClient(InteractiveMultiEngineClient):' | |||
|
886 | 886 | return self._blockFromThread(self.smultiengine.run, filename, |
|
887 | 887 | targets=targets, block=block) |
|
888 | 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') | |
|
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 | 946 | components.registerAdapter(FullBlockingMultiEngineClient, |
General Comments 0
You need to be logged in to leave comments.
Login now