玩转 ArrayFire:05 初识 array(二)

本文是《玩转 ArrayFire》系列的第二部分,详细介绍了ArrayFire中array的索引操作,包括整数标量、seq、end、span等,并讲解了如何访问主机和设备上的array内存,以及按位运算符的使用。同时,文章还展示了在C和C++中如何使用ArrayFire API。
摘要由CSDN通过智能技术生成


前言

在《玩转 ArrayFire:04 初识 array(一)》中,我们已经了解到 ArrayFire 的一些具体用法,在这一篇中,我们将继续学习 ArrayFire 的更多用法。


六、索引

    像 ArrayFire 中的所有函数一样,索引也可以在 OpenCL/CUDA 设备上并行执行。因此,索引成为 JIT 操作的一部分,并且是使用圆括号而不是方括号来完成的(即作为(0)而不是[0])。要索引 af:: array ,你可以使用以下函数中的一个或一个组合:

  • 整数标量
  • seq( )表示一个线性序列
  • end表示维度的最后一个元素
  • span表示整个维度
  • row(i) 或 col(i) 指定单行 / 列
  • rows(first,last) 或 cols(first,last) 指定行 / 列的跨度

七、访问主机和设备上的 array 内存

     array 中的内存可以使用 host() 和 device() 函数访问。host 函数从设备复制数据,并使其在主机上的 C 风格数组中可用。因此,由开发人员管理主机返回的内存。device 函数返回一个指向设备内存的指针/引用,用于与外部 CUDA/OpenCL 内核的互操作性。由于该内存属于 ArrayFire,程序员不应该试图释放/释放该指针。例如,下面是我们如何与 OpenCL 和 CUDA 交互:

    // Create an array consisting of 3 random numbers
    array a = randu(3, f32);
    // Copy an array on the device to the host:
    float * host_a = a.host<float>();
    // access the host data as a normal array
    printf("host_a[2] = %g\n", host_a[2]);  // last element
    // and free memory using delete:
    delete[] host_a;
    // Get access to the device memory for a CUDA kernel
    float * d_cuda 
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值