首页 > 其他分享 >__device__函数指针

__device__函数指针

时间:2025-01-22 15:44:32浏览次数:1  
标签:__ int float func device 函数指针 op

https://forums.developer.nvidia.com/t/how-can-i-use-device-function-pointer-in-cuda/14405/8

 

 

device double step_d[8]={0.5,0.25,0.125,0.06250,0.03125,0.015625,0.0078125,0.0039065};
但是编译出现这样的错误:expression must have integral or enum type

 

__device__定义的数组/变量是device端的全局数组/变量,无需通过参数传递,直接在kernel中可以访问。您可以在kernel中通过下标来选择您需要的数据。

以及,此类数组/变量称为Symbol,有一些特殊处理。

如果您想使用kernel参数的方法访问,那么您需要使用API函数cudaGetSymbolAddress()来获得Symbol的实际地址,然后作为参数传递给kernel使用。

 

 

 

#include <stdio.h>

#include <stdlib.h>

#define N 5

__device__ float add_func (float x, float y)

{

return x + y;

}

__device__ float mul_func (float x, float y)

{

return x * y;

}

__device__ float div_func (float x, float y)

{

return x / y;

}

typedef float (*op_func) (float, float);

__device__ op_func func[3] = { add_func, mul_func, div_func };

__device__ char* op_name[3] = { "add", "mul", "div" };

__device__ void op_array (const float *a, const float *b, float *res, int op, int n)

{

for (int i = 0; i < N; i++) {

res[i] = func[op](a[i], b[i]);

}

}

__global__ void kernel (void)

{

float x[N];

float y[N];

float res[N];

for (int i = 0; i < N; i++) {

x[i] = (float)(10 + i);

}

for (int i = 0; i < N; i++) {

y[i] = (float)(100 + i);

}

for (int op = 0; op < 3; op++) {

printf ("\nop=%s\n", op_name[op]);

op_array (x, y, res, op, N);

for (int i = 0; i < N; i++) {

printf ("res = % 16.9e\n", res[i]);

}

}

}

int main (void)

{

kernel<<<1,1>>>();

cudaThreadSynchronize();

return EXIT_SUCCESS;

}

标签:__,int,float,func,device,函数指针,op
From: https://www.cnblogs.com/Janly/p/18686201

相关文章

  • LCD-RGB屏幕学习(二)ESP32驱动RGB屏幕
    ESP32是国内比较火的IOT芯片厂商,在个人玩家圈子里备受好评1.器件准备40pinRGB通用接口屏幕这里的通用接口指的是市面上最常见的接口,并不属于某种标准我拆开了吃灰已久的树莓派便携HDMI屏幕,在屏库上查看此型号,刚好满足需求,又剩下一笔大洋ESP32N16R8选用带有pasram的......
  • 【业务开发】接口不能对外暴露怎么办?
    在业务开发中,当某些接口不能对外暴露时,需要采取一系列措施来保护这些接口的安全性和隐私性。以下是对该问题的详解及案例分析:一、接口不能对外暴露的原因1、安全性考虑某些接口可能包含敏感信息或者涉及到系统的核心功能,因此需要限制对其访问,以确保系统的安全性。2、商业考虑......
  • 《操作系统真象还原》第九章 线程(二) 多线程轮转调度
    第九章线程(二)多线程轮转调度本文是对《操作系统真象还原》第九章(二)学习的笔记,欢迎大家一起交流,目前所有代码已托管至fdx-xdf/MyTinyOS。上一节中成功创建了线程并运行,这一节要实现的是多线程轮转调度。链表数据结构准备我们要把线程组织起来,采取的是双向链表形式,将各个线......
  • Cisco APIC 6.0(8e)M - 应用策略基础设施控制器
    CiscoAPIC6.0(8e)M-应用策略基础设施控制器ApplicationPolicyInfrastructureController(APIC)请访问原文链接:https://sysin.org/blog/cisco-apic-6/查看最新版。原创作品,转载请保留出处。作者主页:sysin.org思科应用策略基础设施控制器(APIC)CiscoNX-OS网络操作......
  • typechoTohugo
    go实现typecho转换为mdpackagemainimport( "database/sql" "fmt" "os" "strings" "time" _"github.com/go-sql-driver/mysql")funcmain(){ //配置数据库连接信息 dbHost:="localhost"......
  • Jetpack架构组件学习(6)——使用Glance实现桌面小组件
    原文地址:Jetpack架构组件学习(6)——使用Glance实现桌面小组件-Stars-One的杂货小窝公司陆续整了几个Compose写的app,有个小组件的功能,顺便试了下Jetpack库里的Glance框架感觉与原来的Remoteview差点意思,不过点击事件的使用比Remoteview要方便不少PS:如果想看Remotevie......
  • 「CF1437F」Emotional Fishermen 题解
    小水题一道Description有n\((n\le5000)\)个渔民,每个渔民钓了一条重\(a_i\)的鱼,渔民按任意顺序展示他们的鱼。若当前渔民的鱼的重量为\(x\),之前展示过的鱼的最大重量\(y\)。一个排列满足条件当且仅当对于每个\(x\),满足\(2y\lex\)或\(2x\ley\)。问有多少个排列满......
  • 从0到1打造企业AI知识库-课程目录
    课程名称:「从0到1打造企业AI知识库:实用指南与生产落地」课程目录第一章:AI企业知识库的前景与价值1.企业知识库的概念与意义1.1什么是企业知识库?-企业知识库的核心组成-企业知识库的类型1.2企业知识库如何赋能内部协作与创新。2.AI在知识库中的作用AI赋能的......
  • 【开源】基于SpringBoot框架教学资料管理系统(计算机毕业设计)+万字毕业论文 T286
    系统合集跳转源码获取链接点击主页更能获取海量源码10年计算机开发经验,主营业务:源码获取、项目二开、语音辅导、远程调试、毕业设计、课程设计、毕业论文、BUG修改一、系统环境运行环境:最好是javajdk1.8,我们在这个平台上运行的。其他版本理论上也可以。IDE环境......
  • 【开源】基于SpringBoot框架智慧校园管理系统(计算机毕业设计)+万字毕业论文 T291
    系统合集跳转源码获取链接点击主页更能获取海量源码10年计算机开发经验,主营业务:源码获取、项目二开、语音辅导、远程调试、毕业设计、课程设计、毕业论文、BUG修改一、系统环境运行环境:最好是javajdk1.8,我们在这个平台上运行的。其他版本理论上也可以。IDE环境......