From 7cc80cb83088d137511b4524ff3f4f413e5f5c79 Mon Sep 17 00:00:00 2001 From: Francisco Heron de Carvalho Junior Date: Wed, 26 Oct 2022 22:28:52 -0400 Subject: [PATCH 1/4] OnPremise -> OnPremises --- src/PlatformAware.jl | 2 +- src/features/default/Platform.toml | 2 +- src/features/detection.jl | 2 +- src/features/qualifiers/general.jl | 2 +- src/platform.jl | 14 +++++++++++++- 5 files changed, 17 insertions(+), 5 deletions(-) diff --git a/src/PlatformAware.jl b/src/PlatformAware.jl index 1c3f42d..83178cc 100644 --- a/src/PlatformAware.jl +++ b/src/PlatformAware.jl @@ -67,7 +67,7 @@ export Yes, No, Provider, - OnPremise, + OnPremises, CloudProvider, MachineFamily, MachineType, diff --git a/src/features/default/Platform.toml b/src/features/default/Platform.toml index 2aebe61..c9f7186 100644 --- a/src/features/default/Platform.toml +++ b/src/features/default/Platform.toml @@ -7,7 +7,7 @@ [node] -node_provider = "OnPremise" +node_provider = "OnPremises" node_virtual = "No" node_dedicated = "Yes" node_machinefamily = "na" diff --git a/src/features/detection.jl b/src/features/detection.jl index 185314f..e41e9e9 100644 --- a/src/features/detection.jl +++ b/src/features/detection.jl @@ -731,7 +731,7 @@ function identifyNode() node_features = Dict() node_features["node_count"] = 1 - node_features["node_provider"] = "OnPremise" + node_features["node_provider"] = "OnPremises" node_features["node_virtual"] = "No" node_features["node_dedicated"] = "No" node_features["node_machinefamily"] = "unset" diff --git a/src/features/qualifiers/general.jl b/src/features/qualifiers/general.jl index f13a812..76243d1 100644 --- a/src/features/qualifiers/general.jl +++ b/src/features/qualifiers/general.jl @@ -12,7 +12,7 @@ abstract type No <: Query end # maintainer abstract type Provider <: QualifierFeature end -abstract type OnPremise <: Provider end +abstract type OnPremises <: Provider end abstract type CloudProvider <: Provider end # machine diff --git a/src/platform.jl b/src/platform.jl index 8fe9e29..68e8663 100644 --- a/src/platform.jl +++ b/src/platform.jl @@ -238,6 +238,8 @@ macro platform(t,f) platform_parameter_macro!(f) elseif (t == :parameter && !getaddparameter()) @info "cannot add parameters after including the first kernel method" + elseif (t == :assumption) + return :($f) else @info "usage: platform [default | aware] " @info " platform parameter :()" @@ -303,7 +305,17 @@ function build_kernel_signature(fsign::Expr) fname = popfirst!(call_node_args) keyword_parameters_node = length(call_node_args) > 0 && typeof(call_node_args[1]) == Expr && call_node_args[1].head == :parameters ? popfirst!(call_node_args) : nothing # takes the platform parameters of the kernel - aware_parameters_args = length(call_node_args) > 0 && typeof(call_node_args[1]) == Expr && call_node_args[1].head == :braces ? popfirst!(call_node_args).args : [] + #aware_parameters_args = length(call_node_args) > 0 && typeof(call_node_args[1]) == Expr && call_node_args[1].head == :braces ? popfirst!(call_node_args).args : [] + aware_parameters_args = [] + if length(call_node_args) > 0 + if typeof(call_node_args[1]) == Expr && call_node_args[1].head == :braces + aware_parameters_args = popfirst!(call_node_args).args + #elseif typeof(call_node_args[1]) == Symbol + # arg = popfirst!(call_node_args) + # aware_parameters_args = @eval arg + end + end + # inserts the kernel's platform parameters into the list platform parameters. ppars = platform_parameters_kernel(aware_parameters_args) new_call_node_args = isnothing(keyword_parameters_node) ? [fname, ppars..., call_node_args...] : [fname, keyword_parameters_node, ppars..., call_node_args...] From 28a8cb2fa9d5bd7372eabbb14db3ea5ec4374152 Mon Sep 17 00:00:00 2001 From: Francisco Heron de Carvalho Junior Date: Thu, 27 Oct 2022 19:39:36 -0400 Subject: [PATCH 2/4] corrections --- src/features/features.jl | 11 ++-------- src/features/qualifiers/common.jl | 34 ++++++++++++++++++++++++------ src/features/qualifiers/ec2/ec2.jl | 2 +- 3 files changed, 30 insertions(+), 17 deletions(-) diff --git a/src/features/features.jl b/src/features/features.jl index 859de7e..fc6a9d8 100644 --- a/src/features/features.jl +++ b/src/features/features.jl @@ -190,8 +190,6 @@ function identifyAPI_oldversion(api_string) dt = AcceleratorBackend api_type = get_qualifier(api_string) - - if (startswith(api_string, "CUDA")) return Tuple{api_type,dt,dt,dt,dt,dt,dt} elseif (startswith(api_string, "OpenCL")) return Tuple{dt,api_type,dt,dt,dt,dt,dt} @@ -202,10 +200,6 @@ function identifyAPI_oldversion(api_string) elseif (startswith(api_string, "DirectX")) return Tuple{dt,dt,dt,dt,dt,dt,api_type} else return Tuple{dt,dt,dt,dt,dt,dt} end - - - #Tuple{Any,Any,Any,Any,Any,Any,Any} - end @@ -226,14 +220,13 @@ function get_api_qualifier(api_string, platform_feature_default) directx_api = get_qualifier(apis[7] in ["na","unset","unknown","ignore"] ? "AcceleratorBackend" : apis[7]) Tuple{cuda_api,opencl_api,openacc_api,oneapi_api,opengl_api,vulkan_api,directx_api} - #Tuple{Any,Any,Any,Any,Any,Any,Any} end function loadFeaturesSection!(dict, platform_feature, platform_feature_default) - if ("0" in keys(dict)) - dict = dict["0"] + if ("1" in keys(dict)) + dict = dict["1"] end for (parameter_id, feature) in dict diff --git a/src/features/qualifiers/common.jl b/src/features/qualifiers/common.jl index d3d2e54..4c38382 100644 --- a/src/features/qualifiers/common.jl +++ b/src/features/qualifiers/common.jl @@ -64,13 +64,33 @@ export Now3D, Now3Dx, MMX, SSE, SSE_2, SSE2, SSE_3, SSE3, SSSE_3, SSSE3, SSE_4, # Memory types abstract type RAM <: MemoryType end -abstract type DDR2 <: RAM end -abstract type DDR3 <: RAM end -abstract type DDR3L <: DDR3 end -abstract type DDR4 <: RAM end -abstract type LPDDR4 <: DDR4 end - -export RAM, DDR2, DDR3, DDR33L, DDR4, LPDDR4 +abstract type SDRAM <: RAM end + +abstract type DDR2 <: SDRAM end +abstract type DDR3 <: SDRAM end +abstract type DDR3L <: SDRAM end +abstract type DDR4 <: SDRAM end +abstract type LPDDR4 <: SDRAM end +abstract type LPDDR4X <: SDRAM end +abstract type DDR5 <: SDRAM end +abstract type LPDDR5 <: SDRAM end + +abstract type DDR_SDRAM <: SDRAM end +abstract type GDDR2 <: SDRAM end +abstract type GDDR3 <: SDRAM end +abstract type GDDR4 <: SDRAM end +abstract type GDDR5 <: SDRAM end +abstract type GDDR5X <: SDRAM end +abstract type GDDR6 <: SDRAM end +abstract type GDDR6X <: SDRAM end + +abstract type HBM2 <: SDRAM end +abstract type HBM2e <: SDRAM end +abstract type HBM3 <: SDRAM end +abstract type HBM_PIM <: SDRAM end + +export RAM, DDR2, DDR3, DDR33L, DDR4, LPDDR4, LPDDR4X, DDR5, LPDDR5 +export DDR_SDRAM, GDDR2, GDDR3, GDDR4, GDDR5, GDDR5X, GDDR6, GDDR6X # Storage types abstract type SSD <: StorageType end diff --git a/src/features/qualifiers/ec2/ec2.jl b/src/features/qualifiers/ec2/ec2.jl index 0573ba1..8fb480b 100644 --- a/src/features/qualifiers/ec2/ec2.jl +++ b/src/features/qualifiers/ec2/ec2.jl @@ -778,7 +778,7 @@ abstract type EC2Type_H1_16xLarge <: EC2Type_H1 end ## function get_instance_info(::Type{<:AmazonEC2}) try - global instance_id = JSON.parse(String(HTTP.request("GET", "http://169.254.169.254/latest/dynamic/instance-identity/document").body)) + global instance_id = JSON.parse(String(HTTP.request("GET", "http://169.254.169.254/latest/dynamic/instance-identity/document"; connect_timeout=10, readtimeout=10).body)) # return instance_info["instanceType"], instance_info["region"] catch e return nothing From 488509f59538ba7130314e64a48e53b867e1d6d6 Mon Sep 17 00:00:00 2001 From: Francisco Heron de Carvalho Junior Date: Thu, 27 Oct 2022 19:53:54 -0400 Subject: [PATCH 3/4] correction - multiple GPUs of the same model --- Project.toml | 2 +- src/features/detection.jl | 13 +++++-------- 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/Project.toml b/Project.toml index 74c6068..8bda5f0 100644 --- a/Project.toml +++ b/Project.toml @@ -1,7 +1,7 @@ name = "PlatformAware" uuid = "e7c50b67-2c03-471e-9cf2-69e515d86ecf" authors = ["Francisco Heron de Carvalho Junior and contributors"] -version = "0.4.0" +version = "0.4.1" [deps] AbstractTrees = "1520ce14-60c1-5f80-bbc7-55ef81b5835c" diff --git a/src/features/detection.jl b/src/features/detection.jl index e41e9e9..6a28e23 100644 --- a/src/features/detection.jl +++ b/src/features/detection.jl @@ -60,13 +60,9 @@ function identifyComponent(idtype) node = dict["list"]["node"] if (typeof(node) == Vector{Any}) for v in enumerate(node) - #if ("product" in keys(v[2])) - # push!(l, v[2]["product"]) - #end push!(l,v[2]) end else - #push!(l,node["product"]) push!(l,node) end return l @@ -455,7 +451,7 @@ function collectAcceleratorFeatures(l) # Return the first display device that is an accelerator. # This is valid only for GPUs. i = 1 - for acc_brand in l + for acc_brand in keys(l) # looking at the database acc_info = identifyAcceleratorModel(replace(acc_brand,"[" => "", "]" => "", "(" => "", ")" => "" )) @@ -466,7 +462,7 @@ function collectAcceleratorFeatures(l) device = Dict() accelerator_features[string(i)] = device - device["accelerator_count"] = 1 + device["accelerator_count"] = l[acc_brand] device["accelerator"] = acc_info[2] device["accelerator_type"] = acc_info[3] device["accelerator_manufacturer"] = acc_info[4] @@ -506,9 +502,10 @@ end function identifyAccelerator() try - l = Vector() + l = Dict() for d in identifyComponent("display") - push!(l,d["vendor"] * " " * d["product"]) + k = "$(d["vendor"]) $(d["product"])" + l[k] = haskey(l,k) ? l[k] + 1 : 1 end accelerator_features = collectAcceleratorFeatures(l) From fec33218aeaed78da797e19f8e936f5b9efcf83b Mon Sep 17 00:00:00 2001 From: Francisco Heron de Carvalho Junior Date: Fri, 28 Oct 2022 10:25:21 -0400 Subject: [PATCH 4/4] v0.4.1 (corrections) --- src/features/default/Platform.toml | 1 + src/features/detection.jl | 1 + src/features/features.jl | 1 + src/features/qualifiers/general.jl | 10 ++++++++++ src/platform.jl | 1 + 5 files changed, 14 insertions(+) diff --git a/src/features/default/Platform.toml b/src/features/default/Platform.toml index c9f7186..9b246b0 100644 --- a/src/features/default/Platform.toml +++ b/src/features/default/Platform.toml @@ -36,6 +36,7 @@ accelerator = "unset" accelerator_count = 0 accelerator_type = "unset" accelerator_manufacturer = "unset" +accelerator_interconnect = "unset" accelerator_api = "unset" accelerator_architecture = "unset" accelerator_memory_size = "unset" diff --git a/src/features/detection.jl b/src/features/detection.jl index 6a28e23..2e7a619 100644 --- a/src/features/detection.jl +++ b/src/features/detection.jl @@ -488,6 +488,7 @@ function collectAcceleratorFeaturesDefault() default_features["accelerator"] = "unset" default_features["accelerator_type"] = "unset" default_features["accelerator_manufacturer"] = "unset" + default_features["accelerator_interconnect"] = "unset" default_features["accelerator_api"] = "unset" default_features["accelerator_architecture"] = "unset" default_features["accelerator_memory_size"] = "unset" diff --git a/src/features/features.jl b/src/features/features.jl index fc6a9d8..5bb40f0 100644 --- a/src/features/features.jl +++ b/src/features/features.jl @@ -50,6 +50,7 @@ global feature_type = Dict( :processor => qualifier, :accelerator_count => quantifier, :accelerator_manufacturer => qualifier, + :accelerator_interconnect => qualifier, :accelerator_type => qualifier, :accelerator_architecture => qualifier, :accelerator_api => api_qualifier, diff --git a/src/features/qualifiers/general.jl b/src/features/qualifiers/general.jl index 76243d1..bfc0e89 100644 --- a/src/features/qualifiers/general.jl +++ b/src/features/qualifiers/general.jl @@ -38,6 +38,7 @@ abstract type Processor end # accelerator +abstract type AcceleratorInterconnect <: QualifierFeature end abstract type AcceleratorType <: QualifierFeature end abstract type AcceleratorArchitecture <: QualifierFeature end abstract type AcceleratorBackend <: QualifierFeature end @@ -53,6 +54,15 @@ abstract type FPGA <: AcceleratorType end abstract type MIC <: AcceleratorType end +abstract type PCIe <: AcceleratorInterconnect end +abstract type NVLink <: AcceleratorInterconnect end +abstract type NVLink_V1 <: NVLink end +abstract type NVLink_V2 <: NVLink end +abstract type NVLink_SLI <: NVLink end +abstract type NVSwitch <: AcceleratorInterconnect end +abstract type GPUDirect <: AcceleratorInterconnect end + + #interconnection abstract type InterconnectionTopology <: QualifierFeature end abstract type Interconnection <: QualifierFeature end diff --git a/src/platform.jl b/src/platform.jl index 68e8663..77bf145 100644 --- a/src/platform.jl +++ b/src/platform.jl @@ -57,6 +57,7 @@ defT =[ :accelerator_count => Tuple{AtLeast0,AtMostInf,Q} where Q, :accelerator_type => AcceleratorType, :accelerator_manufacturer => Manufacturer, + :accelerator_interconnect => AcceleratorInterconnect, :accelerator_api => Tuple{AcceleratorBackend,AcceleratorBackend,AcceleratorBackend,AcceleratorBackend,AcceleratorBackend,AcceleratorBackend,AcceleratorBackend}, :accelerator_architecture => AcceleratorArchitecture, :accelerator_memory_size => Tuple{AtLeast0,AtMostInf,Q} where Q,