Cuda & fortran简单的例子
来源:互联网 发布:python开源应用 编辑:程序博客网 时间:2024/05/20 19:31
一、 简单小程序
module simpleOps_mcontains attributes(global)subroutine increment(a,b) implicit none integer,intent(inout)::a(:) integer,value::b integer::i i = threadIdx%x a(i)=a(i)+b end subroutine incrementend module simpleOps_mprogram incrementTestGPU use cudafor use simpleOps_m implicit none integer ,parameter :: n =256 integer :: a(n),b integer, device :: ad(n) a=1 b=3 ad=a call increment<<<1,n>>>(ad,b) a=ad if(any(a /=4)) then write(*,*) "Failed" else write(*,*) "Passed" endifend program incrementTestGPU
fortran是用module进行包装的。implicit none这句表示变量必须定义之后才可以使用,subroutine是用来包装子程序的标签,(global)这个相当于cuda的__global__。Fortran的参数申明是在里面的,不需要在increment(a,b)这个里面做申明。Increment是子程序名。Fortran默认是按地址传递,所以如果要使用按值传递的话,需要加上value这个形容词,就比如上面的integer,value::b一样。Program是程序的入口,就像main一样,incrementTestGPU这个是程序名称可以修改成其他,use cudafor这个是需要添加的因为我们会使用到cudaFortran。simpleOps_m这个模块我也也会使用到,我们会调用到里面的子程序。然后就定义各种变量,大家注意格式就好了。调用内核函数的使用,和cuda一样,只是多了一个call这个东西。
如果我们把上面的代码存在a.f90
编译命令:pgf90 a.f90 -Mcuda
-Mcuda这个参数是需要添加的,它是为了告诉编译器我要使用到cudaFortran了。
二、 调用另外一个文件的内核函数
假如我们把内核函数写在b.f90这个文件里面
module simpleOps_mcontains attributes(global)subroutine increment(a,b) implicit none integer,intent(inout)::a(:) integer,value::b integer::i i = threadIdx%x a(i)=a(i)+b end subroutine incrementend module simpleOps_m
我们把主函数写在a.f90这个文件里面
program incrementTestGPU use cudafor use simpleOps_m implicit none integer ,parameter :: n =256 integer :: a(n),b integer, device :: ad(n) a=1 b=3 ad=a call increment<<<1,n>>>(ad,b) a=ad if(any(a /=4)) then write(*,*) "Failed" else write(*,*) "Passed" endifend program incrementTestGPU
这个时候我们就涉及到调用另外一个文件里的函数的问题,其实很简单。我们先把b.f90这个文件编译成.o的中间文件即可,只是注意需要加个参数编译命令:pgf90 -Mcuda=rdc -c b.f90这个时候就生成了b.o这个文件pgf90 -Mcuda b.o a.f90这个时候我们就可以看到可执行文件了。
0 0
- Cuda & fortran简单的例子
- 使用CUDA驱动API的简单例子
- 从几个简单例子了解CUDA内核的几个…
- CUDA学习,环境配置和简单例子
- CUDA C++ 简单例子 两个数组求和
- CUDA Fortran不必要数据拷贝
- cuda的简单程序
- CUDA例子
- Fortran 95简单教程(
- CUDA Fortran 稀疏矩阵 乘法 测试
- OpenACC与CUDA Fortran交互(1)
- OpenACC与CUDA Fortran交互(2)
- 一个简单的CUDA程序
- 最简单的CUDA程序
- CUDA并行编程的一个例子
- 使用cuda加速图像缩放的例子
- Fortran中function,subroutine, interface和module的简单使用
- Fortran中function,subroutine, interface和module的简单使用
- AVR单片机使用外部中断和定时器的NEC红外解码程序
- android studio中轻松实现自定义模版
- Java 技术更新列表
- html的img标签设置大小的问题
- Gym 101149CMathematical Field of Experiments 规律
- Cuda & fortran简单的例子
- Android属性动画完全解析(上),初识属性动画的基本用法
- inode索引节点的概念
- 【增强学习在无人驾驶中的应用】
- 百度地图 配置环境及发布Android SDK
- 有趣的 CSS 题目(1): 左边竖条的实现方法
- SpringBoot+IDEA+Maven快速入门
- oracle卸载教程
- UVA 459