multithreading - 将数据“按块”写入 OpenCL 缓冲区
问题描述
我正在将一个 CUDA 应用程序移植到 OpenCL,我注意到 CUDA 提供了将数据按块写入其“缓冲区”的功能。我的意思是:
int *vals = new int[N/4];
int *d_vec = nullptr;
cudaMalloc((void**)&d_vec, sizeof(int) * N);
for(int i = 0; i < 4; i++){
cudaMemcpy(d_vec + i*(N/4), vals, sizeof(int) * N/4, cudaMemcpyHostToDevice);
}
上面的代码所做的是将vals
数组(具有d_vec
缓冲区的 1/4)顺序写入d_vec
. 所以我的问题是,是否可以对 OpenCL 做同样的事情?也就是说,分配一个缓冲区并按顺序向其写入值,而不必写入具有完整缓冲区大小的数组?
谢谢!
解决方案
是的,这确实是可能的enqueueWriteBuffer
:
cl_int *vals = new cl_int[N/4];
Buffer d_vec;
d_vec = Buffer(context, CL_MEM_READ_WRITE, N*sizeof(cl_int));
for(int i = 0; i < 4; i++){
queue.enqueueWriteBuffer(d_vec, true, i*(N/4), sizeof(cl_int)*N/4, (void*)vals);
queue.finish();
}
推荐阅读
- r - 当 ggplot 在拆分图表中位置“堆叠”时处理条形大小和总数
- ansible - 如何从 ansible playbook 中的返回值访问“调用”变量?
- node.js - 使用 nock 从 docker 容器发出请求?
- database - DB推荐——便携、并发(多读一写)
- javascript - 已经被 JS 验证的表单。还需要在提交时清除字段
- python-3.x - NumPy np.chararray 到 nd.array
- java - 无法获取 org.gradle.api.internal.artifacts.configurations 类型的配置容器的未知属性“运行时”
- python - 带数组的json
- c# - 我的加载图标错误是 Xamarin Forms 问题还是我的代码隐藏问题
- c# - 尝试使用 json 数组通过 c# 在 sql 中插入数据但仍然出现 Newtonsoft.Json.Linq.JValue 错误?