cuquantum 简介
1. 关于 cuquantum 概述
官方文档:
https://docs.nvidia.com/cuda/cuquantum/latest/appliance/overview.html#prerequisites
NVIDIA 的 cuQuantum 是一个专门用于量子计算的高性能库,旨在加速量子电路的模拟和量子算法的执行。cuQuantum 提供了一系列工具和功能,帮助研究人员和开发者在 NVIDIA GPU 上高效地进行量子计算。以下是关于 cuQuantum 的详细介绍:
1.1. 主要功能
量子电路模拟:cuQuantum 提供了高效的量子电路模拟器,能够模拟大规模的量子电路。它支持多种量子计算模型,包括量子门模型和量子态模型。
高性能计算:利用 NVIDIA GPU 的并行计算能力,cuQuantum 可以显著加速量子电路的模拟过程,特别是在处理复杂的量子态和大规模量子系统时。
灵活性:cuQuantum 设计为与其他量子计算框架(如 Qiskit、Cirq 等)兼容,允许用户在不同的量子计算环境中使用 cuQuantum 的功能。
1.2. 组件
cuQuantum 包含多个组件,主要包括:
cuStateVec:用于模拟量子态的库,支持高效的量子态向量操作和量子门应用。
cuTensorNetwork:用于处理张量网络的库,适用于模拟量子系统的复杂性,特别是在量子多体系统的研究中。
cuQuantum SDK:提供了一整套 API 和工具,帮助开发者构建和优化量子算法。
1.3. 应用场景
cuQuantum 可以应用于多个领域,包括:
量子算法开发:研究人员可以使用 cuQuantum 来开发和测试新的量子算法,评估其性能和效率。
量子模拟:在量子物理、化学和材料科学等领域,cuQuantum 可以用于模拟量子系统的行为,帮助理解复杂的量子现象。
量子计算教育:cuQuantum 也可以作为教育工具,帮助学生和研究人员学习量子计算的基本原理和应用。
2,docker 运行 cuquantum
2.1 下载 docker image
x86_64 平台
$ sudo docker pull nvcr.io/nvidia/cuquantum-appliance:24.03-x86_64
2.2 创建 容器
创建一个可以使用全部gpu 的容器:
$ sudo docker run --gpus all -it --rm nvcr.io/nvidia/cuquantum-appliance:24.03-x86_64
创建一个仅仅使用0到3的gpu:
$ sudo docker run --gpus '"device=0,3"' -it --rm nvcr.io/nvidia/cuquantum-appliance:24.03-x86_64
带文件夹映射:
$ sudo docker run --gpus all --name cuquantum_docker_dir_01 -it -v /home/hipper/ex_cuquantum/tmp1_docker:/home/cuquantum/tmp1_docker --rm nvcr.io/nvidia/cuquantum-appliance:24.03-x86_64
2.3 运行并解释示例
3,分析一下examples
用 nvprof 看一下 调用了哪些 cuda kernel:
$ nvprof python ./qiskit_ghz.py --nbits 16
cuquantum@be5c9947460c:~/examples$ nvprof python ./qiskit_ghz.py --nbits 16
==2331== NVPROF is profiling process 2331, command: python ./qiskit_ghz.py --nbits 16
==2371== Warning: Child processes are not profiled. Use option --profile-child-processes to profile them.precision: single
{'1111111111111111': 518, '0000000000000000': 506}
backend: cusvaer_simulator_statevector
==2331== Profiling application: python ./qiskit_ghz.py --nbits 16
==2331== Profiling result:Type Time(%) Time Calls Avg Min Max NameGPU activities: 39.15% 53.473us 1 53.473us 53.473us 53.473us custatevec::_GLOBAL__N__2d201eb2_15_naiveSampler_cu_a2447900::intervalCumulativeSumKernel(double*, int)22.28% 30.432us 1 30.432us 30.432us 30.432us void cub::DeviceRadixSortSingleTileKernel<cub::DeviceRadixSortPolicy<double, int, unsigned int>::Policy800, bool=0, double, int, unsigned int>(unsigned int const *, cub::DeviceRadixSortSingleTileKernel<cub::DeviceRadixSortPolicy<double, int, unsigned int>::Policy800, bool=0, double, int, unsigned int>*, cub::DeviceRadixSortPolicy<double, int, unsigned int>::Policy800 const *, cub::DeviceRadixSortSingleTileKernel<cub::DeviceRadixSortPolicy<double, int, unsigned int>::Policy800, bool=0, double, int, unsigned int>**, bool=0, int, int)9.11% 12.449us 3 4.1490us 4.1280us 4.1930us void custatevec::constMatApplKernel_cc70<int=64, int=1, custatevec::CsComplex<float>, int=4, custatevec::EmptyBitInserter<int=4>>(float*, custatevec::HostMatrixArgument<custatevec::constMatApplKernel_cc70<int=64, int=1, custatevec::CsComplex<float>, int=4, custatevec::EmptyBitInserter<int=4>>, custatevec::CsComplex<float>>, int=4, custatevec::TargetBitArray<custatevec::CsComplex<float>>)7.17% 9.7920us 2 4.8960us 4.8640us 4.9280us void custatevec::constMatApplKernel_cc70_Relocate<int=64, custatevec::CsComplex<float>, int=4, custatevec::EmptyBitInserter<int=4>, int=9>(float*, custatevec::HostMatrixArgument<custatevec::constMatApplKernel_cc70_Relocate<int=64, custatevec::CsComplex<float>, int=4, custatevec::EmptyBitInserter<int=4>, int=9>, custatevec::CsComplex<float>>, int=4, custatevec::TargetBitArray<custatevec::CsComplex<float>>, custatevec::TargetRelocator<int=4, custatevec::CsComplex<float>>)5.06% 6.9120us 1 6.9120us 6.9120us 6.9120us custatevec::_GLOBAL__N__2d201eb2_15_naiveSampler_cu_a2447900::sampleKernel(double const *, unsigned int, long, double, double const *, double const *, long, custatevec::BitPermutation<int=56> const &, long*)4.76% 6.4960us 1 6.4960us 6.4960us 6.4960us _ZN10custatevec48_GLOBAL__N__2d201eb2_15_naiveSampler_cu_a244790028blockwiseCumulativeSumKernelIZNS0_26calculateCumulativeAbs2SumINS_9CsComplexIfEEEEvPKT_iRNS_18WorkspaceAllocatorEP11CUstream_stPdEUllE_EEvS5_lSC_2.62% 3.5840us 2 1.7920us 1.7600us 1.8240us [CUDA memcpy HtoD]1.83% 2.4960us 1 2.4960us 2.4960us 2.4960us void _GLOBAL__N__1d82f122_17_subStateVector_cu_ed18732a::setZeroStateKernel<custatevec::CsComplex<float>>(float*, long)1.76% 2.4000us 1 2.4000us 2.4000us 2.4000us custatevec::_GLOBAL__N__2d201eb2_15_naiveSampler_cu_a2447900::applyPrevCumsumKernel(double*, long)1.73% 2.3680us 1 2.3680us 2.3680us 2.3680us void _GLOBAL__N__1d82f122_17_subStateVector_cu_ed18732a::elementWiseKernel<custatevec::CsComplex<float>, _GLOBAL__N__1d82f122_17_subStateVector_cu_ed18732a::ApplyGlobalPhaseFunc>(float*, long, custatevec<_GLOBAL__N__1d82f122_17_subStateVector_cu_ed18732a::elementWiseKernel<custatevec::CsComplex<float>, _GLOBAL__N__1d82f122_17_subStateVector_cu_ed18732a::ApplyGlobalPhaseFunc>>::CsComplex<float>)1.31% 1.7920us 1 1.7920us 1.7920us 1.7920us [CUDA memcpy DtoH]1.24% 1.6960us 1 1.6960us 1.6960us 1.6960us _ZN10custatevec15transformKernelIZNS_7Sampler20revertToRandnumOrderEPKlPKiiP11CUstream_stPlEUllE_EEvT_ll1.03% 1.4080us 1 1.4080us 1.4080us 1.4080us [CUDA memcpy DtoD]0.94% 1.2810us 1 1.2810us 1.2810us 1.2810us _ZN10custatevec15transformKernelIZNS_7Sampler6sampleER17custatevecContextPlRKNS_17ConstPointerArrayIiEEPKdj25custatevecSamplerOutput_tEUllE_EEvT_llAPI calls: 85.96% 113.99ms 14 8.1423ms 1.1020us 95.611ms cudaFree7.46% 9.8872ms 6 1.6479ms 920ns 9.8756ms cudaMallocAsync2.25% 2.9832ms 14 213.08us 5.6500us 1.6952ms cudaLaunchKernel1.22% 1.6129ms 1169 1.3790us 136ns 95.703us cuDeviceGetAttribute1.15% 1.5256ms 1 1.5256ms 1.5256ms 1.5256ms cudaFuncGetAttributes0.48% 639.60us 9 71.066us 4.3110us 168.95us cudaMalloc0.42% 561.17us 1 561.17us 561.17us 561.17us cudaGetSymbolAddress0.33% 440.17us 1546 284ns 147ns 4.0030us cuGetProcAddress0.23% 303.23us 2 151.62us 131.73us 171.50us cudaGetDeviceProperties0.10% 135.87us 2 67.934us 3.9910us 131.88us cudaStreamSynchronize0.07% 91.601us 12 7.6330us 963ns 70.503us cudaSetDevice0.06% 79.063us 10 7.9060us 3.8030us 14.732us cuDeviceGetName0.05% 68.091us 4 17.022us 8.4410us 28.861us cudaMemcpyAsync0.03% 45.182us 10 4.5180us 1.2030us 19.282us cudaDeviceSynchronize0.03% 39.552us 38 1.0400us 480ns 13.937us cudaEventCreateWithFlags0.03% 33.551us 38 882ns 395ns 5.2870us cudaEventDestroy0.02% 27.488us 15 1.8320us 312ns 9.1020us cudaGetDevice0.02% 27.099us 6 4.5160us 786ns 21.412us cudaFreeAsync0.02% 23.308us 17 1.3710us 571ns 4.8130us cudaPointerGetAttributes0.01% 15.184us 1 15.184us 15.184us 15.184us cudaStreamDestroy0.01% 14.544us 1 14.544us 14.544us 14.544us cudaStreamCreate0.01% 11.311us 2 5.6550us 2.0680us 9.2430us cuDeviceGetPCIBusId0.01% 9.4620us 9 1.0510us 257ns 5.3700us cudaGetDeviceCount0.01% 9.0560us 16 566ns 315ns 1.9580us cudaDeviceGetAttribute0.01% 8.9320us 4 2.2330us 1.4670us 2.6370us cuInit0.01% 6.9670us 35 199ns 133ns 703ns cudaGetLastError0.00% 4.2820us 17 251ns 150ns 824ns cuDeviceGet0.00% 3.3340us 10 333ns 229ns 601ns cuDeviceTotalMem0.00% 2.8110us 9 312ns 193ns 843ns cuDeviceGetCount0.00% 2.7800us 2 1.3900us 203ns 2.5770us cuCtxGetCurrent0.00% 2.1550us 10 215ns 169ns 248ns cuDeviceGetUuid0.00% 1.2690us 5 253ns 223ns 305ns cuModuleGetLoadingMode0.00% 1.1090us 4 277ns 157ns 385ns cuCtxGetDevice0.00% 869ns 4 217ns 181ns 257ns cuDriverGetVersion0.00% 448ns 2 224ns 157ns 291ns cudaPeekAtLastError
$ nvprof python ./ghz.py
cuquantum@be5c9947460c:~/examples$ nvprof python ./ghz.py
==2389== NVPROF is profiling process 2389, command: python ./ghz.py
q(0),q(1),q(2)=101, 101, 101
==2389== Profiling application: python ./ghz.py
==2389== Profiling result:Type Time(%) Time Calls Avg Min Max NameGPU activities: 50.03% 29.341us 1 29.341us 29.341us 29.341us void cub::DeviceRadixSortSingleTileKernel<cub::DeviceRadixSortPolicy<double, int, unsigned int>::Policy800, bool=0, double, int, unsigned int>(unsigned int const *, cub::DeviceRadixSortSingleTileKernel<cub::DeviceRadixSortPolicy<double, int, unsigned int>::Policy800, bool=0, double, int, unsigned int>*, cub::DeviceRadixSortPolicy<double, int, unsigned int>::Policy800 const *, cub::DeviceRadixSortSingleTileKernel<cub::DeviceRadixSortPolicy<double, int, unsigned int>::Policy800, bool=0, double, int, unsigned int>**, bool=0, int, int)10.75% 6.3040us 5 1.2600us 1.0560us 1.7280us [CUDA memcpy HtoD]8.84% 5.1830us 1 5.1830us 5.1830us 5.1830us _ZN10custatevec48_GLOBAL__N__2d201eb2_15_naiveSampler_cu_a244790028blockwiseCumulativeSumKernelIZNS0_26calculateCumulativeAbs2SumINS_9CsComplexIfEEEEvPKT_iRNS_18WorkspaceAllocatorEP11CUstream_stPdEUllE_EEvS5_lSC_7.31% 4.2880us 2 2.1440us 1.9840us 2.3040us void custatevec::constMatApplKernel<int=64, custatevec::CsComplex<float>, int=2, custatevec::EmptyBitInserter<int=2>>(float*, long, custatevec::HostMatrixArgument<custatevec::constMatApplKernel<int=64, custatevec::CsComplex<float>, int=2, custatevec::EmptyBitInserter<int=2>>, custatevec::CsComplex<float>>, int=2, custatevec::TargetBitArray<custatevec::CsComplex<float>>)6.49% 3.8080us 1 3.8080us 3.8080us 3.8080us void cub::DeviceRadixSortSingleTileKernel<cub::DeviceRadixSortPolicy<long, cub::NullType, unsigned int>::Policy800, bool=0, long, cub::NullType, unsigned int>(unsigned int const *, cub::DeviceRadixSortSingleTileKernel<cub::DeviceRadixSortPolicy<long, cub::NullType, unsigned int>::Policy800, bool=0, long, cub::NullType, unsigned int>*, cub::DeviceRadixSortPolicy<long, cub::NullType, unsigned int>::Policy800 const *, cub::DeviceRadixSortSingleTileKernel<cub::DeviceRadixSortPolicy<long, cub::NullType, unsigned int>::Policy800, bool=0, long, cub::NullType, unsigned int>**, bool=0, int, int)5.29% 3.1040us 2 1.5520us 1.3760us 1.7280us [CUDA memcpy DtoH]4.64% 2.7200us 1 2.7200us 2.7200us 2.7200us custatevec::_GLOBAL__N__2d201eb2_15_naiveSampler_cu_a2447900::sampleKernel(double const *, unsigned int, long, double, double const *, double const *, long, custatevec::BitPermutation<int=56> const &, long*)2.40% 1.4070us 1 1.4070us 1.4070us 1.4070us [CUDA memcpy DtoD]2.18% 1.2800us 1 1.2800us 1.2800us 1.2800us [CUDA memset]2.07% 1.2150us 1 1.2150us 1.2150us 1.2150us _ZN10custatevec15transformKernelIZNS_7Sampler6sampleER17custatevecContextPlRKNS_17ConstPointerArrayIiEEPKdj25custatevecSamplerOutput_tEUllE_EEvT_llAPI calls: 78.70% 77.993ms 24 3.2497ms 365ns 77.952ms cudaSetDevice15.01% 14.870ms 9 1.6522ms 3.7330us 11.715ms cudaFree3.35% 3.3208ms 7 474.40us 6.1400us 1.8814ms cudaLaunchKernel1.01% 1.0033ms 894 1.1220us 106ns 69.024us cuDeviceGetAttribute0.60% 591.70us 1 591.70us 591.70us 591.70us cudaFuncGetAttributes0.30% 294.50us 1156 254ns 117ns 28.017us cuGetProcAddress0.24% 241.16us 2 120.58us 118.86us 122.30us cudaGetDeviceProperties0.23% 227.60us 6 37.933us 2.9740us 78.188us cudaMalloc0.21% 210.56us 1 210.56us 210.56us 210.56us cudaGetSymbolAddress0.08% 76.766us 6 12.794us 7.0950us 14.465us cudaMemcpyAsync0.05% 47.590us 8 5.9480us 2.7780us 11.755us cuDeviceGetName0.04% 40.766us 22 1.8530us 231ns 10.119us cudaGetDevice0.03% 26.450us 19 1.3920us 360ns 13.476us cudaEventCreateWithFlags0.02% 19.417us 2 9.7080us 5.0390us 14.378us cudaMemcpy0.01% 14.769us 1 14.769us 14.769us 14.769us cudaMemset0.01% 14.649us 9 1.6270us 466ns 4.7300us cudaPointerGetAttributes0.01% 13.839us 2 6.9190us 2.6740us 11.165us cudaStreamSynchronize0.01% 13.305us 2 6.6520us 2.0260us 11.279us cudaStreamCreate0.01% 13.086us 20 654ns 394ns 2.6680us cudaEventDestroy0.01% 12.275us 2 6.1370us 2.5440us 9.7310us cudaStreamDestroy0.01% 10.659us 39 273ns 100ns 4.9440us cudaGetLastError0.01% 9.8780us 4 2.4690us 1.0810us 4.5180us cudaDeviceSynchronize0.01% 8.6500us 2 4.3250us 1.8390us 6.8110us cuDeviceGetPCIBusId0.01% 5.9160us 16 369ns 232ns 1.3640us cudaDeviceGetAttribute0.00% 4.7430us 3 1.5810us 1.0890us 2.4190us cuInit0.00% 4.1090us 8 513ns 208ns 914ns cuDeviceTotalMem0.00% 2.2900us 10 229ns 113ns 465ns cuDeviceGet0.00% 1.9400us 8 242ns 136ns 799ns cuDeviceGetUuid0.00% 1.5700us 1 1.5700us 1.5700us 1.5700us cudaEventCreate0.00% 1.3290us 6 221ns 149ns 481ns cuDeviceGetCount0.00% 1.1760us 4 294ns 175ns 601ns cudaPeekAtLastError0.00% 821ns 4 205ns 173ns 241ns cuModuleGetLoadingMode0.00% 506ns 2 253ns 232ns 274ns cudaGetDeviceCount0.00% 495ns 3 165ns 158ns 169ns cuDriverGetVersion
(cuquantum-24.03) cuquantum@be5c9947460c:~/examples$
$ nvprof python ./hidden_shift.py
(cuquantum-24.03) cuquantum@be5c9947460c:~/examples$ nvprof python ./hidden_shift.py
==2475== NVPROF is profiling process 2475, command: python ./hidden_shift.py
Secret shift sequence: [1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1]
Circuit:
(0, 0): ────H───X───@───X───H───@───H───M('result')───│ │ │
(1, 0): ────H───────@───H───────@───H───M─────────────│
(2, 0): ────H───X───@───X───H───@───H───M─────────────│ │ │
(3, 0): ────H───────@───H───────@───H───M─────────────│
(4, 0): ────H───────@───H───────@───H───M─────────────│ │ │
(5, 0): ────H───X───@───X───H───@───H───M─────────────│
(6, 0): ────H───X───@───X───H───@───H───M─────────────│ │ │
(7, 0): ────H───────@───H───────@───H───M─────────────│
(8, 0): ────H───────@───H───────@───H───M─────────────│ │ │
(9, 0): ────H───X───@───X───H───@───H───M─────────────│
(10, 0): ───H───X───@───X───H───@───H───M─────────────│ │ │
(11, 0): ───H───X───@───X───H───@───H───M─────────────
Sampled results:
Counter({'101001100111': 100})
Most common bitstring: 101001100111
Found a match: True
==2475== Profiling application: python ./hidden_shift.py
==2475== Profiling result:Type Time(%) Time Calls Avg Min Max NameGPU activities: 41.65% 53.403us 1 53.403us 53.403us 53.403us custatevec::_GLOBAL__N__2d201eb2_15_naiveSampler_cu_a2447900::intervalCumulativeSumKernel(double*, int)22.96% 29.437us 1 29.437us 29.437us 29.437us void cub::DeviceRadixSortSingleTileKernel<cub::DeviceRadixSortPolicy<double, int, unsigned int>::Policy800, bool=0, double, int, unsigned int>(unsigned int const *, cub::DeviceRadixSortSingleTileKernel<cub::DeviceRadixSortPolicy<double, int, unsigned int>::Policy800, bool=0, double, int, unsigned int>*, cub::DeviceRadixSortPolicy<double, int, unsigned int>::Policy800 const *, cub::DeviceRadixSortSingleTileKernel<cub::DeviceRadixSortPolicy<double, int, unsigned int>::Policy800, bool=0, double, int, unsigned int>**, bool=0, int, int)5.29% 6.7830us 5 1.3560us 1.0560us 1.8230us [CUDA memcpy HtoD]4.99% 6.3990us 3 2.1330us 1.9200us 2.3350us void custatevec::constMatApplKernel_Relocate<int=64, custatevec::CsComplex<float>, int=2, custatevec::EmptyBitInserter<int=2>, int=8>(float*, custatevec::HostMatrixArgument<custatevec::constMatApplKernel_Relocate<int=64, custatevec::CsComplex<float>, int=2, custatevec::EmptyBitInserter<int=2>, int=8>, custatevec::CsComplex<float>>, int=2, custatevec::TargetBitArray<custatevec::CsComplex<float>>, custatevec::TargetRelocator<int=2, custatevec::CsComplex<float>>)4.72% 6.0480us 1 6.0480us 6.0480us 6.0480us void cub::DeviceRadixSortSingleTileKernel<cub::DeviceRadixSortPolicy<long, cub::NullType, unsigned int>::Policy800, bool=0, long, cub::NullType, unsigned int>(unsigned int const *, cub::DeviceRadixSortSingleTileKernel<cub::DeviceRadixSortPolicy<long, cub::NullType, unsigned int>::Policy800, bool=0, long, cub::NullType, unsigned int>*, cub::DeviceRadixSortPolicy<long, cub::NullType, unsigned int>::Policy800 const *, cub::DeviceRadixSortSingleTileKernel<cub::DeviceRadixSortPolicy<long, cub::NullType, unsigned int>::Policy800, bool=0, long, cub::NullType, unsigned int>**, bool=0, int, int)4.34% 5.5670us 1 5.5670us 5.5670us 5.5670us custatevec::_GLOBAL__N__2d201eb2_15_naiveSampler_cu_a2447900::sampleKernel(double const *, unsigned int, long, double, double const *, double const *, long, custatevec::BitPermutation<int=56> const &, long*)4.24% 5.4390us 1 5.4390us 5.4390us 5.4390us _ZN10custatevec48_GLOBAL__N__2d201eb2_15_naiveSampler_cu_a244790028blockwiseCumulativeSumKernelIZNS0_26calculateCumulativeAbs2SumINS_9CsComplexIfEEEEvPKT_iRNS_18WorkspaceAllocatorEP11CUstream_stPdEUllE_EEvS5_lSC_4.24% 5.4390us 3 1.8130us 1.7920us 1.8240us void custatevec::constMatApplLoopKernel<int=64, int=1, custatevec::CsComplex<float>, int=2, custatevec::EmptyBitInserter<int=2>>(float*, custatevec::HostMatrixArgument<custatevec::constMatApplLoopKernel<int=64, int=1, custatevec::CsComplex<float>, int=2, custatevec::EmptyBitInserter<int=2>>, custatevec::CsComplex<float>>, int=2, custatevec::TargetBitArray<custatevec::CsComplex<float>>)2.47% 3.1680us 2 1.5840us 1.4080us 1.7600us [CUDA memcpy DtoH]1.67% 2.1440us 1 2.1440us 2.1440us 2.1440us [CUDA memset]1.35% 1.7280us 1 1.7280us 1.7280us 1.7280us custatevec::_GLOBAL__N__2d201eb2_15_naiveSampler_cu_a2447900::applyPrevCumsumKernel(double*, long)1.10% 1.4080us 1 1.4080us 1.4080us 1.4080us [CUDA memcpy DtoD]0.97% 1.2480us 1 1.2480us 1.2480us 1.2480us _ZN10custatevec15transformKernelIZNS_7Sampler6sampleER17custatevecContextPlRKNS_17ConstPointerArrayIiEEPKdj25custatevecSamplerOutput_tEUllE_EEvT_llAPI calls: 78.80% 76.443ms 28 2.7301ms 351ns 76.390ms cudaSetDevice15.29% 14.828ms 9 1.6476ms 3.0460us 11.683ms cudaFree1.93% 1.8769ms 1 1.8769ms 1.8769ms 1.8769ms cudaFuncGetAttributes1.51% 1.4641ms 13 112.62us 4.0570us 1.0059ms cudaLaunchKernel1.05% 1.0185ms 894 1.1390us 107ns 60.991us cuDeviceGetAttribute0.27% 262.48us 1156 227ns 115ns 1.5530us cuGetProcAddress0.24% 232.01us 2 116.01us 113.30us 118.71us cudaGetDeviceProperties0.24% 230.85us 6 38.475us 2.9520us 81.170us cudaMalloc0.21% 206.58us 1 206.58us 206.58us 206.58us cudaGetSymbolAddress0.15% 145.30us 6 24.216us 7.0990us 46.920us cudaMemcpyAsync0.05% 45.538us 8 5.6920us 2.8540us 11.606us cuDeviceGetName0.04% 39.664us 22 1.8020us 238ns 11.700us cudaGetDevice0.03% 32.140us 1 32.140us 32.140us 32.140us cudaMemset0.03% 26.795us 21 1.2750us 357ns 9.1970us cudaPointerGetAttributes0.02% 21.216us 19 1.1160us 371ns 10.852us cudaEventCreateWithFlags0.02% 20.466us 2 10.233us 5.4000us 15.066us cudaMemcpy0.02% 20.445us 39 524ns 102ns 11.355us cudaGetLastError0.02% 15.262us 20 763ns 410ns 3.5490us cudaEventDestroy0.01% 13.969us 2 6.9840us 3.2660us 10.703us cudaStreamDestroy0.01% 13.245us 2 6.6220us 1.9790us 11.266us cudaStreamCreate0.01% 10.542us 2 5.2710us 2.5070us 8.0350us cudaStreamSynchronize0.01% 9.0670us 4 2.2660us 1.1500us 3.9240us cudaDeviceSynchronize0.01% 7.4570us 2 3.7280us 1.3670us 6.0900us cuDeviceGetPCIBusId0.01% 5.9220us 16 370ns 265ns 1.2850us cudaDeviceGetAttribute0.00% 4.3070us 3 1.4350us 1.0770us 1.9440us cuInit0.00% 2.5300us 10 253ns 104ns 1.0290us cuDeviceGet0.00% 2.0550us 8 256ns 147ns 416ns cuDeviceTotalMem0.00% 1.8860us 4 471ns 372ns 683ns cudaPeekAtLastError0.00% 1.6140us 1 1.6140us 1.6140us 1.6140us cudaEventCreate0.00% 1.5720us 6 262ns 153ns 689ns cuDeviceGetCount0.00% 1.4170us 8 177ns 133ns 259ns cuDeviceGetUuid0.00% 1.0910us 2 545ns 332ns 759ns cudaGetDeviceCount0.00% 774ns 4 193ns 137ns 248ns cuModuleGetLoadingMode0.00% 468ns 3 156ns 150ns 163ns cuDriverGetVersion
(cuquantum-24.03) cuquantum@be5c9947460c:~/examples$
$ nvprof python ./simon.py
(cuquantum-24.03) cuquantum@be5c9947460c:~/examples$ nvprof python ./simon.py
==2559== NVPROF is profiling process 2559, command: python ./simon.py
Secret string = [0 1 0]
Circuit:┌───┐ ┌──┐
(0, 0): ───H────@───────H─────────M('result')───│ │
(1, 0): ───H────┼@──────@─────H───M─────────────││ │ │
(2, 0): ───H────┼┼@─────┼H────────M─────────────│││ │
(3, 0): ────────X┼┼─────┼×──────────────────────││ ││
(4, 0): ─────────X┼─────X┼──────────────────────│ │
(5, 0): ──────────X──────×──────────────────────└───┘ └──┘
Most common answer was : ('[0 1 0]', 100)
==2559== Profiling application: python ./simon.py
==2559== Profiling result:Type Time(%) Time Calls Avg Min Max NameGPU activities: 46.93% 7.9627ms 276 28.850us 28.606us 29.470us void cub::DeviceRadixSortSingleTileKernel<cub::DeviceRadixSortPolicy<double, int, unsigned int>::Policy800, bool=0, double, int, unsigned int>(unsigned int const *, cub::DeviceRadixSortSingleTileKernel<cub::DeviceRadixSortPolicy<double, int, unsigned int>::Policy800, bool=0, double, int, unsigned int>*, cub::DeviceRadixSortPolicy<double, int, unsigned int>::Policy800 const *, cub::DeviceRadixSortSingleTileKernel<cub::DeviceRadixSortPolicy<double, int, unsigned int>::Policy800, bool=0, double, int, unsigned int>**, bool=0, int, int)12.35% 2.0960ms 1104 1.8980us 1.6640us 2.3350us void custatevec::constMatApplKernel<int=64, custatevec::CsComplex<float>, int=2, custatevec::EmptyBitInserter<int=2>>(float*, long, custatevec::HostMatrixArgument<custatevec::constMatApplKernel<int=64, custatevec::CsComplex<float>, int=2, custatevec::EmptyBitInserter<int=2>>, custatevec::CsComplex<float>>, int=2, custatevec::TargetBitArray<custatevec::CsComplex<float>>)10.28% 1.7437ms 1380 1.2630us 1.0230us 2.0800us [CUDA memcpy HtoD]8.32% 1.4108ms 276 5.1110us 5.0550us 5.2470us _ZN10custatevec48_GLOBAL__N__2d201eb2_15_naiveSampler_cu_a244790028blockwiseCumulativeSumKernelIZNS0_26calculateCumulativeAbs2SumINS_9CsComplexIfEEEEvPKT_iRNS_18WorkspaceAllocatorEP11CUstream_stPdEUllE_EEvS5_lSC_6.07% 1.0299ms 276 3.7310us 3.6790us 3.8400us void cub::DeviceRadixSortSingleTileKernel<cub::DeviceRadixSortPolicy<long, cub::NullType, unsigned int>::Policy800, bool=0, long, cub::NullType, unsigned int>(unsigned int const *, cub::DeviceRadixSortSingleTileKernel<cub::DeviceRadixSortPolicy<long, cub::NullType, unsigned int>::Policy800, bool=0, long, cub::NullType, unsigned int>*, cub::DeviceRadixSortPolicy<long, cub::NullType, unsigned int>::Policy800 const *, cub::DeviceRadixSortSingleTileKernel<cub::DeviceRadixSortPolicy<long, cub::NullType, unsigned int>::Policy800, bool=0, long, cub::NullType, unsigned int>**, bool=0, int, int)5.35% 907.08us 276 3.2860us 3.2310us 3.5200us custatevec::_GLOBAL__N__2d201eb2_15_naiveSampler_cu_a2447900::sampleKernel(double const *, unsigned int, long, double, double const *, double const *, long, custatevec::BitPermutation<int=56> const &, long*)4.16% 705.46us 552 1.2780us 1.1510us 1.6950us [CUDA memcpy DtoH]2.30% 390.33us 276 1.4140us 1.2800us 1.5350us [CUDA memset]2.24% 380.11us 276 1.3770us 1.3430us 1.4400us [CUDA memcpy DtoD]2.00% 340.07us 276 1.2320us 1.1830us 1.2810us _ZN10custatevec15transformKernelIZNS_7Sampler6sampleER17custatevecContextPlRKNS_17ConstPointerArrayIiEEPKdj25custatevecSamplerOutput_tEUllE_EEvT_llAPI calls: 23.28% 86.005ms 6626 12.979us 356ns 77.873ms cudaSetDevice18.26% 67.458ms 2209 30.537us 617ns 11.727ms cudaFree17.00% 62.811ms 1656 37.929us 2.8550us 94.336us cudaMalloc16.76% 61.944ms 552 112.22us 102.57us 133.54us cudaGetDeviceProperties8.29% 30.642ms 2484 12.335us 3.6740us 1.8943ms cudaLaunchKernel7.55% 27.890ms 1656 16.841us 4.7660us 416.00us cudaMemcpyAsync1.07% 3.9504ms 552 7.1560us 5.0270us 17.266us cudaMemcpy1.03% 3.7977ms 9939 382ns 100ns 490.27us cudaGetLastError1.01% 3.7487ms 4140 905ns 331ns 24.341us cudaPointerGetAttributes0.99% 3.6644ms 4972 737ns 231ns 12.264us cudaGetDevice0.74% 2.7287ms 5520 494ns 310ns 76.789us cudaEventDestroy0.72% 2.6553ms 5244 506ns 346ns 12.715us cudaEventCreateWithFlags0.62% 2.2923ms 552 4.1520us 1.4640us 37.640us cudaStreamCreate0.52% 1.9392ms 276 7.0260us 6.2760us 20.021us cudaMemset0.51% 1.8667ms 552 3.3810us 1.6160us 14.254us cudaStreamDestroy0.42% 1.5343ms 1104 1.3890us 814ns 10.198us cudaDeviceSynchronize0.34% 1.2702ms 552 2.3010us 1.5970us 11.166us cudaStreamSynchronize0.27% 1.0103ms 894 1.1300us 106ns 61.499us cuDeviceGetAttribute0.27% 1.0098ms 1 1.0098ms 1.0098ms 1.0098ms cudaFuncGetAttributes0.10% 386.38us 1104 349ns 105ns 766ns cudaPeekAtLastError0.09% 346.86us 276 1.2560us 1.0510us 6.8000us cudaEventCreate0.07% 266.56us 1156 230ns 115ns 1.3930us cuGetProcAddress0.06% 204.05us 1 204.05us 204.05us 204.05us cudaGetSymbolAddress0.01% 46.269us 8 5.7830us 2.7020us 11.757us cuDeviceGetName0.00% 7.5370us 2 3.7680us 1.4460us 6.0910us cuDeviceGetPCIBusId0.00% 5.6830us 3 1.8940us 1.1150us 2.3370us cuInit0.00% 5.3210us 16 332ns 239ns 971ns cudaDeviceGetAttribute0.00% 2.9670us 6 494ns 179ns 1.7530us cuDeviceGetCount0.00% 2.4640us 8 308ns 161ns 608ns cuDeviceTotalMem0.00% 1.7730us 10 177ns 104ns 440ns cuDeviceGet0.00% 1.3460us 8 168ns 127ns 217ns cuDeviceGetUuid0.00% 1.2010us 2 600ns 400ns 801ns cudaGetDeviceCount0.00% 942ns 4 235ns 161ns 367ns cuModuleGetLoadingMode0.00% 474ns 3 158ns 148ns 169ns cuDriverGetVersion
(cuquantum-24.03) cuquantum@be5c9947460c:~/examples$
4, 官方cu语言调用 cuquantum 示例
将源代码下载到映射进 docker container 中的文件夹里,
下载示例源代码:
$ git clone https://github.com/NVIDIA/cuQuantum.git
示例代码位置:
$ tree
相关文章:
cuquantum 简介
1. 关于 cuquantum 概述 官方文档: https://docs.nvidia.com/cuda/cuquantum/latest/appliance/overview.html#prerequisites NVIDIA 的 cuQuantum 是一个专门用于量子计算的高性能库,旨在加速量子电路的模拟和量子算法的执行。cuQuantum 提供了一系列…...
小程序如何引入腾讯位置服务
小程序如何引入腾讯位置服务 1.添加服务 登录 微信公众平台 注意:小程序要企业版的 第三方服务 -> 服务 -> 开发者资源 -> 开通腾讯位置服务 在设置 -> 第三方设置 中可以看到开通的服务,如果没有就在插件管理中添加插件 2.腾讯位置服务…...
【react】使用antd Table渲染数据遇到的报错问题
记录自己在开发过程中遇到的报错问题: 目录 原本写法:错误分析:解决方案: 原本写法: render: (text) > {console.log(text, "111111text");console.log(typeof text, "111111text");return t…...
55_OpenResty开发入门
Nginx编程需要用到Lua语言,因此我们必须先学习Lua的基本语法。Nginx本身也是C语言开发,因此也允许基于Lua做拓展。多级缓存的实现离不开Nginx编程,而Nginx编程又离不开OpenResty。 1.OpenResty概述 OpenResty是一款基于NGINX和LuaJIT的Web平台。通过Lua扩展NGINX实现的可伸…...
(即插即用模块-Attention部分) 四十四、(ICIP 2022) HWA 半小波注意力
文章目录 1、Half Wavelet Attention2、代码实现 paper:HALFWAVELET ATTENTION ON M-NET FOR LOW-LIGHT IMAGE ENHANCEMENT Code:https://github.com/FanChiMao/HWMNet 1、Half Wavelet Attention 传统的图像增强方法主要关注图像在空间域的特征信息&am…...
链家房价数据爬虫和机器学习数据可视化预测
完整源码项目包获取→点击文章末尾名片!...
全网首发:编译libssh,产生类似undefined reference to `EVP_aes_256_ctr@OPENSSL_1_1_0‘的大量错误
具体错误 前面和后面的: /opt/linux/x86-arm/aarch64-mix210-linux/host_bin/../lib/gcc/aarch64-linux-gnu/7.3.0/../../../../aarch64-linux-gnu/bin/ld: warning: libcrypto.so.1.1, needed by ../lib/libssh.so.4.10.1, not found (try using -rpath or -rpat…...
springboot 集成javaFx 两个面板之间如何进行跳转
1.创建两个面板 可参考博主的 java8 springboot 集成javaFx 实现一个客户端程序 文章来实现 2.完善代码 以下是博主创建的两个模板 博主在这里实现的是登录跳转功能,注意:这里登录按钮的触发实现方式做了以下小小的改动,也可根据自己的习惯来处理 相较第一篇文章,博主在Lo…...
vue-cli项目配置使用unocss
在了解使用了Unocss后,就完全被它迷住了。接手过的所有项目都配置使用了它,包括一些旧项目,也跟同事分享了使用Unocss的便捷性。 这里分享一下旧项目如何配置和使用Unocss的,项目是vue2vue-cli构建的,node<20平常开…...
ASP.NET Core - IStartupFilter 与 IHostingStartup
ASP.NET Core - IStartupFilter 与 IHostingStartup 1. IStartupFilter2 IHostingStartup2.5.1 创建外部程序集2.5.2 激活外部程序集 1. IStartupFilter 上面讲到的方式虽然能够根据不同环境将Startup中的启动逻辑进行分离,但是有些时候我们还会可以根据应用中的功能…...
学习ASP.NET Core的身份认证(基于JwtBearer的身份认证5)
用户在前端页面登录成功后会从服务端获取Token,后续调用服务器的服务接口时都得带着Token,否则就会验证失败。之前使用postman测试的时候,获取Token后再调用其它服务都是人工将Token添加到Header中,网页中没法这么做,只…...
【Vue】let、const、var的区别、适用场景
let、const、var,有哪些区别,适用场景 var 特点: var 是 JavaScript 中最传统的变量声明方式。具有函数作用域,即在函数内声明的 var 变量,在整个函数内都可以访问。变量提升:使用 var 声明的变量会被提升…...
【llama_factory】qwen2_vl训练与批量推理
训练llama factory配置文件 文件:examples/train_lora/qwen2vl_lora_sft.yaml ### model model_name_or_path: qwen2_vl/model_72b trust_remote_code: true### method stage: sft do_train: true finetuning_type: lora lora_target: all### dataset dataset: ca…...
计算机视觉与深度学习:使用深度学习训练基于视觉的车辆检测器(MATLAB源码-Faster R-CNN)
在人工智能领域,计算机视觉是一个重要且充满活力的研究方向。它使计算机能够理解和分析图像和视频数据,从而做出有意义的决策。其中,目标检测是计算机视觉中的一项关键技术,它旨在识别并定位图像中的多个目标对象。车辆检测作为目标检测的一个重要应用,在自动驾驶、智能交…...
Python 扫描枪读取发票数据导入Excel
财务需要一个扫描枪扫描发票文件,并将主要信息录入Excel 的功能。 文件中sheet表的列名称,依次为:发票编号、发票编码、日期、金额、工号、扫描日期。 扫描的时候,Excel 文件需要关闭,否则会报错。 import openpyxl …...
SpringMVC复习笔记
文章目录 SpringMVC 概念和基本使用SpringMVC 简介SpringMVC 核心组件和调用流程SpringMVC 基本使用第一步:导入依赖第二步:Controller 层开发第三步:SpringMVC 配置类配置核心组件第四步:SpringMVC 环境搭建第五步:部…...
arcgis提取不规则栅格数据的矢量边界
效果 1、准备数据 栅格数据:dem或者dsm 2、栅格重分类 分成两类即可 3、新建线面图层 在目录下选择预先准备好的文件夹,点击右键,选择“新建”→“Shapefile”,新建一个Shapefile文件。 在弹出的“新建Shapefile”对话框内“名称”命名为“折线”,“要素类型”选…...
【机器学习】零售行业的智慧升级:机器学习驱动的精准营销与库存管理
我的个人主页 我的领域:人工智能篇,希望能帮助到大家!!!👍点赞 收藏❤ 在当今数字化浪潮汹涌澎湃的时代,零售行业正站在转型升级的十字路口。市场竞争的白热化使得企业必须另辟蹊径࿰…...
链路追踪SkyWalking
链路追踪 链路追踪作用链路追踪的关键概念链路追踪的工作原理常用链路追踪工具链路追踪的实现步骤链路追踪的典型场景 SkyWalkingSkyWalking 的主要功能SkyWalking 的架构安装 SkyWalking从 SkyWalking 的官方 GitHub 仓库 下载最新版本。配置后端存储SkyWalking使用࿰…...
linux下的线程
一、pthread 线程 线程可以说是轻量级的进程,一般是一个进程中的多个任务。 进程:系统中的最小资源分配单元 线程:系统中最小执行单元 二、线程的特征 1、共享资源 2、效率高30% 3.使用第三方库(头文件加pthread.h 编译时添加 -lpthre…...
《研发管理 APQP 软件系统》——汽车电子行业的应用收益分析
全星研发管理 APQP 软件系统在汽车电子行业的应用收益分析 在汽车电子行业,技术革新迅猛,市场竞争激烈。《全星研发管理 APQP 软件系统》的应用,为企业带来了革命性的变化,诸多收益使其成为行业发展的关键驱动力。 《全星研发管理…...
mysql、oracle、sqlserver的区别
一、保存数据的持久性: MySQL:是在数据库更新或者重启,则会丢失数据。 Oracle:把提交的sql操作线写入了在线联机日志文件中,保持到了磁盘上,可以随时恢复。 SqlServer:2…...
CV(10)--目标检测
前言 仅记录学习过程,有问题欢迎讨论 目标检测 object detection,就是在给定的图片中精确找到物体所在位置,并标注出物体的类别;输出的是分类类别label物体的外框(x, y, width, height)。 目标检测算法:…...
SQL LAST()
SQL中的LAST()函数是一个用于返回指定列中最后一个记录值的函数。然而,需要注意的是,这个函数并不是SQL标准的一部分,因此并不是所有数据库系统都支持它。具体来说,只有MS Access直接支持LAST()函数【0†source】。 在其他数据库…...
传统以太网问题与VLAN技术详解
传统以太网的问题 广播域:在网络中能接收同一广播信息的所有设备(计算机、交换机)等的集合 说明:在一个广播域内,当一个设备发送广播帧时,该域内的所有设备都能接收到这个广播帧。工作原理:在以…...
Java 面试题 - ArrayList 和 LinkedList 的区别,哪个集合是线程安全的?
Java 面试题 - ArrayList 和 LinkedList 的区别,哪个集合是线程安全的? 在 Java 开发中,ArrayList和LinkedList是两个常用的集合类,它们在数据结构和性能上有诸多不同,同时线程安全性也各有特点。深入理解这些差异&am…...
flutter 安卓端打包
在 Flutter 中打包 Android 应用程序是一个相对简单的过程。你可以使用 Flutter 的命令行工具来构建并打包你的 APK 或 AAB(Android App Bundle)。以下是打包 Flutter Android 应用的步骤: 1. 安装 Flutter 环境 确保你已经安装了 Flutter SDK,并且正确配置了 Android 开…...
前端开发:CSS背景属性
1.背景颜色 background-color: [ 指定颜色 ] background-color :blue; background-color : transparent //设置背景是透明的 2.背景图片 background-image : url ( ... ) 1. url 不要遗漏 . 2. url 可以是绝对路径 , 也可以是相对路径 3. url 上可以…...
【Python通过UDP协议传输视频数据】(界面识别)
提示:界面识别项目 前言 随着网络通信技术的发展,视频数据的实时传输在各种场景中得到了广泛应用。UDP(User Datagram Protocol)作为一种无连接的协议,凭借其低延迟、高效率的特性,在实时性要求较高的视频…...
centos 8 中安装Docker
注:本次样式安装使用的是centos8 操作系统。 1、镜像下载 具体的镜像下载地址各位可以去官网下载,选择适合你们的下载即可! 1、CentOS官方下载地址:https://vault.centos.org/ 2、阿里云开源镜像站下载:centos安装包…...
leetcode hot 100 -划分字母区间
给你一个字符串 s 。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。 注意,划分结果需要满足:将所有划分结果按顺序连接,得到的字符串仍然是 s 。 返回一个表示每个字符串片段的长度的列表。 示例 1&am…...
CSS 元素的显示模式(块元素,行内元素,行内块元素)
一. 块元素(block) 又称:块级元素 特点: 1. 在页面中独占一行,不会与任何元素共用一行,是从上到下排列的。 2. 默认宽度:撑满父元素。 3. 默认高度:由内容撑开。 4. 可以通过 CSS 设…...
鸿蒙UI开发——键盘弹出避让模式设置
1、概 述 我们在鸿蒙开发时,不免会遇到用户输入场景,当用户准备输入时,会涉及到输入法的弹出,我们的界面针对输入法的弹出有两种避让模式:上抬模式、压缩模式。 下面针对输入法的两种避让模式的设置做简单介绍。 2、…...
Multi-Agent如何设计
文章小结 研究背景和目的 在单一大语言模型长期主导人工智能领域的背景下,多智能体系统在对话任务解决中逐渐崭露头角。 虽然先前的研究已经展示了多智能体系统在推理任务和创造性工作中的潜力,但对于其在对话范式方面的局限性以及单个智能体的影响&am…...
git操作(bitbucket仓库)
在代码远程版本控制和提交过程中需要经常使用git命令,熟练使用git是一个软件工程师必备的技能之一。 将主版本代码fork到自己的 bitbucket 子仓库中 克隆到本地 利用ssh链接进行克隆,将 fork 的子仓库克隆到本地。 git clone ssh://{$你fork的子bitbu…...
【MySQL | 三、 表的约束介绍】
举例表结构 字段名称字段类型是否NULL键值默认值附加信息FieldTypeNullKeyDefaultExtraidintNoUNI(唯一键)Nullauto_incrementnameverchar(10)NoPRI(主键)NullgenderenumNomanagetinyintYesNulltelphoneintYesNullhome_idintyesMUL(外键)Null 目录 举例表结构1. 空…...
音频DSP的发展历史
音频数字信号处理(DSP)的发展历史是电子技术、计算机科学和音频工程共同进步的结果。这个领域的进展不仅改变了音乐制作、音频后期制作和通信的方式,也影响了音频设备的设计和功能。以下是对音频DSP发展历史的概述: 早期概念和理论…...
学习笔记-Kotlin
准备工作 下载安装kotlin编译器,记录此笔记时的版本是v1.2.10,目前最新发布版本是v2.1.10解压下载的安装包,配置环境变量指向bin目录(官方指导). 如果不想在本地安装环境,也可以使用在线编辑器 尝试编写第一个helloWorld 新建一个名为hello.kt的文件,内容如下: f…...
linux解压命令(可整理到CSDN)
1. tar -xvf ffmpeg-7.0.2.tar.xz x:表示解压文件。 v:表示在解压过程中显示文件(verbose模式)。这个选项是可选的,加上它可以让你看到正在解压的文件列表,但如果不加也不会影响解压过程。 f:…...
Boost Asio TCP异步服务端和客户端
服务端 消息分两次发送,第一次发送head,第二次发送body。接收也是先接收head,然后通过head结构中的body长度字段再接收body。 TcpServer.h #pragma once #include <atomic> #include <vector> #include <unordered_set> #…...
【Apache Doris】周FAQ集锦:第 29 期
引言 欢迎查阅本周的 Apache Doris 社区 FAQ 栏目! 在这个栏目中,每周将筛选社区反馈的热门问题和话题,重点回答并进行深入探讨。旨在为广大用户和开发者分享有关 Apache Doris 的常见问题。 通过这个每周 FAQ 栏目,希望帮助社…...
速通Docker === 介绍与安装
目录 Docker介绍 Docker优势 Docker组件 Docker CLI (命令行接口) Docker Host (Docker 守护进程) 容器 (Container) 镜像 (Image) 仓库 (Registry) 关系总结 应用程序部署方式 传统部署 (Traditional Deployment) 虚拟化部署 (Virtualization Deployment) 容器部署…...
云平台一键部署【Video-Background-Removal】视频换背景,无任何限制,随意换
Video-Background-Removal 是一款革命性的视频背景替换工具,旨在让用户轻松实现视频背景的快速更换。无论你是专业创作者还是普通用户,这款软件都能让你在几秒钟内改变背景,完全消除限制,随心所欲,随时随地想换就换&am…...
AI刷题-最大矩形面积问题、小M的数组变换
目录 一、最大矩形面积问题 问题描述 输入格式 输出格式 输入样例 输出样例 数据范围 解题思路: 问题理解 数据结构选择 算法步骤 最终代码: 运行结果: 二、小M的数组变换 问题描述 测试样例 解题思路: 问题…...
ts类型断言各种写法
在 TypeScript 中,类型断言(Type Assertion)有两种主要的写法:**尖括号语法** (<Type>) 和 **as 关键字语法**。这两种方式都可以用来告诉编译器某个表达式的具体类型,但它们在不同的上下文中有各自的适用性和局…...
第十二章:算法与程序设计
文章目录: 一:基本概念 1.算法与程序 1.1 算法 1.2 程序 2.编译预处理 3.面向对象技术 4.程序设计方法 5.SOP标志作业流程 6.工具 6.1 自然语言 6.2 流程图 6.3 N/S图 6.4 伪代码 6.5 计算机语言 二:程序设计 基础 1.常数 …...
计算机网络 | IP地址、子网掩码、网络地址、主机地址计算方式详解
关注:CodingTechWork 引言 在计算机网络中,IP地址、子网掩码和网络地址是构建网络通信的基本元素。无论是企业网络架构、互联网连接,还是局域网(LAN)配置,它们都起着至关重要的作用。理解它们的工作原理&a…...
一文读懂高频考题!进程、线程、协程最全方位对比剖析
一、基本概念 (一)定义与特征 进程 在计算机科学里,进程是操作系统正在运行的程序的实例,是资源分配的基本单位。就好比每个进程都像一个小王国,它有自己独立的领土,这里的领土就是内存空间、代码块、数据和文件句柄等资源。比如说,你在电脑上同时打开一个文字处理软件…...
Elasticsearch搜索引擎(二)
RestClient 基础 前言一、RestAPI1. 初始化 *RestClient*2. 创建索引库3. 删除索引库4. 判断索引库是否存在 二、RestClient操作文档1.新增文档2.查询文档3. 删除文档4. 修改文档5. 批量导入文档 前言 ES官方提供了各种不同语言的客户端用来操作ES,这些客户端的本质…...
docker 部署 Kafka 单机和集群
一、准备工作 安装 Docker 确保本机已安装 Docker。可以通过以下命令检查 Docker 是否已安装:docker --version如果未安装,可以访问 Docker 官网下载并安装 Docker Desktop(Windows 和 Mac)或使用包管理器安装(Linux&…...