- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如何在 OpenCL 中获取二维的全局 threadId?我知道对于一维,公式是:
int global_id = get_global_id(1) * get_global_size(0) + get_global_id(0);
但是如果我这样分配:
size_t block_size[] = {2,2}
size_t grid_size[] = {35,20}
上述公式失败,仅给出从 0 到 35*20 的索引。索引应从 0 到 35*40*2*2。
您能推荐任何好的文档或著作,让我有直觉来理解所有这些是如何工作的吗?谢谢!
最佳答案
如果您要启动 2D NDRange,则 get_global_id(0) 和 get_global_id(1) 将为您提供 Gx 和 Gy 索引。您还可以使用 get_local_id(0/1) 独立获取本地 ID。
不用自己计算。
您的意思是您要启动一个 2D 线程 block ,但想将该线程映射到一维缓冲区中的某个位置吗?
编辑:阅读您的评论后,我认为需要进行解释。
OpenCL 启动与 get_global_size(0) * get_global_size(1)(即 35 * 20)一样多的内核,因此您将拥有线程
(0 ,0) (0 ,1) ... (0,34)
(1 ,0) (1 ,1) ... (1,34)
.
.
.
(19,0) (19,1) ... (19,34)
本地工作大小只是一种拆分线程总数并将它们分布到可用计算单元的方法。很可能在任何时间点只有 2 * 2 = 4 个线程在运行。
clEnqueueNDRangeKernel文档告诉我们 local_work_size 可以为 null,在这种情况下,实现将确定拆分总工作量的大小。
本地工作大小绝不会增加线程数。
也许这张图片比我能更好地解释它。
请注意,内核启动的总数仍然是 get_global_size(0) * get_global_size(1)。
如果您希望您的一维索引从 0..(35*40*2*2 - 1) 开始,那么启动内核,使 get_global_size(0) * get_global_size(1) 为 35*40*2*2 (也许 70 x 80?)
希望这对您有所帮助。
关于opencl - 在 OpenCl 中获取二维的全局 ThreadId,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16566127/
完整异常如下 12-24 08:59:24.800: WARN/dalvikvm(743): JNI WARNING: threadid=5 using env from threadid=3 12-
我正在寻找一个线程安全的集合来在Java中存储ThreadID(长)。最好的选择是什么?我需要保留添加顺序。 最佳答案 您可以使用任何列表并用同步实现包装它。 示例: List list =
我有这种配对机制的想法,它通过 ThreadID 来识别客户端。当线程被销毁时,客户端的配对也被销毁,其ID被设置为-1。 现在为了让我获得线程 ID,线程当然必须已经运行或启动。 我想知道我是否可以
我经常在 GHCi 中调试或玩耍时碰巧知道实际的 ThreadId数字(例如使用 Debug.Trace ),但这就是我所拥有的。 问题是所有线程API,比如killThread需要 ThreadId
我想了解手机和手机上的软件之间的区别。我在 Droid Incredible 上编码和测试。 content://sms 的内容观察器工作正常,我能够删除 Incredible 上的 threadId
我调用提到的 Windows API。但它返回的线程 ID 与 _beginthreadex 返回的线程 ID 不同。我的代码如下, ThreadTest *_threadTest = new Thr
我有一个简单的应用程序,其中包含一个要单击以开始记录的按钮,基本上我将消息记录到数据库中。该应用程序已设置为将消息记录到数据库中。因此,我尝试在我的机器上运行我的应用程序,但同时使用两种不同的浏览器,
在这里谈论 Java Servlets...我正在努力创建我自己的“每个请求上下文”,我希望将“每个请求上下文”对象与 Thread.currentThread().getId() 值联系起来。 我计
我在 outputTemplate 中有一个 ThreadId,但日志始终将其记录为 1。我有多个应用程序实例同时运行到同一个日志中,因此希望我可以根据 ThreadId 分隔这些实例。 谁能建议如何
如何在 OpenCL 中获取二维的全局 threadId?我知道对于一维,公式是: int global_id = get_global_id(1) * get_global_size(0) + g
我在列表上使用并行流。我想它会使用 WorkJoinPool 来产生多个工作线程,但根据日志,不知何故一直只有一个线程: 14:32:14.561 [http-nio-8080-exec-146] I
表结构: id |发件人 |接收器 |主题 |留言 |线程ID |时间戳|日期 |读取状态 SELECT * FROM mail WHERE sender = 'redphyre' OR receiv
我用两种方法实现了一个并发队列:add(入队)和remove(出队)。 为了使用 2 个线程测试我的实现,我在名为 getRandom() 的方法中生成了 10 (NUMBER_OF_O
我正在为 Android 应用创建自定义日历。它现在的工作方式是从在线 MySQL 数据库中提取事件,将它们传输到 JSONArray 中,然后从那里将它们输入到日历中。它在模拟器上运行良好(如果有点
有没有办法从 ThreadId 获取线程的 ThreadName? (例如,ThreadID,例如 10 或 15 等) 最佳答案 不在托管代码中。您甚至无法获得 Thread 的列表据我所知,当前进
在 Haskell 中,forkIO 创建了一个未绑定(bind)(Haskell)线程,而 forkOS 创建了一个绑定(bind)( native )线程。上一个问题的答案here我曾提到 Has
我有一个 delphi (Win32) Web 应用程序,可以作为 CGI 应用程序、ISAPI 或 Apache DLL 运行。我希望能够生成一个唯一的文件名前缀(对于给定时刻的所有当前请求都是唯一
使用新的 gmail api ( https://developers.google.com/gmail/api/ ),我想搜索具有特定 threadId 的邮件。 我的用例是,我想查找线程上没有附件
使用新的 gmail api ( https://developers.google.com/gmail/api/ ),我想搜索具有特定 threadId 的邮件。 我的用例是,我想查找线程上没有附件
有没有一种简单的方法可以通过 Microsoft.Extensions.Logging 将 ThreadId 和 ProcessId 添加到日志中,而无需编写我自己的 LoggingProvider?
我是一名优秀的程序员,十分优秀!