black_scholes_def.jl 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. function black_scholes_starpu(data ::Matrix{Float64}, res ::Matrix{Float64}, nslices ::Int64)
  2. vert = StarpuDataFilter(STARPU_MATRIX_FILTER_VERTICAL_BLOCK, nslices)
  3. @starpu_block let
  4. dat_handle, res_handle = starpu_data_register(data, res)
  5. starpu_data_partition(dat_handle, vert)
  6. starpu_data_partition(res_handle, vert)
  7. #Compute the price of call and put option in the res matrix
  8. @starpu_sync_tasks for task in (1:nslices)
  9. @starpu_async_cl cl(dat_handle[task], res_handle[task])
  10. end
  11. end
  12. end
  13. function init_data(data, data_nbr);
  14. for i in 1:data_nbr
  15. data[1,i] = rand(Float64) * 100
  16. data[2,i] = rand(Float64) * 100
  17. data[3,i] = rand(Float64)
  18. data[4,i] = rand(Float64) * 10
  19. data[5,i] = rand(Float64) * 10
  20. end
  21. return data
  22. end
  23. function median_times(data_nbr, nslices, nbr_tests)
  24. data ::Matrix{Float64} = zeros(5, data_nbr)
  25. # data[1,1] = 100.0
  26. # data[2,1] = 100.0
  27. # data[3,1] = 0.05
  28. # data[4,1] = 1.0
  29. # data[5,1] = 0.2
  30. res ::Matrix{Float64} = zeros(2, data_nbr)
  31. exec_times ::Vector{Float64} = [0. for i in 1:nbr_tests]
  32. for i = 1:nbr_tests
  33. init_data(data, data_nbr)
  34. tic()
  35. black_scholes_starpu(data, res, nslices);
  36. t = toq()
  37. exec_times[i] = t
  38. end
  39. sort!(exec_times)
  40. # println(data)
  41. # println(res)
  42. return exec_times[1 + div(nbr_tests - 1, 2)]
  43. end
  44. function display_times(start_nbr, step_nbr, stop_nbr, nslices, nbr_tests)
  45. mtc = map( (x->parse(Float64,x)), open("../DAT/black_scholes_c_times.dat") do f
  46. readlines(f)
  47. end)
  48. mtcgen = map( (x->parse(Float64,x)), open("../DAT/black_scholes_c_generated_times.dat") do f
  49. readlines(f)
  50. end)
  51. i = 1
  52. open("../DAT/black_scholes_times.dat", "w") do f
  53. for data_nbr in (start_nbr : step_nbr : stop_nbr)
  54. t = median_times(data_nbr, nslices, nbr_tests)
  55. println("Number of data:\n$data_nbr\nTimes:\njl: $t\nC: $(mtc[i])\nGen: $(mtcgen[i])")
  56. write(f, "$data_nbr $(t) $(mtcgen[i]) $(mtc[i])\n")
  57. i = i + 1
  58. end
  59. end
  60. end