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)
Пример #2
0
	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])
Пример #3
0
                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],
Пример #5
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)"""