bmcv_distance

计算多维空间下多个点与特定一个点的欧式距离,前者坐标存放在连续的device memory中,而特定一个点的坐标通过参数传入。坐标值为float类型。

接口的格式如下:

bm_status_t bmcv_distance(
        bm_handle_t handle,
        bm_device_mem_t input,
        bm_device_mem_t output,
        int dim,
        const float *pnt,
        int len);

输入参数说明:

  • bm_handle_t handle

输入参数。bm_handle 句柄

  • bm_device_mem_t input

输入参数。存放len个点坐标的 device 空间。其大小为len*dim*sizeof(float)。

  • bm_device_mem_t output

输出参数。存放len个距离的 device 空间。其大小为len*sizeof(float)。

  • int dim

输入参数。空间维度大小。

  • const float *pnt

输入参数。特定一个点的坐标,长度为dim。

  • int len

输入参数。待求坐标的数量。

返回值说明:

  • BM_SUCCESS: 成功

  • 其他:失败

示例代码

int L = 1024 * 1024;
int dim = 3;
float pnt[8] = {0};
for (int i = 0; i < dim; ++i)
    pnt[i] = (rand() % 2 ? 1.f : -1.f) * (rand() % 100 + (rand() % 100) * 0.01);
float *XHost = new float[L * dim];
for (int i = 0; i < L * dim; ++i)
    XHost[i] = (rand() % 2 ? 1.f : -1.f) * (rand() % 100 + (rand() % 100) * 0.01);
float *YHost = new float[L];
bm_handle_t handle = nullptr;
bm_dev_request(&handle, 0);
bm_device_mem_t XDev, YDev;
bm_malloc_device_byte(handle, &XDev, L * dim * 4);
bm_malloc_device_byte(handle, &YDev, L * 4);
bm_memcpy_s2d(handle, XDev, XHost);
bmcv_distance(handle,
              XDev,
              YDev,
              dim,
              pnt,
              L));
bm_memcpy_d2s(handle, YHost, YDev));
delete [] XHost;
delete [] YHost;
bm_free_device(handle, XDev);
bm_free_device(handle, YDev);
bm_dev_free(handle);