【发布时间】:2018-07-16 07:25:10
【问题描述】:
我正在使用第三方 C++ 库在 Julia 中完成一些繁重的工作。在 Julia 方面,数据存储在 Array{Float64, 2} 类型的对象中(这大致类似于二维双精度数组)。我可以使用指向double 的指针将它传递给C++。然而,在 C++ 端,数据存储在一个名为 vector3 的结构中:
typedef struct _vector3
{
double x, y, z;
} vector3;
我的快速而肮脏的方法是一个五步过程:
- 在 C++ 端动态分配结构数组
- 将输入数据从
double*复制到vector3* - 做繁重的工作
- 将输出数据从
vector3*复制到double* - 删除动态分配的数组
复制大量数据是非常低效的。我可以使用一些神秘的技巧来避免将数据从double 复制到struct 并返回吗?我想以某种方式将 double 的一维数组(大小为 3 的倍数)解释为具有 3 个 double 成员的结构的一维数组。
【问题讨论】:
-
我敢打赌,复制 3 个 64 位值会对计算产生边际影响(假设计算并不比仅添加复杂)
-
@PeterJ_01 我总是在复制结构数组,因此我复制了 N * 3 * 64 位,其中 N 可以大于一百万。
-
和他们你用一个做多少操作?如果不是太多 - 在朱莉娅做。
-
之所以使用第三方库是因为在Julia中我有一个O(N^2)复杂度的算法,而第三方库有一个O(N)复杂度的算法。 O(N)算法很复杂,我不打算自己实现。