def option_enumeration(platform_name, instance_paths, path_points, options, optimisations): instances = 1 cslow_flag = False tp_flag = False for o in options.split(): temp_options = KS_ProblemSet.KS_Options([o]) for opt in optimisations.split(): cslow_flag = False tp_flag = False instances = 1 pipelining = 1 if ("naive" == opt): pass if ("pipeline_parallelism" == opt): if (platform_name == "Maxeler"): pipelining = 8 if (o == "13"): pipelining = 16 if ("all" == opt): tp_flag = True cslow_flag = True if (("task_parallelism" == opt) or tp_flag): if (platform_name == "Maxeler"): instances = 8 if (o == "13"): instances = 16 if ("cslow" == opt): cslow_flag = True if (platform_name == "Maxeler"): from ForwardFinancialFramework.Platforms.MaxelerFPGA import MaxelerFPGA_MonteCarlo, MaxelerFPGA platform = MaxelerFPGA.MaxelerFPGA() mc_solver = MaxelerFPGA_MonteCarlo.MaxelerFPGA_MonteCarlo( temp_options, instance_paths, platform, path_points, c_slow=cslow_flag, instances=instances, pipelining=pipelining) elif (platform_name == "Vivado"): pass elif (platform_name == "Altera"): pass else: print "unrecognised platform!" fpga_compile(mc_solver)
elif(option_number=="12"): derivative.append(Digital_Double_Barrier_Option.Digital_Double_Barrier_Option(underlying_heston_IV,call=call,strike_price=strike_price,time_period=time_period,points=points,out=out,barrier=barrier,down=down,second_barrier=second_barrier)) elif(option_number=="13"): derivative.append(Asian_Option.Asian_Option(underlying_black_scholes_VII,call=call,strike_price=strike_price,time_period=time_period,points=points)) else: if(option_number=="4"): derivative.append(Double_Barrier_Option.Double_Barrier_Option(underlying_heston_III,call=call,strike_price=strike_price,time_period=time_period,points=points,out=out,barrier=barrier,down=down,second_barrier=second_barrier)) elif(option_number=="5"): derivative.append(Double_Barrier_Option.Double_Barrier_Option(underlying_heston_I,call=call,strike_price=strike_price,time_period=time_period,points=points,out=out,barrier=barrier,down=down,second_barrier=second_barrier)) elif(option_number=="6"): derivative.append(Double_Barrier_Option.Double_Barrier_Option(underlying_heston_IV,call=call,strike_price=strike_price,time_period=time_period,points=points,out=out,barrier=barrier,down=down,second_barrier=second_barrier)) elif(option_number=="7"): derivative.append(Double_Barrier_Option.Double_Barrier_Option(underlying_heston_V,call=call,strike_price=strike_price,time_period=time_period,points=points,out=out,barrier=barrier,down=down,second_barrier=second_barrier)) elif(option_number=="8"): derivative.append(Double_Barrier_Option.Double_Barrier_Option(underlying_heston_VI,call=call,strike_price=strike_price,time_period=time_period,points=points,out=out,barrier=barrier,down=down,second_barrier=second_barrier)) elif(option_number=="9"): derivative.append(Double_Barrier_Option.Double_Barrier_Option(underlying_heston_I,call=call,strike_price=strike_price,time_period=time_period,points=points,out=out,barrier=barrier,down=down,second_barrier=second_barrier)) elif(option_number=="10"): derivative.append(Double_Barrier_Option.Double_Barrier_Option(underlying_heston_VI,call=call,strike_price=strike_price,time_period=time_period,points=points,out=out,barrier=barrier,down=down,second_barrier=second_barrier)) #threads = multiprocessing.cpu_count() #queries the OS as to how many CPUs there are available #multicore_platform = MulticoreCPU.MulticoreCPU(threads) maxeler_platform = MaxelerFPGA.MaxelerFPGA(1) for d in derivative: d.points = points #mc_solver = MulticoreCPU_MonteCarlo.MulticoreCPU_MonteCarlo(derivative,paths,multicore_platform,reduce_underlyings=False) mc_solver = MaxelerFPGA_MonteCarlo.MaxelerFPGA_MonteCarlo(derivative,paths,maxeler_platform) mc_solver.generate() mc_solver.compile() results = mc_solver.execute() print "Derivative Values" for d in derivative_set: print ("Value of Option %d:\t%s" % (d,results[d-1])) #Performance Monitoring offset = len(derivative) CPU_time = float(results[offset]) Wall_time = float(results[offset+1])
test_derivative.append(derivative[index]) test_derivative_set.append(index + 1) index = index - 1 same_points = True d_0_points = test_derivative[0].points for d in test_derivative: if ((d_0_points != d.points) and (d_0_points != time_period * points)): same_points = False #threads = multiprocessing.cpu_count() #queries the OS as to how many CPUs there are available #threads = 7 #multicore_platform = MulticoreCPU.MulticoreCPU(threads) instances = int(10 / len(test_derivative)) maxeler_platform = MaxelerFPGA.MaxelerFPGA(instances) #mc_solver = MulticoreCPU_MonteCarlo.MulticoreCPU_MonteCarlo(test_derivative,paths,multicore_platform,reduce_underlyings=True) mc_solver = MaxelerFPGA_MonteCarlo.MaxelerFPGA_MonteCarlo( test_derivative, paths, maxeler_platform) if (command == "compile" and same_points): print "Building for trial: %s (%s)" % (selection, str(test_derivative_set)) mc_solver.generate() mc_solver.compile() elif (command == "execute" and same_points): results = mc_solver.execute() print "Selection for trial: %s (%s)" % (selection, str(test_derivative_set)) print "Derivative Values"
for o in options: if (platform_name == "GPU"): from ForwardFinancialFramework.Platforms.OpenCLGPU import OpenCLGPU_MonteCarlo, OpenCLGPU platform = OpenCLGPU.OpenCLGPU() mc_solver = OpenCLGPU_MonteCarlo.OpenCLGPU_MonteCarlo([o], paths, platform) elif (platform_name == "CPU"): from ForwardFinancialFramework.Platforms.MulticoreCPU import MulticoreCPU_MonteCarlo, MulticoreCPU platform = MulticoreCPU.MulticoreCPU() mc_solver = MulticoreCPU_MonteCarlo.MulticoreCPU_MonteCarlo( [o], paths, platform) elif (platform_name == "FPGA"): from ForwardFinancialFramework.Platforms.MaxelerFPGA import MaxelerFPGA_MonteCarlo, MaxelerFPGA platform = MaxelerFPGA.MaxelerFPGA(instances=20) mc_solver = MaxelerFPGA_MonteCarlo.MaxelerFPGA_MonteCarlo([o], paths, platform) if ("Compile" in platform_arg or platform_name != "FPGA"): mc_solver.generate() mc_solver.compile() if ("Execute" in platform_arg or platform_name != "FPGA"): o_result = mc_solver.execute() results.append(o_result) print "Hostname,Platform Type,Option Number,Simulation Paths,Value,95%% Confidence Interval of Value,Execution Latency," for i, r in enumerate(results): print "%s,%s,%d,%d,%f,%f,%f," % (os.uname()[1].split(".")[0],
if (platform_name == "GPU"): from ForwardFinancialFramework.Platforms.OpenCLGPU import OpenCLGPU_MonteCarlo, OpenCLGPU platform = OpenCLGPU.OpenCLGPU() mc_solver = OpenCLGPU_MonteCarlo.OpenCLGPU_MonteCarlo( options, paths, platform) elif (platform_name == "CPU"): from ForwardFinancialFramework.Platforms.MulticoreCPU import MulticoreCPU_MonteCarlo, MulticoreCPU platform = MulticoreCPU.MulticoreCPU() mc_solver = MulticoreCPU_MonteCarlo.MulticoreCPU_MonteCarlo( options, paths, platform) elif (platform_name == "FPGA"): from ForwardFinancialFramework.Platforms.MaxelerFPGA import MaxelerFPGA_MonteCarlo, MaxelerFPGA platform = MaxelerFPGA.MaxelerFPGA() mc_solver = MaxelerFPGA_MonteCarlo.MaxelerFPGA_MonteCarlo( options, paths, platform) else: print "incorrect platform type!" sys.exit() mc_solver.populate_model(paths, steps) mc_solver.generate_pickle(pickle_file_name) #mc_solver.generate_derivative_pickle(pickle_file_name) """mc_solver = pickle.load(open("%s.p"%pickle_file_name,"rb")) mc_solver.derivative = pickle.load(open("%s_derivative.p"%pickle_file_name,"rb")) mc_solver.latency_model = mc_solver.generate_aggregate_latency_model() for p in numpy.arange(paths,paths*(steps+1),paths): print mc_solver.latency_model(p)"""