rand throw
unknown
julia
7 months ago
1.8 kB
7
Indexable
Never
using Random, Statistics, BenchmarkTools, CUDA hit_table = zeros(20,3) samples = 100000 function hit_table_for(dicen=1,samples=10000) hit_table = zeros(20,3) for dices in 1:dicen for val2hit in 1:20 for i in 1:samples rol = rand(1:20,(1,dices)) rol_m = maximum(rol) (rol_m >= val2hit)&&(@view(hit_table[val2hit,dices]).+=1) end end end hit_table end @time hit_table_for(3,10000) hit_table hit_perc = hit_table/samples function hit_table_vec(dicen=1,samples=10000) value_mat = [f for f in 1:20, s in 1:samples, d in 1:dicen] value_mat = reduce(max, value_mat, dims = 3) rand_mat = rand(1:20, (20,samples)) bool_mat = rand_mat.>=value_mat hit_vec = mean(bool_mat, dims=2) return reshape(hit_vec, (20,1)) end @time hit_table_vec(1,10000) function hit_table_mat(samples=10000) hit_mat = hcat(hit_table_vec(1,samples),hit_table_vec(2,samples),hit_table_vec(3,samples)) return hit_mat end samples=10000 @time hit_table_mat(samples) function hit_table_cuvec(dicen=1,samples=10000) value_mat = CuArray([f for f in 1:20, s in 1:samples]) rand_mat = CuArray(rand(1:20, (20,samples,dicen))) rand_mat = reduce(max, rand_mat, dims = 3) bool_mat = rand_mat.>=value_mat hit_vec = mean(bool_mat, dims=2) return reshape(hit_vec, (20,1)) end function hit_table_cumat(samples=10000) hit_mat = hcat(hit_table_cuvec(1,samples),hit_table_cuvec(2,samples),hit_table_cuvec(3,samples)) return hit_mat end @time hit_table_cuvec(1,10000) @benchmark hit_table_for(3,samples) @benchmark hit_table_mat(samples) @benchmark hit_table_cumat(samples)