小编fah*_*had的帖子

函数指针指向C中具有不同参数的不同函数

我有两个函数,可变数量和参数类型

double my_func_one(double x, double a, double b, double c) { return x + a + b + c }
double my_func_two(double x, double p[], double c) { return x + p[0] + p[1] + c }
Run Code Online (Sandbox Code Playgroud)

我想使用一个指向函数的指针来实现我在上面定义的函数,基于一些条件得到实例,例如

if (true == condition_1)
   pfunc = my_func_one;
else if (true == condition_2)
   pfunc = my_func_two;

 // The function that will use the function I passed to it
 swap_function(a, b, pfunc);
Run Code Online (Sandbox Code Playgroud)

我的问题是,对于这种情况,我能否定义一个函数指针?如果有,怎么样?
我的理解是函数指针的原型对于它可以指向的所有函数应该是相同的.

typedef double (*pfunction)(int, int);
Run Code Online (Sandbox Code Playgroud)

就我而言,他们不一样.有没有其他方法可以做到这一点?

语言

我正在用C语言开发,我正在使用gcc 4.4.3编译器/链接器

c function-pointers

11
推荐指数
2
解决办法
2万
查看次数

使用CUDA Thrust多次复制矢量

我正在尝试使用CUDA Thrust来解决问题.

我有一个包含3元素的主机数组.是否有可能使用Thrust创建一个384元素的设备数组,其中3主机数组中的元素重复128次数(128 x 3 = 384)?

一般来说,从一个3元素数组开始,我如何使用Thrust生成一个大小的设备数组X,其中X = Y x 3,即Y重复次数是多少?

cuda thrust

3
推荐指数
1
解决办法
1613
查看次数

CUDA 5.0内存对齐和合并访问

我有一个包含10行和96列的2D主机阵列.我将此数组线性加载到我的cuda设备全局内存,即row1,row2,row3 ... row10.

该数组的类型为float.在我的内核中,每个线程从设备全局内存中访问一个浮点值.

 The BLOCK_SIZE I use is = 96
 The GRID_DIM I use is = 10
Run Code Online (Sandbox Code Playgroud)

现在我从"Cuda C编程指南"中了解到合并访问,我使用的模式是正确的,通过warp连续访问内存位置.但是有一个关于内存128字节内存对齐的条款.我不明白.

Q1)128字节内存对齐; 这是否意味着warp中的每个线程应该从地址0x00(例如)到0x80开始访问4个字节?

Q2)因此,在这种情况下,我是否会进行未合并的访问?

我的理解是:一个线程应该使一个内存访问应该是4个字节,从地址范围,如从0x00到0x80.如果来自warp的线程访问其外部的位置,则其为未加协调的访问.

memory-management cuda

2
推荐指数
1
解决办法
2150
查看次数

标签 统计

cuda ×2

c ×1

function-pointers ×1

memory-management ×1

thrust ×1