自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(76)
  • 收藏
  • 关注

原创 3维索引二维

ny根据提供的索引计算,可以得出每个线程的全局坐标(X, Y, Z)由其所属的 block 和 grid 的索引决定。在二维的情况下,每个 block 由索引。而(bx, by)这两个维度的坐标决定了每个 block 在 grid 中的起始位置。假设lx和ly这意味着 block(bx, by)在 grid 中的起始位置为。其中,bx的范围是by的范围是blockIdx.x和blockIdx.y的范围是和。在三维的情况下,grid 由索引。在我们的情况下,只考虑了两个维度(bx, by)

2024-03-26 17:25:59 628

原创 Fast.ai

克隆此存储库后,请确保您已 nbdev_install_hooks在终端中运行。这将安装 Jupyter 和 git hooks 以自动清理、信任和修复笔记本中的合并冲突。在存储库中进行更改后,您应该运行nbdev_prepare并进行其他必要的更改,以便通过所有测试。网址:https://colab.research.google.com/

2024-01-12 17:30:07 468

原创 优化的 MCM-GPU 比具有相同 SM 总数和 DRAM 带宽的同等配备的多 GPU 系统快 26.8%。

基于GPU的计算加速是推动高性能计算(HPC)系统[12]–[29]、大规模云安装中的机器学习和数据分析应用以及个人计算设备[15]–[47]性能的主要工具。在此类设备中,每个计算节点或计算设备通常由具有一个或多个 GPU 加速器的 CPU 组成。这些领域的前进道路,无论是在HPC中实现百万兆次级性能,还是使用深度卷积神经网络实现人类水平的人工智能,都依赖于持续扩展GPU性能的能力[29],[47]。

2023-12-06 17:47:10 299

原创 CNN,DNN,RNN,GAN,RL+图像处理常规算法(未完待续)

好的,让我们先介绍一些常见的神经网络模型,然后再讨论图像处理的常规算法。

2023-12-04 14:30:05 1086 1

原创 人工智能算法

选择合适的损失函数(用于衡量模型预测与实际标签的差异)和优化器(用于更新模型参数以最小化损失函数)。

2023-12-04 10:31:59 245

原创 电磁建模的分布式并行计算技术

本文提出了一种新的分布式并行电磁建模技术,以加快电磁结构的神经网络建模过程。现有的电磁建模技术通常需要反复改变微波器件的参数,驱动电磁模拟器以获得足够的训练和测试样本。随着电磁建模问题复杂性的增加,由于单台计算机的性能有限,。一个例子表明,我们的技术比传统技术更快,同时保持良好的模型精度。

2023-11-24 19:20:42 153

原创 电磁优化的并行空间映射方法

空间映射(SM)是一种公认的加速电磁优化的方法。现有的SM方法大多基于顺序计算机制。本文提出了一种用于电磁优化的并行SM方法。在该方法中,每次迭代开发的代理模型被训练以同时匹配多个点的精细模型。多点训练和SM使代理模型在比标准SM更大的邻域内有效。本文提出的多点代理模型训练方法本质上适合于并行计算,并通过并行计算实现。这包括并行的多个精细模型评估和使用并行算法的多点代理训练。与标准模型相比,该方法进一步减少了模型的迭代次数,加快了优化过程。通过三个微波滤波器实例说明了该技术。SM优化公式。

2023-11-22 21:37:59 233

原创 open mp笔记

Open mp在cpu上并行计算,统一内存访问(OPEN MP pthreads),同一块内存共享多个CPU非统一内存访问(MPI),每个CPU都有自己对应的内存,通过blus interconnect链接起来,cpu不能直接访问他们的内存,需要进行通信才可以访问到他们所属的memory,OPEN MP pthreads他们都是针对共享内存编程的API哪个线程要指定Open mp,只加简单的预定义,编译器自动编译并行,

2023-11-02 10:26:36 206

原创 Multi-gpu问题(1)

_mul24提供了传统32位乘法的24位整数乘法,相比于12个时钟周期,__fdividef执行20个时钟周期的单精度浮点除法,优于划分浮点值[1]通常需要的36个时钟周期。,num_gpus -1)上的磁场和电场分量需要分别来自设备k+1和k-1的场值,因此我们需要在多GPU域分解边界上增加额外的nx×ny细胞来存储这些数据。域在z方向划分为num_gpus段,其中num_gpus表示可用GPU的数量,然后每个GPU相应地负责一个大小为nx×ny×(nz/num_gpus)的子域。

2023-10-30 17:22:38 137

原创 等离子体共振和ENZ模式的场增强效应提高ITO对THz产生的非线性响应

等离子体纳米结构在控制光、发展光致发光增强、 光学传感、太阳能电池、超材料和光学天线 [1] –[5]。这些潜在的应用来自表面等离子体 共振(SPR)[6],由等离子体之间的相互作用诱导 金属纳米结构和外部电磁场。SPR 可以通过修改几何形状和 纳米结构材料[7]。特别是,它们对他们的 固有的非线性光学效应。报道了基于非线性效应的各种光子官能团 在最近的工作中,如光学传感,超短脉冲产生,纳米天线和光信号处理[8]-[11]而 与线性相互作用相比,非线性相互作用本质上是弱的。他们严重依赖 激励的场振幅。

2023-10-26 20:06:39 421

原创 c语言对三个数进行比较找出其中的最值

您可以使用条件运算符(三元运算符)来比较三个数并找出其中的最小值及其位置。在这个例子中,我们首先使用嵌套的条件运算符来比较三个数,找出最小值,然后使用类似的方法找出最小值的位置。根据条件运算符的工作原理,它会根据条件的真假来返回一个值,从而实现了这种比较和选择的逻辑。

2023-09-04 22:10:15 1696

原创 实现链表相加,链表 1为 3->7->2,链表 2 为 2->4,最后生成新的结果链表为 3->9->6

【代码】实现链表相加,链表 1为 3->7->2,链表 2 为 2->4,最后生成新的结果链表为 3->9->6。

2023-08-26 17:08:43 70

原创 gpu之间数据传输-cudaMemcpyPeerAsync,cudaMemcpyPeerAsync、cudaEventRecord

要在第tid个 GPU 上的数据传送到第tid+1个 GPU 上的,需要使用函数和 CUDA 事件来确保传输的顺序性和正确性。在这个示例中,首先在源 GPU 上的流中记录一个事件,然后在目标 GPU 上的流中等待这个事件。这样可以确保传输操作在正确的顺序下进行,避免了数据的竞争和错误。在传输完成后,再在目标 GPU 上的流中记录传输完成的事件。这种方式可以保持数据传输的正确顺序。实现将第tid个GPU上的和数据传输到第tid + 1这句代码的目的是将第tid个GPU上的数据异步传输到第tid + 1。

2023-08-25 16:17:09 695 1

原创 linux多线程

4100000请记住,多线程编程需要仔细考虑和测试,以正确处理同步并避免潜在问题。

2023-08-24 12:32:20 84

原创 cuda面试准备(一),架构调试

这个错误往往会伴随fatal error LNK1169: 找到一个或多个多重定义的符号出现。在此吐槽一下英某达链接器的程序猿——只能链接多个lib和一个.cu文件。并建议开发者们摒弃原有的多文件编程方法,函数和类声明即实现:传统多文件编程技巧——头文件声明函数,源文件实现函数cuda正确的多文件编程方法,声明即实现。

2023-08-22 10:45:04 1434 1

原创 cuda gdb调试

如果cudaDeviceEnablePeerAccess函数不支持或不起作用,您仍然可以尝试其他方法来实现GPU之间的数据交换和通信。以下是一些替代方法:通过主机内存进行数据传输:如果GPU之间的数据交换不是非常频繁,您可以将数据从一个GPU复制到主机内存,然后再从主机内存复制到另一个GPU。这可以通过cudaMemcpy函数来实现。使用Unified Memory:CUDA的Unified Memory允许多个GPU共享同一块内存。您可以在多个GPU之间创建统一内存分配,并在它们之间共享数据。

2023-08-21 17:36:25 1141

原创 ubuntu22.04+cuda11.5+gcc11.4第一个cuda程序示例

VisualStudio 2019是微软的集成开发环境(IDE),通常在Windows操作系统上使用。然而,并不直接支持在Linux上安装。如果想在Ubuntu上进行开发,可以考虑以下几个选项:使用替代的IDE或文本编辑器: Ubuntu上有许多适用于C++等编程语言的开发工具,比如Visual Studio Code、 Code.:Blocks、 Eclipse等。

2023-08-13 17:15:35 1870 1

原创 从一个GPU到多个GPU

在多GPU运行应用程序时,需要正确设计GPU之间的通信,GPU间数据传输的效率取决于GPU是如何连接在一个节点上并跨集群的。多GPU通过单个节点连接到PCIe总线上。多GPU连接到集群中的网络交换机上。在多GPU系统里有两种连接方式。

2023-08-13 15:15:09 245

原创 摸鱼(三)消失的三十年

日本政府,疯狂加息,希望迅速撕破泡沫,在15个月内加息5次,收紧货币和房贷,工厂倒闭,大学生毕业即失业-------被国家抛弃的一代(所以鼓励消费,扩大内需不是一条正确的道路,发展实业,夯实基础资源根基才是本源之水)1980年日本汽车工业取代美国成为世界第一,出口贸易繁荣,资产价格疯涨,民族主义泛滥,对美摩擦不断-----民众到高层的狂欢,强烈的民族自豪感,摔跟头后躺平摆烂,信息永远是最具价值的资源。美国越南战争,中东问题,石油危机–滞涨危机,失业率10%,美国贸易赤字的1/3都来自于日本。

2023-08-10 21:38:22 159

转载 如何处理GPU上Error Number:700 an illegal memory access was encounter

步骤2:执行步骤1的操作后问题不复现,也就是同步执行的这种方式下没有问题,基本上可以确定是有算子里依赖同步执行的结果,因为正常device算子执行是异步执行,所以拿的结果不是预期值,同步执行就掩盖了这个问题。步骤1:由于GPU的算子执行是host下发到device上异步执行的,因此执行报错的地方不一定是真凶,大概率是前面的算子有问题,但是device是异步执行的,所以执行到后面才会报错。案例代码:https://gitee.com/mindspore/mindspore/pulls/962。

2023-07-21 10:11:31 1121

原创 摸鱼(2)---像一个真正的好朋友那样同情你自己

2.孤独会导致心理不健康,研究表明长期的孤独会导致很多疾病4.失败也会导致心理不健康,人们被自己会失败的思维困住,很快放弃,认定自己不能成功,导致心理不健康。5.被拒绝是十分痛苦的,会导致心理不健康6.停止重思苦想,改变反复回味不愉快回忆的习惯。7.当你又在思考伤心的事情的时候,就强迫自己专注于其他事情上。就是事后反复咀嚼回味一件事。反复回味不愉快的事 很容易变成习惯,而这个习惯代价很大。

2023-07-20 20:35:54 64

原创 cuda sample_MultiGPU(3)

该代码片段展示了一个使用多个GPU进行并行计算的示例。初始化多个GPU设备并打印它们的计算能力。根据GPU的数量将数据均匀分配给每个GPU。通过循环遍历每个GPU,将dataN设置为DATA_N / GPU_N,其中DATA_N是数据的总大小。这样可以均匀地将数据分配给每个GPU。对于余数部分,通过将dataN递增1来处理。这样可以确保所有数据都被正确地分配给每个GPU。为每个GPU分配内存空间,并将输入数据从主机内存复制到各个GPU设备。为每个GPU分配相关的内存和流。

2023-07-11 15:41:51 328

原创 AI的建议

通过深入学习 GPU 架构、CUDA 编程模型、CUDA API、并行算法和优化技术,并结合实际应用领域的知识,您将能够开发出高效的 GPU 加速应用程序,并在相关领域中找到工作机会。这些工具可以帮助您调试和优化 CUDA 程序,提高代码的可靠性和性能。需要注意的是,展开循环可能会增加生成的代码的大小,因此需要权衡代码大小和性能提升之间的关系,并根据具体情况进行选择。CUDA 编程模型:学习 CUDA 的编程模型和编程范式,包括主机代码和设备代码的编写、内存管理、线程和线程块的组织、核函数的编写等。

2023-07-07 11:28:22 185

原创 cuda sample(2)矩阵乘法

/ CUDA示例演示了一个__nv_bfloat16 (E8M7) GEMM计算,使用的是CUDA 11.0中引入的和。

2023-07-07 11:06:43 516

原创 cuda sample-asyncAPI(01)

需要注意的是,代码中的计时器函数(如 sdkStartTimer 和 sdkStopTimer)可能是特定的SDK或库函数,需要确认代码所使用的具体环境和库。该代码片段展示了一种典型的异步数据传输和核函数调用的模式,旨在提高CUDA程序的性能。通过使用 exit() 函数,可以在程序的任何地方进行终止,并根据条件决定程序的退出状态码,从而可以在后续的处理中识别程序的执行结果。给出的代码片段使用了 exit() 函数来退出程序,并根据条件 bFinalResults 的值决定返回的退出状态码。

2023-07-06 20:59:51 186

原创 摸鱼(1)

后边苏联解体了(没客户了),同时爆发了海湾战争,油价涨了(能源进口的价格),所以印度的资金流非常紧张------向世界贸易组织借钱了—不是无偿-----要求他们全面整改,1991年,搞西方的政治经济自由,所以在稳步上升,----主要业务:外包(漂亮国的IT产业)----便宜,人力成本低,大量的信息技术人才,印度的理工科,说英语的人多(被殖民过,虽然有口音)单程序多份数据进行任务并行。世界人口第一多,人均GDP低,人口结构比较好,人口多,就业压力大,没有就业岗位,农业,工业(拉胯–印度制造),服务业,

2023-07-04 10:38:56 74

原创 cuda优化

输入里面每一个值element,把这个值放到共享内存里面,一小块一小块放到共享内存里面去做转置,做完以后,共享内存中的结果再复制到输出矩阵。边缘和中间部分处理不一样,可以看看写成两个kernel函数处理—把它变成两次的并行化处理,或者同样指令,使用全局变量-----合并到一个共享内存里面------放到这个内存的同时把转置的工作做了。把共享内存的大小缩小以后,K=16,处理的速度也得到了提升。希望用GPU解决更大的问题,更多的程序在同等的设备商运行。类似CPU,单个线程处理这个事情,串行。

2023-07-03 13:00:53 109

原创 CUDA多GPU编程入门

1:定义了两个流,s1,s22:用函数cudaMemcpyAsync函数异步传输1,2,用的时间一样,1s3:创建两个流,同时运行AB,AB 在不同的流上同时运行,异步流形式是共用的时间,也是1s。

2023-07-02 16:25:22 1196

原创 c计时--程序在cpu,GPU上运行的时间

clock以毫秒为单位,clock会把这个值并根据宏定义的CLOCKS_PER_SEC来进行毫秒单位转换,假如clock_t是1000,那么CLOCKS_PER_SEC也是1000,clock就会返回1毫秒。进程控制块里有一个clock_t 的成员变量,当程序获取到CPU控制权时。clock_t 的值会不断递增。CPU赫兹不以秒为单位—执行代码。如果建议你用fopen_s。可以直接在最开头加上。不要它建议啥就用啥哇。

2023-06-08 20:24:20 300

原创 c语言实现matlab-circshift函数

其实cuda中取余并没有问题(写过示例,打印出来看过);但是不知道为什么放点源,出来的波形是阶梯状的并且居然没有发散——这是个十分严肃又恐怖的问题。中间注释的是先写了个2D的数组看看情况,2D,3D都差不多。

2023-06-08 17:22:17 172

原创 win10 nvprof的性能分析表

交叉访问是全局内存中最糟糕的访问模式,因为它浪费总线带宽使用多个线程块对基于交叉的全局内存访问重新排序到合并访问的两个参数应该怎么设置好呢。首先,CUDA GPU 使用大小为 32 的倍数的线程块运行内核,因此blockSize的大小应该设置为32的倍数,例如128、256、512等。

2023-05-28 15:33:48 947

原创 open mp参考的博客

http://jakascorner.com/blog/2016/05/omp-for.htmlhttps://blog.csdn.net/weixin_44330072/article/details/106528599https://blog.csdn.net/zhenxin066/article/details/20544293http://jakascorner.com/blog/2016/05/omp-for.html

2023-05-05 10:46:33 52

原创 RCS(1)随便写写没整理

指的是一个雷达信号照射到一个单独的目标物体,目标物体的反射信号经过接收机接收后的回波强度。单站 RCS 是目标物体的本身特性决定的,与雷达信号的特性无关。单站 RCS 的计算需要知道目标物体的几何形状、材料特性、入射波角度等信息,常用的计算方法包括物理光学法、方法 of moments 等。具体地,单站RCS的远场计算可以采用积分方程法,通过求解基于电磁场的积分方程,得到目标散射电场和磁场分布。这些场分布可以通过远场公式计算得到远场电磁场。远场公式可以表示为:KaTeX parse error: Expec

2023-04-04 11:22:24 2244 1

原创 计算RCS(未成功)

在C语言中需要声明函数的输入参数类型和返回值类型,因此将其添加到函数签名中。在函数中需要使用指针来传递E_r,E_theta,E_phi,H_r,H_theta和H_phi变量以获得从getDielectricSphereFieldUnderPlaneWave函数中返回的值。因为C语言没有内置的复数类型,因此使用了库函数cabs()来计算E数组的模长。值得注意的是,由于C语言不允许将函数作为参数传递给其他函数,因此在该代码中的绘图和数据保存函数无法直接传递,需要在代码中实现这些功能。

2023-03-30 17:19:17 176

原创 cudaMemGetInfo()函数cudaDeviceGetAttribute()函数来检查设备上的可用内存

如果不清楚的可以利用以下的cudaDeviceGetAttribute()函数查询,如果在使用该函数时出现未定义标识符的错误,则可能是由于未包含必要的CUDA头文件或未链接正确的CUDA库。例如,在Linux上,如果使用的是CUDA 11.0,则CUDA库目录应为/usr/local/cuda-11.0/lib64。请注意,如果在系统上安装了多个CUDA版本,则需要相应地更改库目录路径,以确保使用正确的CUDA版本。如果无法在上述目录中找到CUDA库,请尝试搜索系统以查找CUDA库。

2023-03-23 15:07:22 1488

原创 cuda三维索引与一维索引(一)

三维网格中每个网格的坐标为 (i,j,k),其中 i 表示沿 x 轴的索引,j 表示沿 y 轴的索引,k 表示沿 z 轴的索引。nx、ny、nz 分别为数组在 x、y、z 轴上的长度其中,blockIdx.x、blockDim.x、threadIdx.x 表示当前线程所在的块在 x 轴上的索引、每个块在 x 轴上的线程数、当前线程在所在块中在 x 轴上的索引,其他变量类似。这些变量通常在 CUDA 编程中使用。则 (i, j, k) 在一维数组中的索引为。

2023-03-22 16:43:50 1049

原创 怎么利用命令器 cuda命令看自己电脑网格和块的数量

这表示一个线程块的最大维度大小为 (1024, 1024, 64),一个网格的最大维度大小为 (2147483647, 65535, 65535)。使用 CUDA 工具包中的 deviceQuery 工具来查看你的 GPU 硬件信息,包括 GPU 设备的名称、计算能力、网格和块的数量等等。这里我 CUDA 工具包安装在 C 盘的默认路径下,且版本为 11.0。

2023-03-20 16:38:21 1141

原创 【无标题】

该示例中使用了大小为BLOCK_SIZE_X * BLOCK_SIZE_Y * BLOCK_SIZE_Z的线程块和共享内存大小为(BLOCK_SIZE_X+2) * (BLOCK_SIZE_Y+2) * (BLOCK_SIZE_Z+2),其中+2表示在每个方向上增加了一圈边界。对于共享内存,与2D TM波动方程相同,可以在每个块中使用共享内存来存储块中的数据。在3D中,由于需要处理三个方向上的边界,因此需要在每个方向上增加一圈边界,并在计算时从共享内存中读取这些边界数据。

2023-03-07 10:47:38 58

原创 cuda代码高效策略--b站看课的笔记

要么增大数据量,要么减少每个线程的内存(每个线程读取的数据量变少,每个线程的读取数据的速度变快(转变存储方式,对读取慢的地方做优化–合并全局内存))

2023-03-06 17:43:17 403

原创 cuda2D FDTD——share

0) 语句中,如果线程是该线程块内第一列的线程,但它不是该计算区域的最左边的一列,那么它需要访问其相邻线程块中的值。同样的,如果线程是该线程块内第一行的线程,但它不是该计算区域的最上面一行,那么它需要访问其相邻线程块中的值。将全局内存中的数据复制到共享内存中时,除了将每个线程需要的数据复制到共享内存中之外,还需要将共享内存中的边界区域额外复制一些数据,使得每个线程都可以访问到它所需要的边界数据。通过这种方式,线程块内的所有线程都可以访问其计算区域周围一圈的值,无论它们在该线程块内的位置如何。

2023-03-06 11:03:57 534 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除