- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一直在努力寻找一个允许我将预定义的二维数组传递给内核的实现。
int values[2][3];
我需要将所有数据保存在正确的列和行中。现在我知道 CUDA 接受线性形式的二维数组,但我如何传递一个已经构建的数组?
最佳答案
正如@jarod42 所指出的,对于您所展示的“自动”、“非可变长度”C 样式数组:
int values[2][3];
这样一个数组的存储格式是相同的:
int values[2*3];
这意味着我们可以将该数组视为线性单下标数组(即使它不是):
为了从主机传输到设备:
#define W 3
#define H 2
int values[H][W];
int *d_values;
cudaMalloc(&d_values, H*W*sizeof(int));
cudaMemcpy(d_values, values, H*W*sizeof(int), cudaMemcpyHostToDevice);
为了访问设备代码,使用“模拟”2D 访问:
__global__ void kernel(int *values, int width, ...){
int col = threadIdx.x+blockDim.x*blockIdx.x;
int row = threadIdx.y+blockDim.y*blockIdx.y;
int my_value = values[row*width+col];
...
}
int main(){
...
kernel<<<...>>>(d_values, W, ...);
...
}
但根据您问题中的措辞:
Now I know that CUDA accepts 2D arrays in a linear form but how do I pass an already built array?
看来您可能知道上述方法,我通常将其称为“扁平化”二维数组以线性方式处理它(可能使用“模拟”二维访问)。
一般来说,处理编译时未知宽度的二维数组,同时仍然允许在设备代码中进行双下标访问,是rather involved。 ,我不会推荐它,特别是对于 CUDA 初学者。但实际上您提出的情况并非如此:
a predefined 2D array to a kernel.
int values[2][3];
^
the "width"
我认为这意味着数组的“宽度”(即第二个下标的范围,即最后一个下标)在编译时是已知的。在那种情况下,我们可以利用编译器为我们生成必要的数组索引,使传输和使用过程只比“扁平化”情况稍微复杂一点,同时仍然允许在内核中进行双下标访问:
$ cat t1023.cu
#include <stdio.h>
#define W 3
#define H 2
#define BSIZE 8
typedef int arrtype[W];
__global__ void kernel(arrtype *values, int width, int height){
int col=threadIdx.x+blockDim.x*blockIdx.x;
int row=threadIdx.y+blockDim.y*blockIdx.y;
if ((row < height)&&(col < width)){
int my_val = values[row][col]; //doubly-subscripted access
printf("row: %d, col: %d, value: %d\n", row, col, my_val);
}
}
int main(){
int values[H][W];
for (int i = 0; i < H; i++)
for (int j = 0; j < W; j++)
values[i][j] = i+j;
arrtype *d_values;
cudaMalloc(&d_values, H*W*sizeof(int));
cudaMemcpy(d_values, values, H*W*sizeof(int), cudaMemcpyHostToDevice);
dim3 block(BSIZE,BSIZE);
dim3 grid((W+block.x-1)/block.x, (H+block.y-1)/block.y);
kernel<<<grid,block>>>(d_values, W, H);
cudaDeviceSynchronize();
return 0;
}
$ nvcc -o t1023 t1023.cu
$ ./t1023
row: 0, col: 0, value: 0
row: 0, col: 1, value: 1
row: 0, col: 2, value: 2
row: 1, col: 0, value: 1
row: 1, col: 1, value: 2
row: 1, col: 2, value: 3
$
有关完整的 3D(即三重下标)示例,请参阅 here
关于c++ - 二维多维数组传递给内核,CUDA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34591161/
我的数据库表是: author book repeat ------ ----
众所周知,我们可以简化 SELECT * FROM A WHERE X=1 OR X=4 OR X=9 如下: SELECT * FROM A WHERE X IN (1,4,9) “多维”条件是否有
我在大学时正在编写 Android 应用程序。 用户被询问必须回答的问题。 我通过服务器的 HTTP 请求/响应获取问题。它们以字符串形式传递。该字符串看起来像这样,有两个问题: (requested
我怎样才能在 C++ 中使用 vector 制作这样的表格: 65 A 66 B 67 C 我是用这样的动态二维数组完成的: int** ary = new int*[2]; for (int
运行时: if (data.custaccount.webaddress) { alert('found it'); } 我得到了错误 data.custaccount is undefined
如何按名称对对象数组进行排序。 数组构造数组的例子: object[] o = new object[items.Count+(row-exists)]; int i = 0;
如何创建二维 vector ?我知道在二维数组中,我可以这样表达: a[0][1]=98; a[0][2]=95; a[0][3]=99; a[0][4]=910; a[1][0]=98; a[1][
这是我的第一个问题。 我有很多组数据。它们中的每一个都应该在 DataFrame 中呈现。我试图通过将 DataFrame 作为多维元组的一项来实现这一点,例如: data[0][1].Glucose
有人可以建议改进我对多维 lstm 的实现吗? 它非常慢并且使用大量内存。 class MultiDimentionalLSTMCell(tf.nn.rnn_cell.RNNCell): """ Ad
我已为我在另一个基于 WPF 的应用程序中使用的 Azure 移动服务添加了到 MVC 站点的连接。 我不太熟悉如何通过移动服务在 MVC 中显示数据,找不到任何很好的示例来展示如何在页面上(例如在网
这样写对吗?有没有更好的写法呢?这与我正在使用的真实数据类似,我想确保将对象或数组正确嵌套在 JSON 文件中。 var data = [ { "department": "I
我有一个HashMap当我调用 .toString() 时,它看起来像这样: {somekey=false, anotherKey=someString, thirdKey={nestedKey=he
是否有更 pythonic 的方式来执行以下操作: import numpy as np def diagonal(A): (x,y,y) = A.shape diags = []
我有以下结构: import java.util.LinkedHashMap; ... LinkedHashMap level0 = new LinkedHashMap(); LinkedHashMa
如何访问 Arraylist 中的整数数组(两者均可调整大小)? 到目前为止我有这个代码: List vertices_passed = new ArrayList(); 我想进入vertices_p
我想知道 MiniZinc 语言中是否可以有(多维)数组的数组。 确实,我想解决 worker 的时间表问题。我的目标是检查它们是否每周至少有 1 天可用。每个 worker 都由一个整数索引,我每周
这个问题已经有答案了: how is axis indexed in numpy's array? (5 个回答) 已关闭 3 年前。 我还没有理解 NumPy 中多维数组中的轴之间的区别。你能给我解
我试图 $.post 包含一些表单数据以及数组中的一些其他数据。我可以将数组插入表单数据的其余部分,但我丢失了数组中的键,并且数据仅表示为字符串,我想我要求的是多维数组? 这是当前的响应字符串: ar
我是 numpy 新手,试图理解 here 中的以下示例。我无法理解的输出 >>> palette[image] 当索引数组 a 是多维时,单个索引数组引用 a 的第一个维度。以下示例通过使用调色板将
这个问题已经有答案了: JavaScript associative array to JSON (5 个回答) JSON.stringify doesn't work with normal Jav
我是一名优秀的程序员,十分优秀!