From 11d544aed1029819b80776a7a2a52664578e071d Mon Sep 17 00:00:00 2001 From: Youmu Liu <105042599+Nitload-NSI@users.noreply.github.com> Date: Fri, 16 Jan 2026 17:52:58 +0800 Subject: [PATCH] HLSf can now set max block size, not only 16MB --- .clang-format | 747 ++++++++++++++++++ .../Memory/HLSFAllocator.Alloc.cs | 42 +- .../Memory/HLSFAllocator.Free.cs | 16 +- .../Memory/HLSFAllocator.Level.cs | 18 +- .../Memory/HLSFAllocator.SegmentEntry.cs | 53 +- .../HighPerformance/Memory/HLSFAllocator.cs | 115 ++- StgSharp.Native/sn-src/m.solve.x86.c | 2 +- StgSharpDebug/MatrixTest.cs | 2 +- 8 files changed, 926 insertions(+), 69 deletions(-) create mode 100644 .clang-format diff --git a/.clang-format b/.clang-format new file mode 100644 index 00000000..89332e75 --- /dev/null +++ b/.clang-format @@ -0,0 +1,747 @@ +# Format Style Options - Created with Clang Power Tools +--- +AccessModifierOffset: -4 +AlignAfterOpenBracket: Align +AlignConsecutiveAssignments: false +AlignConsecutiveDeclarations: false +AlignEscapedNewlines: Left +AlignOperands: true +AlignTrailingComments: false +AllowAllParametersOfDeclarationOnNextLine: false +AllowShortBlocksOnASingleLine: false +AllowShortCaseLabelsOnASingleLine: false +AllowShortFunctionsOnASingleLine: None +AllowShortIfStatementsOnASingleLine: false +AllowShortLoopsOnASingleLine: false +AlwaysBreakAfterDefinitionReturnType: None +AlwaysBreakAfterReturnType: None +AlwaysBreakBeforeMultilineStrings: false +AlwaysBreakTemplateDeclarations: false +BinPackArguments: true +BinPackParameters: true +BraceWrapping: + AfterCaseLabel: false + AfterClass: false + AfterControlStatement: false + AfterEnum: false + AfterFunction: true + AfterNamespace: true + AfterObjCDeclaration: false + AfterStruct: false + AfterUnion: false + AfterExternBlock: false + BeforeCatch: false + BeforeElse: false + IndentBraces: false + SplitEmptyFunction: true + SplitEmptyRecord: true + SplitEmptyNamespace: true + BeforeLambdaBody: false + BeforeWhile: false +BreakBeforeBinaryOperators: None +BreakBeforeBraces: Custom +BreakBeforeInheritanceComma: false +BreakBeforeTernaryOperators: false +BreakConstructorInitializers: BeforeComma +BreakAfterJavaFieldAnnotations: false +BreakStringLiterals: false +ColumnLimit: 100 +CommentPragmas: '^ IWYU pragma:' +CompactNamespaces: false +ConstructorInitializerAllOnOneLineOrOnePerLine: false +ConstructorInitializerIndentWidth : 8 +ContinuationIndentWidth: 8 +Cpp11BracedListStyle: false +DerivePointerAlignment: false +ExperimentalAutoDetectBinPacking: false +FixNamespaceComments: false +ForEachMacros: + - '__ata_qc_for_each' + - '__bio_for_each_bvec' + - '__bio_for_each_segment' + - '__evlist__for_each_entry' + - '__evlist__for_each_entry_continue' + - '__evlist__for_each_entry_from' + - '__evlist__for_each_entry_reverse' + - '__evlist__for_each_entry_safe' + - '__for_each_mem_range' + - '__for_each_mem_range_rev' + - '__for_each_thread' + - '__hlist_for_each_rcu' + - '__map__for_each_symbol_by_name' + - '__pci_bus_for_each_res0' + - '__pci_bus_for_each_res1' + - '__pci_dev_for_each_res0' + - '__pci_dev_for_each_res1' + - '__perf_evlist__for_each_entry' + - '__perf_evlist__for_each_entry_reverse' + - '__perf_evlist__for_each_entry_safe' + - '__rq_for_each_bio' + - '__shost_for_each_device' + - '__sym_for_each' + - 'apei_estatus_for_each_section' + - 'ata_for_each_dev' + - 'ata_for_each_link' + - 'ata_qc_for_each' + - 'ata_qc_for_each_raw' + - 'ata_qc_for_each_with_internal' + - 'ax25_for_each' + - 'ax25_uid_for_each' + - 'bio_for_each_bvec' + - 'bio_for_each_bvec_all' + - 'bio_for_each_folio_all' + - 'bio_for_each_integrity_vec' + - 'bio_for_each_segment' + - 'bio_for_each_segment_all' + - 'bio_list_for_each' + - 'bip_for_each_vec' + - 'bond_for_each_slave' + - 'bond_for_each_slave_rcu' + - 'bpf_for_each' + - 'bpf_for_each_reg_in_vstate' + - 'bpf_for_each_reg_in_vstate_mask' + - 'bpf_for_each_spilled_reg' + - 'bpf_object__for_each_map' + - 'bpf_object__for_each_program' + - 'btree_for_each_safe128' + - 'btree_for_each_safe32' + - 'btree_for_each_safe64' + - 'btree_for_each_safel' + - 'card_for_each_dev' + - 'cgroup_taskset_for_each' + - 'cgroup_taskset_for_each_leader' + - 'cpu_aggr_map__for_each_idx' + - 'cpufreq_for_each_efficient_entry_idx' + - 'cpufreq_for_each_entry' + - 'cpufreq_for_each_entry_idx' + - 'cpufreq_for_each_valid_entry' + - 'cpufreq_for_each_valid_entry_idx' + - 'css_for_each_child' + - 'css_for_each_descendant_post' + - 'css_for_each_descendant_pre' + - 'damon_for_each_region' + - 'damon_for_each_region_from' + - 'damon_for_each_region_safe' + - 'damon_for_each_scheme' + - 'damon_for_each_scheme_safe' + - 'damon_for_each_target' + - 'damon_for_each_target_safe' + - 'damos_for_each_filter' + - 'damos_for_each_filter_safe' + - 'damos_for_each_quota_goal' + - 'damos_for_each_quota_goal_safe' + - 'data__for_each_file' + - 'data__for_each_file_new' + - 'data__for_each_file_start' + - 'device_for_each_child_node' + - 'device_for_each_child_node_scoped' + - 'dma_fence_array_for_each' + - 'dma_fence_chain_for_each' + - 'dma_fence_unwrap_for_each' + - 'dma_resv_for_each_fence' + - 'dma_resv_for_each_fence_unlocked' + - 'do_for_each_ftrace_op' + - 'drm_atomic_crtc_for_each_plane' + - 'drm_atomic_crtc_state_for_each_plane' + - 'drm_atomic_crtc_state_for_each_plane_state' + - 'drm_atomic_for_each_plane_damage' + - 'drm_client_for_each_connector_iter' + - 'drm_client_for_each_modeset' + - 'drm_connector_for_each_possible_encoder' + - 'drm_exec_for_each_locked_object' + - 'drm_exec_for_each_locked_object_reverse' + - 'drm_for_each_bridge_in_chain' + - 'drm_for_each_connector_iter' + - 'drm_for_each_crtc' + - 'drm_for_each_crtc_reverse' + - 'drm_for_each_encoder' + - 'drm_for_each_encoder_mask' + - 'drm_for_each_fb' + - 'drm_for_each_legacy_plane' + - 'drm_for_each_plane' + - 'drm_for_each_plane_mask' + - 'drm_for_each_privobj' + - 'drm_gem_for_each_gpuvm_bo' + - 'drm_gem_for_each_gpuvm_bo_safe' + - 'drm_gpuva_for_each_op' + - 'drm_gpuva_for_each_op_from_reverse' + - 'drm_gpuva_for_each_op_reverse' + - 'drm_gpuva_for_each_op_safe' + - 'drm_gpuvm_bo_for_each_va' + - 'drm_gpuvm_bo_for_each_va_safe' + - 'drm_gpuvm_for_each_va' + - 'drm_gpuvm_for_each_va_range' + - 'drm_gpuvm_for_each_va_range_safe' + - 'drm_gpuvm_for_each_va_safe' + - 'drm_mm_for_each_hole' + - 'drm_mm_for_each_node' + - 'drm_mm_for_each_node_in_range' + - 'drm_mm_for_each_node_safe' + - 'dsa_switch_for_each_available_port' + - 'dsa_switch_for_each_cpu_port' + - 'dsa_switch_for_each_cpu_port_continue_reverse' + - 'dsa_switch_for_each_port' + - 'dsa_switch_for_each_port_continue_reverse' + - 'dsa_switch_for_each_port_safe' + - 'dsa_switch_for_each_user_port' + - 'dsa_switch_for_each_user_port_continue_reverse' + - 'dsa_tree_for_each_cpu_port' + - 'dsa_tree_for_each_user_port' + - 'dsa_tree_for_each_user_port_continue_reverse' + - 'dso__for_each_symbol' + - 'elf_hash_for_each_possible' + - 'elf_symtab__for_each_symbol' + - 'evlist__for_each_cpu' + - 'evlist__for_each_entry' + - 'evlist__for_each_entry_continue' + - 'evlist__for_each_entry_from' + - 'evlist__for_each_entry_reverse' + - 'evlist__for_each_entry_safe' + - 'flow_action_for_each' + - 'for_each_acpi_consumer_dev' + - 'for_each_acpi_dev_match' + - 'for_each_active_dev_scope' + - 'for_each_active_drhd_unit' + - 'for_each_active_iommu' + - 'for_each_active_route' + - 'for_each_aggr_pgid' + - 'for_each_and_bit' + - 'for_each_andnot_bit' + - 'for_each_available_child_of_node' + - 'for_each_available_child_of_node_scoped' + - 'for_each_bench' + - 'for_each_bio' + - 'for_each_board_func_rsrc' + - 'for_each_btf_ext_rec' + - 'for_each_btf_ext_sec' + - 'for_each_bvec' + - 'for_each_card_auxs' + - 'for_each_card_auxs_safe' + - 'for_each_card_components' + - 'for_each_card_dapms' + - 'for_each_card_pre_auxs' + - 'for_each_card_prelinks' + - 'for_each_card_rtds' + - 'for_each_card_rtds_safe' + - 'for_each_card_widgets' + - 'for_each_card_widgets_safe' + - 'for_each_cgroup_storage_type' + - 'for_each_child_of_node' + - 'for_each_child_of_node_scoped' + - 'for_each_clear_bit' + - 'for_each_clear_bit_from' + - 'for_each_clear_bitrange' + - 'for_each_clear_bitrange_from' + - 'for_each_cmd' + - 'for_each_cmsghdr' + - 'for_each_collection' + - 'for_each_comp_order' + - 'for_each_compatible_node' + - 'for_each_component_dais' + - 'for_each_component_dais_safe' + - 'for_each_conduit' + - 'for_each_console' + - 'for_each_console_srcu' + - 'for_each_cpu' + - 'for_each_cpu_and' + - 'for_each_cpu_andnot' + - 'for_each_cpu_from' + - 'for_each_cpu_or' + - 'for_each_cpu_wrap' + - 'for_each_dapm_widgets' + - 'for_each_dedup_cand' + - 'for_each_dev_addr' + - 'for_each_dev_scope' + - 'for_each_dma_cap_mask' + - 'for_each_dpcm_be' + - 'for_each_dpcm_be_rollback' + - 'for_each_dpcm_be_safe' + - 'for_each_dpcm_fe' + - 'for_each_drhd_unit' + - 'for_each_dss_dev' + - 'for_each_efi_memory_desc' + - 'for_each_efi_memory_desc_in_map' + - 'for_each_element' + - 'for_each_element_extid' + - 'for_each_element_id' + - 'for_each_enabled_cpu' + - 'for_each_endpoint_of_node' + - 'for_each_event' + - 'for_each_event_tps' + - 'for_each_evictable_lru' + - 'for_each_fib6_node_rt_rcu' + - 'for_each_fib6_walker_rt' + - 'for_each_file_lock' + - 'for_each_free_mem_pfn_range_in_zone_from' + - 'for_each_free_mem_range' + - 'for_each_free_mem_range_reverse' + - 'for_each_func_rsrc' + - 'for_each_gpiochip_node' + - 'for_each_group_evsel' + - 'for_each_group_evsel_head' + - 'for_each_group_member' + - 'for_each_group_member_head' + - 'for_each_hstate' + - 'for_each_hwgpio' + - 'for_each_if' + - 'for_each_inject_fn' + - 'for_each_insn' + - 'for_each_insn_op_loc' + - 'for_each_insn_prefix' + - 'for_each_intid' + - 'for_each_iommu' + - 'for_each_ip_tunnel_rcu' + - 'for_each_irq_nr' + - 'for_each_lang' + - 'for_each_link_ch_maps' + - 'for_each_link_codecs' + - 'for_each_link_cpus' + - 'for_each_link_platforms' + - 'for_each_lru' + - 'for_each_matching_node' + - 'for_each_matching_node_and_match' + - 'for_each_media_entity_data_link' + - 'for_each_mem_pfn_range' + - 'for_each_mem_range' + - 'for_each_mem_range_rev' + - 'for_each_mem_region' + - 'for_each_member' + - 'for_each_memory' + - 'for_each_migratetype_order' + - 'for_each_missing_reg' + - 'for_each_mle_subelement' + - 'for_each_mod_mem_type' + - 'for_each_net' + - 'for_each_net_continue_reverse' + - 'for_each_net_rcu' + - 'for_each_netdev' + - 'for_each_netdev_continue' + - 'for_each_netdev_continue_rcu' + - 'for_each_netdev_continue_reverse' + - 'for_each_netdev_dump' + - 'for_each_netdev_feature' + - 'for_each_netdev_in_bond_rcu' + - 'for_each_netdev_rcu' + - 'for_each_netdev_reverse' + - 'for_each_netdev_safe' + - 'for_each_new_connector_in_state' + - 'for_each_new_crtc_in_state' + - 'for_each_new_mst_mgr_in_state' + - 'for_each_new_plane_in_state' + - 'for_each_new_plane_in_state_reverse' + - 'for_each_new_private_obj_in_state' + - 'for_each_new_reg' + - 'for_each_nhlt_endpoint' + - 'for_each_nhlt_endpoint_fmtcfg' + - 'for_each_nhlt_fmtcfg' + - 'for_each_node' + - 'for_each_node_by_name' + - 'for_each_node_by_type' + - 'for_each_node_mask' + - 'for_each_node_state' + - 'for_each_node_with_cpus' + - 'for_each_node_with_property' + - 'for_each_nonreserved_multicast_dest_pgid' + - 'for_each_numa_hop_mask' + - 'for_each_of_allnodes' + - 'for_each_of_allnodes_from' + - 'for_each_of_cpu_node' + - 'for_each_of_pci_range' + - 'for_each_old_connector_in_state' + - 'for_each_old_crtc_in_state' + - 'for_each_old_mst_mgr_in_state' + - 'for_each_old_plane_in_state' + - 'for_each_old_private_obj_in_state' + - 'for_each_oldnew_connector_in_state' + - 'for_each_oldnew_crtc_in_state' + - 'for_each_oldnew_mst_mgr_in_state' + - 'for_each_oldnew_plane_in_state' + - 'for_each_oldnew_plane_in_state_reverse' + - 'for_each_oldnew_private_obj_in_state' + - 'for_each_online_cpu' + - 'for_each_online_node' + - 'for_each_online_pgdat' + - 'for_each_or_bit' + - 'for_each_path' + - 'for_each_pci_bridge' + - 'for_each_pci_dev' + - 'for_each_pcm_streams' + - 'for_each_physmem_range' + - 'for_each_populated_zone' + - 'for_each_possible_cpu' + - 'for_each_present_blessed_reg' + - 'for_each_present_cpu' + - 'for_each_prime_number' + - 'for_each_prime_number_from' + - 'for_each_probe_cache_entry' + - 'for_each_process' + - 'for_each_process_thread' + - 'for_each_prop_codec_conf' + - 'for_each_prop_dai_codec' + - 'for_each_prop_dai_cpu' + - 'for_each_prop_dlc_codecs' + - 'for_each_prop_dlc_cpus' + - 'for_each_prop_dlc_platforms' + - 'for_each_property_of_node' + - 'for_each_reg' + - 'for_each_reg_filtered' + - 'for_each_reloc' + - 'for_each_reloc_from' + - 'for_each_requested_gpio' + - 'for_each_requested_gpio_in_range' + - 'for_each_reserved_child_of_node' + - 'for_each_reserved_mem_range' + - 'for_each_reserved_mem_region' + - 'for_each_rtd_ch_maps' + - 'for_each_rtd_codec_dais' + - 'for_each_rtd_components' + - 'for_each_rtd_cpu_dais' + - 'for_each_rtd_dais' + - 'for_each_rtd_dais_reverse' + - 'for_each_sband_iftype_data' + - 'for_each_script' + - 'for_each_sec' + - 'for_each_set_bit' + - 'for_each_set_bit_from' + - 'for_each_set_bit_wrap' + - 'for_each_set_bitrange' + - 'for_each_set_bitrange_from' + - 'for_each_set_clump8' + - 'for_each_sg' + - 'for_each_sg_dma_page' + - 'for_each_sg_page' + - 'for_each_sgtable_dma_page' + - 'for_each_sgtable_dma_sg' + - 'for_each_sgtable_page' + - 'for_each_sgtable_sg' + - 'for_each_sibling_event' + - 'for_each_sta_active_link' + - 'for_each_subelement' + - 'for_each_subelement_extid' + - 'for_each_subelement_id' + - 'for_each_sublist' + - 'for_each_subsystem' + - 'for_each_supported_activate_fn' + - 'for_each_supported_inject_fn' + - 'for_each_sym' + - 'for_each_test' + - 'for_each_thread' + - 'for_each_token' + - 'for_each_unicast_dest_pgid' + - 'for_each_valid_link' + - 'for_each_vif_active_link' + - 'for_each_vma' + - 'for_each_vma_range' + - 'for_each_vsi' + - 'for_each_wakeup_source' + - 'for_each_zone' + - 'for_each_zone_zonelist' + - 'for_each_zone_zonelist_nodemask' + - 'func_for_each_insn' + - 'fwnode_for_each_available_child_node' + - 'fwnode_for_each_child_node' + - 'fwnode_for_each_parent_node' + - 'fwnode_graph_for_each_endpoint' + - 'gadget_for_each_ep' + - 'genradix_for_each' + - 'genradix_for_each_from' + - 'genradix_for_each_reverse' + - 'hash_for_each' + - 'hash_for_each_possible' + - 'hash_for_each_possible_rcu' + - 'hash_for_each_possible_rcu_notrace' + - 'hash_for_each_possible_safe' + - 'hash_for_each_rcu' + - 'hash_for_each_safe' + - 'hashmap__for_each_entry' + - 'hashmap__for_each_entry_safe' + - 'hashmap__for_each_key_entry' + - 'hashmap__for_each_key_entry_safe' + - 'hctx_for_each_ctx' + - 'hists__for_each_format' + - 'hists__for_each_sort_list' + - 'hlist_bl_for_each_entry' + - 'hlist_bl_for_each_entry_rcu' + - 'hlist_bl_for_each_entry_safe' + - 'hlist_for_each' + - 'hlist_for_each_entry' + - 'hlist_for_each_entry_continue' + - 'hlist_for_each_entry_continue_rcu' + - 'hlist_for_each_entry_continue_rcu_bh' + - 'hlist_for_each_entry_from' + - 'hlist_for_each_entry_from_rcu' + - 'hlist_for_each_entry_rcu' + - 'hlist_for_each_entry_rcu_bh' + - 'hlist_for_each_entry_rcu_notrace' + - 'hlist_for_each_entry_safe' + - 'hlist_for_each_entry_srcu' + - 'hlist_for_each_safe' + - 'hlist_nulls_for_each_entry' + - 'hlist_nulls_for_each_entry_from' + - 'hlist_nulls_for_each_entry_rcu' + - 'hlist_nulls_for_each_entry_safe' + - 'i3c_bus_for_each_i2cdev' + - 'i3c_bus_for_each_i3cdev' + - 'idr_for_each_entry' + - 'idr_for_each_entry_continue' + - 'idr_for_each_entry_continue_ul' + - 'idr_for_each_entry_ul' + - 'in_dev_for_each_ifa_rcu' + - 'in_dev_for_each_ifa_rtnl' + - 'inet_bind_bucket_for_each' + - 'interval_tree_for_each_span' + - 'intlist__for_each_entry' + - 'intlist__for_each_entry_safe' + - 'kcore_copy__for_each_phdr' + - 'key_for_each' + - 'key_for_each_safe' + - 'klp_for_each_func' + - 'klp_for_each_func_safe' + - 'klp_for_each_func_static' + - 'klp_for_each_object' + - 'klp_for_each_object_safe' + - 'klp_for_each_object_static' + - 'kunit_suite_for_each_test_case' + - 'kvm_for_each_memslot' + - 'kvm_for_each_memslot_in_gfn_range' + - 'kvm_for_each_vcpu' + - 'libbpf_nla_for_each_attr' + - 'list_for_each' + - 'list_for_each_codec' + - 'list_for_each_codec_safe' + - 'list_for_each_continue' + - 'list_for_each_entry' + - 'list_for_each_entry_continue' + - 'list_for_each_entry_continue_rcu' + - 'list_for_each_entry_continue_reverse' + - 'list_for_each_entry_from' + - 'list_for_each_entry_from_rcu' + - 'list_for_each_entry_from_reverse' + - 'list_for_each_entry_lockless' + - 'list_for_each_entry_rcu' + - 'list_for_each_entry_reverse' + - 'list_for_each_entry_safe' + - 'list_for_each_entry_safe_continue' + - 'list_for_each_entry_safe_from' + - 'list_for_each_entry_safe_reverse' + - 'list_for_each_entry_srcu' + - 'list_for_each_from' + - 'list_for_each_prev' + - 'list_for_each_prev_safe' + - 'list_for_each_rcu' + - 'list_for_each_reverse' + - 'list_for_each_safe' + - 'llist_for_each' + - 'llist_for_each_entry' + - 'llist_for_each_entry_safe' + - 'llist_for_each_safe' + - 'lwq_for_each_safe' + - 'map__for_each_symbol' + - 'map__for_each_symbol_by_name' + - 'mas_for_each' + - 'mci_for_each_dimm' + - 'media_device_for_each_entity' + - 'media_device_for_each_intf' + - 'media_device_for_each_link' + - 'media_device_for_each_pad' + - 'media_entity_for_each_pad' + - 'media_pipeline_for_each_entity' + - 'media_pipeline_for_each_pad' + - 'mlx5_lag_for_each_peer_mdev' + - 'msi_domain_for_each_desc' + - 'msi_for_each_desc' + - 'mt_for_each' + - 'nanddev_io_for_each_page' + - 'netdev_for_each_lower_dev' + - 'netdev_for_each_lower_private' + - 'netdev_for_each_lower_private_rcu' + - 'netdev_for_each_mc_addr' + - 'netdev_for_each_synced_mc_addr' + - 'netdev_for_each_synced_uc_addr' + - 'netdev_for_each_uc_addr' + - 'netdev_for_each_upper_dev_rcu' + - 'netdev_hw_addr_list_for_each' + - 'nft_rule_for_each_expr' + - 'nla_for_each_attr' + - 'nla_for_each_attr_type' + - 'nla_for_each_nested' + - 'nla_for_each_nested_type' + - 'nlmsg_for_each_attr' + - 'nlmsg_for_each_msg' + - 'nr_neigh_for_each' + - 'nr_neigh_for_each_safe' + - 'nr_node_for_each' + - 'nr_node_for_each_safe' + - 'of_for_each_phandle' + - 'of_property_for_each_string' + - 'of_property_for_each_u32' + - 'pci_bus_for_each_resource' + - 'pci_dev_for_each_resource' + - 'pcl_for_each_chunk' + - 'pcl_for_each_segment' + - 'pcm_for_each_format' + - 'perf_config_items__for_each_entry' + - 'perf_config_sections__for_each_entry' + - 'perf_config_set__for_each_entry' + - 'perf_cpu_map__for_each_cpu' + - 'perf_cpu_map__for_each_cpu_skip_any' + - 'perf_cpu_map__for_each_idx' + - 'perf_evlist__for_each_entry' + - 'perf_evlist__for_each_entry_reverse' + - 'perf_evlist__for_each_entry_safe' + - 'perf_evlist__for_each_evsel' + - 'perf_evlist__for_each_mmap' + - 'perf_hpp_list__for_each_format' + - 'perf_hpp_list__for_each_format_safe' + - 'perf_hpp_list__for_each_sort_list' + - 'perf_hpp_list__for_each_sort_list_safe' + - 'perf_tool_event__for_each_event' + - 'plist_for_each' + - 'plist_for_each_continue' + - 'plist_for_each_entry' + - 'plist_for_each_entry_continue' + - 'plist_for_each_entry_safe' + - 'plist_for_each_safe' + - 'pnp_for_each_card' + - 'pnp_for_each_dev' + - 'protocol_for_each_card' + - 'protocol_for_each_dev' + - 'queue_for_each_hw_ctx' + - 'radix_tree_for_each_slot' + - 'radix_tree_for_each_tagged' + - 'rb_for_each' + - 'rbtree_postorder_for_each_entry_safe' + - 'rdma_for_each_block' + - 'rdma_for_each_port' + - 'rdma_umem_for_each_dma_block' + - 'resort_rb__for_each_entry' + - 'resource_list_for_each_entry' + - 'resource_list_for_each_entry_safe' + - 'rhl_for_each_entry_rcu' + - 'rhl_for_each_rcu' + - 'rht_for_each' + - 'rht_for_each_entry' + - 'rht_for_each_entry_from' + - 'rht_for_each_entry_rcu' + - 'rht_for_each_entry_rcu_from' + - 'rht_for_each_entry_safe' + - 'rht_for_each_from' + - 'rht_for_each_rcu' + - 'rht_for_each_rcu_from' + - 'rq_for_each_bvec' + - 'rq_for_each_segment' + - 'rq_list_for_each' + - 'rq_list_for_each_safe' + - 'sample_read_group__for_each' + - 'scsi_for_each_prot_sg' + - 'scsi_for_each_sg' + - 'sctp_for_each_hentry' + - 'sctp_skb_for_each' + - 'sec_for_each_insn' + - 'sec_for_each_insn_continue' + - 'sec_for_each_insn_from' + - 'sec_for_each_sym' + - 'shdma_for_each_chan' + - 'shost_for_each_device' + - 'sk_for_each' + - 'sk_for_each_bound' + - 'sk_for_each_entry_offset_rcu' + - 'sk_for_each_from' + - 'sk_for_each_rcu' + - 'sk_for_each_safe' + - 'sk_nulls_for_each' + - 'sk_nulls_for_each_from' + - 'sk_nulls_for_each_rcu' + - 'snd_array_for_each' + - 'snd_pcm_group_for_each_entry' + - 'snd_soc_dapm_widget_for_each_path' + - 'snd_soc_dapm_widget_for_each_path_safe' + - 'snd_soc_dapm_widget_for_each_sink_path' + - 'snd_soc_dapm_widget_for_each_source_path' + - 'sparsebit_for_each_set_range' + - 'strlist__for_each_entry' + - 'strlist__for_each_entry_safe' + - 'sym_for_each_insn' + - 'sym_for_each_insn_continue_reverse' + - 'symbols__for_each_entry' + - 'tb_property_for_each' + - 'tcf_act_for_each_action' + - 'tcf_exts_for_each_action' + - 'ttm_resource_manager_for_each_res' + - 'udp_portaddr_for_each_entry' + - 'udp_portaddr_for_each_entry_rcu' + - 'usb_hub_for_each_child' + - 'v4l2_device_for_each_subdev' + - 'v4l2_m2m_for_each_dst_buf' + - 'v4l2_m2m_for_each_dst_buf_safe' + - 'v4l2_m2m_for_each_src_buf' + - 'v4l2_m2m_for_each_src_buf_safe' + - 'virtio_device_for_each_vq' + - 'while_for_each_ftrace_op' + - 'xa_for_each' + - 'xa_for_each_marked' + - 'xa_for_each_range' + - 'xa_for_each_start' + - 'xas_for_each' + - 'xas_for_each_conflict' + - 'xas_for_each_marked' + - 'xbc_array_for_each_value' + - 'xbc_for_each_key_value' + - 'xbc_node_for_each_array_value' + - 'xbc_node_for_each_child' + - 'xbc_node_for_each_key_value' + - 'xbc_node_for_each_subkey' + - 'ynl_attr_for_each' + - 'ynl_attr_for_each_nested' + - 'ynl_attr_for_each_payload' + - 'zorro_for_each_dev' +IncludeBlocks: Preserve +IncludeCategories: + - Regex: '.*' + Priority: 1 +IncludeIsMainRegex: (Test)?$ +IndentCaseLabels: false +IndentGotoLabels: false +IndentPPDirectives: None +IndentWidth: 8 +IndentWrappedFunctionNames: false +JavaScriptQuotes: Leave +JavaScriptWrapImports: true +KeepEmptyLinesAtTheStartOfBlocks: false +MacroBlockBegin: '' +MacroBlockEnd: '' +MaxEmptyLinesToKeep: 1 +NamespaceIndentation: None +ObjCBinPackProtocolList: Auto +ObjCBlockIndentWidth: 8 +ObjCSpaceAfterProperty: true +ObjCSpaceBeforeProtocolList: true +PenaltyBreakAssignment: 10 +PenaltyBreakBeforeFirstCallParameter: 30 +PenaltyBreakComment: 10 +PenaltyBreakFirstLessLess: 0 +PenaltyBreakString: 10 +PenaltyExcessCharacter: 100 +PenaltyReturnTypeOnItsOwnLine: 60 +PointerAlignment: Right +ReflowComments: false +SortIncludes: false +SortUsingDeclarations: false +SpaceAfterCStyleCast: false +SpaceAfterTemplateKeyword: true +SpaceBeforeAssignmentOperators: true +SpaceBeforeCtorInitializerColon: true +SpaceBeforeInheritanceColon: true +SpaceBeforeParens: ControlStatementsExceptForEachMacros +SpaceBeforeRangeBasedForLoopColon: true +SpaceInEmptyParentheses: false +SpacesBeforeTrailingComments: 1 +SpacesInAngles: false +SpacesInContainerLiterals: false +SpacesInCStyleCastParentheses: false +SpacesInParentheses: false +SpacesInSquareBrackets: false +Standard: Cpp03 +TabWidth: 8 +UseTab: Never +... diff --git a/StgSharp.Common/HighPerformance/Memory/HLSFAllocator.Alloc.cs b/StgSharp.Common/HighPerformance/Memory/HLSFAllocator.Alloc.cs index e7bef0d1..b8b357c8 100644 --- a/StgSharp.Common/HighPerformance/Memory/HLSFAllocator.Alloc.cs +++ b/StgSharp.Common/HighPerformance/Memory/HLSFAllocator.Alloc.cs @@ -1,4 +1,4 @@ -//----------------------------------------------------------------------- +//----------------------------------------------------------------------- // ----------------------------------------------------------------------- // file="HLSFAllocator.Alloc" // Project: StgSharp @@ -37,19 +37,16 @@ namespace StgSharp.HighPerformance.Memory public unsafe partial class HybridLayerSegregatedFitAllocator { - public hlsfHandle Alloc(uint size) + public hlsfHandle Alloc( + uint size + ) { - if (size > 32U * 1024U * 1024U) - { - Entry* e = (Entry*)_entries.Allocate(); - e->Size = size; - e->Position = (nuint)NativeMemory.AlignedAlloc(size, (nuint)_align); - e->State = EntryState.Large; - return new hlsfHandle(e, size); + if (size > _maxSize) { + throw new InvalidOperationException("Requested size exceeds maximum allocatable size."); } int level = GetLevelFromSize(size); - int segmentIndex = DetermineSegmentIndex(size, level); + int segmentIndex = DetermineSegmentIndex(_levelSizeArray, size, level); int i = level, s = segmentIndex; Entry* handle; @@ -75,7 +72,7 @@ namespace StgSharp.HighPerformance.Memory if (handle != null) { - int requestedOffset = (segmentIndex + 1) * levelSizeArray[level]; + int requestedOffset = (segmentIndex + 1) * _levelSizeArray[level]; if (requestedOffset > handle->Size) { throw new OverflowException("Out of memory: insufficient block size returned from spare memory."); } @@ -99,7 +96,10 @@ namespace StgSharp.HighPerformance.Memory /// /// /// - private void SliceMemory(Entry* e, long sizeToSlice) + private void SliceMemory( + Entry* e, + long sizeToSlice + ) { Entry* next = e; long remain = sizeToSlice; // remained size to slice @@ -108,9 +108,9 @@ namespace StgSharp.HighPerformance.Memory int i = (BitOperations.TrailingZeroCount(offset) - 6) / 2; i = int.Min(10, i); - for (; i < levelSizeArray.Length; i++) + for (; i < _levelSizeArray.Length; i++) { - int size = levelSizeArray[i]; + int size = _levelSizeArray[i]; int upper = size * 4; long edge = (offset + upper - 1) / upper * upper; int count = (int)((long.Min(edge, end) - offset) / size); @@ -136,7 +136,7 @@ namespace StgSharp.HighPerformance.Memory if (i > MaxLevel) { - int size = levelSizeArray[^1]; + int size = _levelSizeArray[^1]; int upper = size * 4; long edge = end / upper * upper; int count = (int)((long.Min(edge, end) - offset) / upper); @@ -162,7 +162,7 @@ namespace StgSharp.HighPerformance.Memory for (i--; i >= 0; i--) { - int size = levelSizeArray[i]; + int size = _levelSizeArray[i]; long edge = end / size * size; int count = (int)((long.Min(edge, end) - offset) / size); if (count > 0) @@ -197,7 +197,9 @@ namespace StgSharp.HighPerformance.Memory /// /// True if allocation succeeded /// - private bool TryAllocateNew32MBBlock(out Entry* handle) + private bool TryAllocateNew32MBBlock( + out Entry* handle + ) { nuint pos = _spareMemory->Position; long remain = _spareMemory->Size; @@ -227,7 +229,11 @@ namespace StgSharp.HighPerformance.Memory /// /// Helper method for allocation - converts BucketNode to Entry /// - private bool TryPopLevelForAllocation(int levelIndex, int sizeIndex, out Entry* entry) + private bool TryPopLevelForAllocation( + int levelIndex, + int sizeIndex, + out Entry* entry + ) { if (TryPopLevel(levelIndex, sizeIndex, out BucketNode* bucketNode)) { diff --git a/StgSharp.Common/HighPerformance/Memory/HLSFAllocator.Free.cs b/StgSharp.Common/HighPerformance/Memory/HLSFAllocator.Free.cs index 0aa5b049..63d61d08 100644 --- a/StgSharp.Common/HighPerformance/Memory/HLSFAllocator.Free.cs +++ b/StgSharp.Common/HighPerformance/Memory/HLSFAllocator.Free.cs @@ -1,4 +1,4 @@ -//----------------------------------------------------------------------- +//----------------------------------------------------------------------- // ----------------------------------------------------------------------- // file="HLSFAllocator.Free" // Project: StgSharp @@ -64,7 +64,7 @@ namespace StgSharp.HighPerformance.Memory { size += cur->Size; Entry* next = cur->NextNear; - RemoveFromBucket(cur->Level, DetermineSegmentIndex(cur->Size, cur->Level), (BucketNode*)cur->Position); + RemoveFromBucket(cur->Level, DetermineSegmentIndex(_levelSizeArray, cur->Size, cur->Level), (BucketNode*)cur->Position); RemoveFromPositionChain(cur); cur = next; } while (cur != null && cur != _spareMemory && cur->State == EntryState.Empty); @@ -80,18 +80,14 @@ namespace StgSharp.HighPerformance.Memory /// /// Handle to the allocated memory block /// - public void Free(hlsfHandle handle) + public void Free( + hlsfHandle handle + ) { Entry* e = handle.EntryHandle; if (e == null) { return; } - if (e->State == EntryState.Large) - { - NativeMemory.AlignedFree((void*)e->Position); - _entries.Free((nuint)e); - return; - } if (e->State != EntryState.Alloc) { return; } @@ -106,7 +102,7 @@ namespace StgSharp.HighPerformance.Memory long finalSize = e->Size; int finalLevel = GetLevelFromSize(finalSize); e->Level = finalLevel; - int finalSegment = DetermineSegmentIndex(finalSize, finalLevel); + int finalSegment = DetermineSegmentIndex(_levelSizeArray, finalSize, finalLevel); // Push the merged entry back to appropriate bucket PushBucketToLevel(finalLevel, finalSegment, (BucketNode*)e->Position); diff --git a/StgSharp.Common/HighPerformance/Memory/HLSFAllocator.Level.cs b/StgSharp.Common/HighPerformance/Memory/HLSFAllocator.Level.cs index 1ce8c7cf..e824a23b 100644 --- a/StgSharp.Common/HighPerformance/Memory/HLSFAllocator.Level.cs +++ b/StgSharp.Common/HighPerformance/Memory/HLSFAllocator.Level.cs @@ -1,4 +1,4 @@ -//----------------------------------------------------------------------- +//----------------------------------------------------------------------- // ----------------------------------------------------------------------- // file="HLSFAllocator.Level" // Project: StgSharp @@ -40,7 +40,7 @@ namespace StgSharp.HighPerformance.Memory private const int MaxLevel = 9; - private static readonly int[] levelSizeArray = [ + private int[] _levelSizeArray = [ 64, 256, 1024, @@ -53,20 +53,26 @@ namespace StgSharp.HighPerformance.Memory 16777216 ]; - public int AlignOfLevel(int bucketLevel) + public int AlignOfLevel( + int bucketLevel + ) { - int blockSize = levelSizeArray[bucketLevel]; + int blockSize = _levelSizeArray[bucketLevel]; return int.Min(blockSize, _align); } [MethodImpl(MethodImplOptions.AggressiveInlining)] - private static int GetLevelFromSize(long size) + private static int GetLevelFromSize( + long size + ) { return GetLevelFromSize((uint)size); } [MethodImpl(MethodImplOptions.AggressiveInlining)] - private static int GetLevelFromSize(uint size) + private static int GetLevelFromSize( + uint size + ) { /* * Level sizes: [64, 256, 1024, 4096, 16384, 65536, 262144, 1048576, 4194304, 16777216] diff --git a/StgSharp.Common/HighPerformance/Memory/HLSFAllocator.SegmentEntry.cs b/StgSharp.Common/HighPerformance/Memory/HLSFAllocator.SegmentEntry.cs index 9195b314..8688e19b 100644 --- a/StgSharp.Common/HighPerformance/Memory/HLSFAllocator.SegmentEntry.cs +++ b/StgSharp.Common/HighPerformance/Memory/HLSFAllocator.SegmentEntry.cs @@ -1,4 +1,4 @@ -//----------------------------------------------------------------------- +//----------------------------------------------------------------------- // ----------------------------------------------------------------------- // file="HLSFAllocator.SegmentEntry" // Project: StgSharp @@ -38,7 +38,10 @@ namespace StgSharp.HighPerformance.Memory /// Check if two Entries are adjacent in memory /// [MethodImpl(MethodImplOptions.AggressiveInlining)] - private static bool AssertAdjacentTo(Entry* current, Entry* other) + private static bool AssertAdjacentTo( + Entry* current, + Entry* other + ) { // Only a predicate; never throw here. Callers rely on false to skip merging. return other->Position + (nuint)other->Size == current->Position || @@ -48,10 +51,14 @@ namespace StgSharp.HighPerformance.Memory /// /// check out if a bucket is within the same higher-level boundary as currentOffset /// - private bool AssertBoundary(Entry* previous, Entry* current, int level) + private bool AssertBoundary( + Entry* previous, + Entry* current, + int level + ) { level = int.Min(level, MaxLevel); - int nextLevelSize = levelSizeArray[level] * 4; + int nextLevelSize = _levelSizeArray[level] * 4; ulong prevHead = previous->Position - (ulong)m_Buffer, currHead = current->Position - (ulong)m_Buffer; return (currHead / (ulong)nextLevelSize) == (prevHead / (ulong)nextLevelSize); @@ -61,14 +68,21 @@ namespace StgSharp.HighPerformance.Memory /// Determine segment index based on size and originLevel /// [MethodImpl(MethodImplOptions.AggressiveInlining)] - private static int DetermineSegmentIndex(long size, int level) + private static int DetermineSegmentIndex( + int[] levelSizeArray, + long size, + int level + ) { level = int.Min(level, MaxLevel); return (int)((size - 1) / levelSizeArray[level]); } [MethodImpl(MethodImplOptions.AggressiveInlining)] - private static void InsertEntryAfter(Entry* entry, Entry* position) + private static void InsertEntryAfter( + Entry* entry, + Entry* position + ) { Entry* next = position->NextNear; entry->NextNear = next; @@ -78,7 +92,10 @@ namespace StgSharp.HighPerformance.Memory } [MethodImpl(MethodImplOptions.AggressiveInlining)] - private static void InsertEntryBefore(Entry* entry, Entry* position) + private static void InsertEntryBefore( + Entry* entry, + Entry* position + ) { Entry* prev = position->PreviousNear; entry->NextNear = position; @@ -92,7 +109,9 @@ namespace StgSharp.HighPerformance.Memory /// Current Entry will serve as the final merged block. The Merge will be in lazy /// strategy. /// - private void MergeAndRemoveFromBuckets(Entry* entry) + private void MergeAndRemoveFromBuckets( + Entry* entry + ) { if (entry == null) { return; @@ -101,7 +120,7 @@ namespace StgSharp.HighPerformance.Memory long size = entry->Size; int originLevel = entry->Level; - int segment = DetermineSegmentIndex(size, originLevel); + int segment = DetermineSegmentIndex(_levelSizeArray, size, originLevel); do { // previous direction merge @@ -118,7 +137,7 @@ namespace StgSharp.HighPerformance.Memory // Console.WriteLine($"{(ulong)p->Size} merged to {(ulong)entry->Size} previous"); entry->Size += p->Size; entry->Position = p->Position; - RemoveFromBucket(originLevel, DetermineSegmentIndex(p->Size, originLevel), (BucketNode*)p->Position); + RemoveFromBucket(originLevel, DetermineSegmentIndex(_levelSizeArray, p->Size, originLevel), (BucketNode*)p->Position); RemoveFromPositionChain(p); } while (true); @@ -137,11 +156,11 @@ namespace StgSharp.HighPerformance.Memory // Console.WriteLine($"{(ulong)n->Size} merged to {(ulong)entry->Size} next"); entry->Size += n->Size; - RemoveFromBucket(originLevel, DetermineSegmentIndex(n->Size, originLevel), (BucketNode*)n->Position); + RemoveFromBucket(originLevel, DetermineSegmentIndex(_levelSizeArray, n->Size, originLevel), (BucketNode*)n->Position); RemoveFromPositionChain(n); } while (true); originLevel = int.Min(9, originLevel); - entry->Level += entry->Size >= levelSizeArray[originLevel] * 4 ? 1 : 0; + entry->Level += entry->Size >= _levelSizeArray[originLevel] * 4 ? 1 : 0; entry->Level &= 15; BucketNode* bucket = (BucketNode*)entry->Position; @@ -152,7 +171,9 @@ namespace StgSharp.HighPerformance.Memory /// Remove node from position linked list, this method does not recycle a BucketNode from /// size bucket /// - private void RemoveFromPositionChain(Entry* entry) + private void RemoveFromPositionChain( + Entry* entry + ) { Entry* prev = entry->PreviousNear; Entry* next = entry->NextNear; @@ -169,7 +190,11 @@ namespace StgSharp.HighPerformance.Memory } [MethodImpl(MethodImplOptions.AggressiveInlining)] - private static void SetEntryLevel(Entry* entry, nuint position, long size) + private static void SetEntryLevel( + Entry* entry, + nuint position, + long size + ) { entry ->Position = position; entry->Size = size; diff --git a/StgSharp.Common/HighPerformance/Memory/HLSFAllocator.cs b/StgSharp.Common/HighPerformance/Memory/HLSFAllocator.cs index a2991b7b..fe67ce53 100644 --- a/StgSharp.Common/HighPerformance/Memory/HLSFAllocator.cs +++ b/StgSharp.Common/HighPerformance/Memory/HLSFAllocator.cs @@ -1,4 +1,4 @@ -//----------------------------------------------------------------------- +//----------------------------------------------------------------------- // ----------------------------------------------------------------------- // file="HLSFAllocator" // Project: StgSharp @@ -37,55 +37,130 @@ namespace StgSharp.HighPerformance.Memory { // Bucket system field - directly in main allocator class - private readonly BucketNode*[] _bucketHeads; + private readonly BucketNode *[] _bucketHeads; // _spareMemory is also the beginning position of allocator - private Entry* _spareMemory; - private readonly byte* m_Buffer; + private Entry *_spareMemory; + private readonly byte *m_Buffer; private bool disposedValue; private readonly int _align; private readonly nuint _size; private readonly SlabAllocator _entries; + private readonly uint _maxSize; - public HybridLayerSegregatedFitAllocator(nuint byteSize) + public HybridLayerSegregatedFitAllocator( + nuint byteSize + ) { if (byteSize < 64) { throw new InvalidOperationException(); } _entries = SlabAllocator.Create(64, SlabBufferLayout.Chunked, false); _size = byteSize; - m_Buffer = (byte*)NativeMemory.AlignedAlloc(byteSize, 16); + m_Buffer = (byte *)NativeMemory.AlignedAlloc(byteSize, 16); _align = 16; - _bucketHeads = new BucketNode*[levelSizeArray.Length * 3 + 1]; + _bucketHeads = new BucketNode *[_levelSizeArray.Length * 3 + 1]; - _spareMemory = (Entry*)_entries.Allocate(); + _spareMemory = (Entry *)_entries.Allocate(); _spareMemory->State = EntryState.Spare; _spareMemory->PreviousNear = _spareMemory; _spareMemory->NextNear = _spareMemory; _spareMemory->Position = (nuint)m_Buffer; _spareMemory->Size = (long)byteSize; + + _maxSize = 32U * 1024U * 1024U; } - public HybridLayerSegregatedFitAllocator(nuint byteSize, int align) + public HybridLayerSegregatedFitAllocator( + nuint byteSize, + uint maxBlockSize + ) { - if (align < 16 || (align & (align - 1)) != 0) { - throw new ArgumentException( - "Alignment must be a power of two and at least 16 bytes."); - } _entries = SlabAllocator.Create(64, SlabBufferLayout.Chunked); - m_Buffer = (byte*)NativeMemory.AlignedAlloc(byteSize, (nuint)align); - _align = align; + m_Buffer = (byte *)NativeMemory.AlignedAlloc(byteSize, (nuint)16); + _align = 16; _size = byteSize; - _bucketHeads = new BucketNode*[levelSizeArray.Length * 3 + 1]; - - _spareMemory = (Entry*)_entries.Allocate(); + _spareMemory = (Entry *)_entries.Allocate(); _spareMemory->State = EntryState.Empty; _spareMemory->PreviousNear = _spareMemory; _spareMemory->NextNear = _spareMemory; _spareMemory->Position = (nuint)m_Buffer; _spareMemory->Size = (long)byteSize; + + int levelCountOrigin = _levelSizeArray.Length; + int levelCount = GetLevelFromSize(maxBlockSize) + 1; + Array.Resize(ref _levelSizeArray, levelCount); + _bucketHeads = new BucketNode *[levelCount * 3 + 1]; + int size = _levelSizeArray[^1]; + for (int i = levelCountOrigin; i < levelCount; i++) + { + size *= 4; + _levelSizeArray[i] = size; + } + _maxSize = maxBlockSize; + } + + public HybridLayerSegregatedFitAllocator( + nuint byteSize, + int align + ) + { + if (align < 16 || (align & (align - 1)) != 0) { + throw new ArgumentException( + "Alignment must be a power of two and at least 16 bytes."); + } + _entries = SlabAllocator.Create(64, SlabBufferLayout.Chunked); + m_Buffer = (byte *)NativeMemory.AlignedAlloc(byteSize, (nuint)align); + _align = align; + _size = byteSize; + + _bucketHeads = new BucketNode *[_levelSizeArray.Length * 3 + 1]; + + _spareMemory = (Entry *)_entries.Allocate(); + _spareMemory->State = EntryState.Empty; + _spareMemory->PreviousNear = _spareMemory; + _spareMemory->NextNear = _spareMemory; + _spareMemory->Position = (nuint)m_Buffer; + _spareMemory->Size = (long)byteSize; + + _maxSize = 32U * 1024U * 1024U; + } + + public HybridLayerSegregatedFitAllocator( + nuint byteSize, + int align, + uint maxBlockSize + ) + { + if (align < 16 || (align & (align - 1)) != 0) { + throw new ArgumentException( + "Alignment must be a power of two and at least 16 bytes."); + } + _entries = SlabAllocator.Create(64, SlabBufferLayout.Chunked); + m_Buffer = (byte *)NativeMemory.AlignedAlloc(byteSize, (nuint)align); + _align = align; + _size = byteSize; + + _spareMemory = (Entry *)_entries.Allocate(); + _spareMemory->State = EntryState.Empty; + _spareMemory->PreviousNear = _spareMemory; + _spareMemory->NextNear = _spareMemory; + _spareMemory->Position = (nuint)m_Buffer; + _spareMemory->Size = (long)byteSize; + + int levelCountOrigin = _levelSizeArray.Length; + int levelCount = GetLevelFromSize(maxBlockSize) + 1; + Array.Resize(ref _levelSizeArray, levelCount); + _bucketHeads = new BucketNode *[levelCount * 3 + 1]; + int size = _levelSizeArray[^1]; + for (int i = levelCountOrigin; i < levelCount; i++) + { + size *= 4; + _levelSizeArray[i] = size; + } + _maxSize = maxBlockSize; } public void Dispose() @@ -94,7 +169,9 @@ namespace StgSharp.HighPerformance.Memory GC.SuppressFinalize(this); } - protected virtual void Dispose(bool disposing) + protected virtual void Dispose( + bool disposing + ) { if (!disposedValue) { diff --git a/StgSharp.Native/sn-src/m.solve.x86.c b/StgSharp.Native/sn-src/m.solve.x86.c index e6ed05a5..c4f2f602 100644 --- a/StgSharp.Native/sn-src/m.solve.x86.c +++ b/StgSharp.Native/sn-src/m.solve.x86.c @@ -116,7 +116,7 @@ DECLARE_KER_PROC_RIGHT_ANS(float, sse, , quality) col2 = _mm_shuffle_ps(col2, col2, _MM_SHUFFLE(1, 0, 3, 2)); col3 = _mm_shuffle_ps(col3, col3, _MM_SHUFFLE(2, 1, 0, 3)); max = _mm_min_ps(col0, col2); - register max0 = _mm_min_ps(max, col1); + register __m128 max0 = _mm_min_ps(max, col1); max = _mm_min_ps(max0, max); float min_val = _mm_cvtss_f32(max); diff --git a/StgSharpDebug/MatrixTest.cs b/StgSharpDebug/MatrixTest.cs index 46b84f43..b1f0e14a 100644 --- a/StgSharpDebug/MatrixTest.cs +++ b/StgSharpDebug/MatrixTest.cs @@ -51,7 +51,7 @@ namespace StgSharp /**/ HybridLayerSegregatedFitAllocator hlsf; unchecked { - hlsf = new((nuint)(4 * (ulong)1024 * 1024 * 1024)); + hlsf = new((nuint)(4 * (ulong)1024 * 1024 * 1024), 32, 1024U * 1024U * 256U); } Matrix m = Matrix.Create(sideLength, sideLength, MatrixLayout.DenseRectangle, hlsf);