OpenCL中的popcnt?

     2023-02-16     66

关键词:

【中文标题】OpenCL中的popcnt?【英文标题】:popcnt in OpenCL? 【发布时间】:2011-05-06 22:49:28 【问题描述】:

较新的 NVIDIA GPU 支持 __popc(x) 指令,该指令计算 32 位寄存器中设置的位数。

我是 99% OpenCL 不支持内联汇编器,除非它是供应商内核扩展。

1) AMD 硬件是否支持此功能? (我不知道)。

2) 对于 OS X 和 Linux,如何截取编译成的 NVIDIA 中间语言以便插入?

我想出了如何在 PyOpenCL 中转储 PTX“二进制”,现在我只需要弄清楚如何通过修改重新插入它。

#create the program
self.program = cl.Program(self.ctx, fstr).build()
print self.program.BINARIES[0]

【问题讨论】:

【参考方案1】:

NVIDIA 的 nvcc 支持使用“asm”关键字在 OpenCL 代码中进行内联 PTX 汇编。该符号类似于 GCC 内联汇编。我目前使用这个:

inline uint popcnt(const uint i) 
  uint n;
  asm("popc.b32 %0, %1;" : "=r"(n) : "r" (i));
  return n;

在 Ubuntu Linux 上测试并运行。

如果您想了解更多信息,请查看 NVIDIA 的 oclInlinePTX 代码示例和 PTX ISA 文档。

如果您使用的是 AMD 或 Intel 卡,则无关紧要,因为您可以使用 OpenCL 1.2 中的内置 popcount 指令。

【讨论】:

【参考方案2】:

据我所知,当前的任何 OpenCL 实现中都没有内联汇编,在 OS X 或 Linux 上的 JIT 编译周期中也没有任何方法可以拦截 PTX(或 CAL)。

popc 是 NVIDIA 计算 2.x 硬件中的硬件指令,但在计算 1.x 硬件中它是模拟的。您可以在 CUDA 工具包的 device_functions.h 中找到它的代码。您总是可以在 OpenCL 中将其实现为函数,但会牺牲一些速度。

【讨论】:

GPU 中的并行性 - CUDA / OpenCL

】GPU中的并行性-CUDA/OpenCL【英文标题】:ParallelisminGPU-CUDA/OpenCL【发布时间】:2012-01-2601:41:50【问题描述】:我对CUDA中的并行性或GPU上的OpenCL代码有一般性问题。我使用NVIDIAGTX470。我简要阅读了Cuda编程指南,但没有找到相关答案... 查看详情

OpenCL 中的障碍

】OpenCL中的障碍【英文标题】:BarriersinOpenCL【发布时间】:2011-10-1622:42:28【问题描述】:在OpenCL中,我的理解是可以使用barrier()函数来同步工作组中的线程。我确实(通常)了解它们的用途以及何时使用它们。我也知道工作组... 查看详情

OpenCL 中的私有内存是不是有最大限制?

】OpenCL中的私有内存是不是有最大限制?【英文标题】:IsthereamaximumlimittoprivatememoryinOpenCL?OpenCL中的私有内存是否有最大限制?【发布时间】:2014-02-2800:08:29【问题描述】:OpenCL规范是否对可以使用的私有内存量设置了任何最大... 查看详情

OpenCL 中的全局内存限制

】OpenCL中的全局内存限制【英文标题】:GlobalmemorylimitinOpenCL【发布时间】:2014-03-2516:14:48【问题描述】:首先,我只想说我是OpenCL的新手,我没有很强的计算机科学背景,因为我不是学的。所以,我正在编写一个工具来计算给... 查看详情

OpenCL 中的全局内存是不是连续

】OpenCL中的全局内存是不是连续【英文标题】:IsglobalmemorycontiguousinOpenCLOpenCL中的全局内存是否连续【发布时间】:2016-01-1123:26:37【问题描述】:我是OpenCL新手,正在尝试使用OpenCL中的全局内存进行2D扫描。我在输出数组中有一... 查看详情

OpenCl 中的吞吐量计算

】OpenCl中的吞吐量计算【英文标题】:ThroughputcalculationinOpenCl【发布时间】:2018-07-2820:32:33【问题描述】:我正在尝试计算用我的openCL编写的内核的吞吐量。但我不知道该怎么做,我试图找到一些编译后生成的文件,显示吞吐量... 查看详情

内核中的 OpenCL 分析功能

】内核中的OpenCL分析功能【英文标题】:OpenCLprofilingfunctioninkernel【发布时间】:2021-07-0804:17:23【问题描述】:据我所知,内核可以通过opencl分析API进行分析。所以我只是得到内核级的性能。但是如果内核调用其他函数,我如何... 查看详情

popcnt使用硬件指令和查表法(代码片段)

popcnt是“populationcount”的缩写,该操作一般翻译为“位1计数”,即统计有多少个“为1的位”。例如,十六进制数“FF”,它有8个为1的位,即“popcnt(0xFF)=8”。popcnt主要应用在密码学与通信安全,例如计算汉明重量(Hammingweight)... 查看详情

OpenCL 中的最佳本地/全局工作量

】OpenCL中的最佳本地/全局工作量【英文标题】:OptimalLocal/GlobalworksizesinOpenCL【发布时间】:2013-01-1009:07:48【问题描述】:我想知道如何为OpenCL中的不同设备选择最佳的本地和全局工作大小?AMD、NVIDIA、INTELGPU有什么通用规则吗?... 查看详情

OpenCL (Cuda) 中的元素操作

】OpenCL(Cuda)中的元素操作【英文标题】:ElementwiseoperationsinOpenCL(Cuda)【发布时间】:2011-08-2801:52:00【问题描述】:我为两个矩阵的元素乘法构建了一个内核,但至少在我的配置中,我的OpenCL内核只有在每个矩阵大于2GB时才会更快... 查看详情

POPCNT如何在硬件中实现?

】POPCNT如何在硬件中实现?【英文标题】:HowisPOPCNTimplementedinhardware?【发布时间】:2015-05-0209:15:37【问题描述】:根据http://www.agner.org/optimize/instruction_tables.pdf,POPCNT指令(返回32位或64位寄存器中设置的位数)在现代Intel和AMD处... 查看详情

OpenCL 的精度,hello world 示例中的浮点比较

】OpenCL的精度,helloworld示例中的浮点比较【英文标题】:PrecisionwithOpenCL,floatcomparisoninthehelloworldsample【发布时间】:2012-06-1712:12:30【问题描述】:我要学习OpenCL,想轻松上手。我发现并修改了这个helloworld示例,但没有任何必要... 查看详情

使用通过引用传递的参数(通过指针)优化 OpenCL 函数中的指针访问

】使用通过引用传递的参数(通过指针)优化OpenCL函数中的指针访问【英文标题】:OptimizationofpointeraccessinOpenCLfunctionswithparameterspassedbyreference(viapointers)【发布时间】:2017-10-2423:07:11【问题描述】:我目前正在尝试优化我的OpenCL... 查看详情

OpenCL中的便携式矢量移位/排列?

】OpenCL中的便携式矢量移位/排列?【英文标题】:Portablevectorshift/permutationinOpenCL?【发布时间】:2020-07-1911:54:50【问题描述】:我正在尝试编写一个修剪过的平均内核,它将一组帧(~100)作为输入。我正在考虑使用插入排序(大... 查看详情

在 Linux 中的多个平台上启用 OpenCL?如何处理 ICD 文件?

】在Linux中的多个平台上启用OpenCL?如何处理ICD文件?【英文标题】:EnableOpenCLovermultipleplatformsinLinux?HowtoproceedwithICDfiles?【发布时间】:2016-08-2508:58:48【问题描述】:详情我必须安装哪些驱动程序/软件包才能在多个平台上启用Ope... 查看详情

OpenCL 内核中的组内同步,在本地内存上使用自旋锁

】OpenCL内核中的组内同步,在本地内存上使用自旋锁【英文标题】:Within-groupsynchronizationinOpenCLkernel,whichusespinlockonlocalmemory【发布时间】:2021-11-2811:29:45【问题描述】:我正在尝试在NVIDIAGPU上运行以下代码,但每次都得到不同的... 查看详情

opencl 中的 CL_PLATFORM_NOT_FOUND_KHR

】opencl中的CL_PLATFORM_NOT_FOUND_KHR【英文标题】:CL_PLATFORM_NOT_FOUND_KHRinopencl【发布时间】:2017-04-2602:18:10【问题描述】:这是一个非常奇怪的情况。为什么会报错CL_PLATFORM_NOT_FOUND_KHR当我调用这个函数时:clGetPlatformIDs(0,NULL,&platform... 查看详情

如何生成sse4.2 popcnt机器指令

】如何生成sse4.2popcnt机器指令【英文标题】:Howtogenerateasse4.2popcntmachineinstruction【发布时间】:2011-06-2115:02:43【问题描述】:使用c程序:intmain(intargc,char**argv)return__builtin_popcountll(0xf0f0f0f0f0f0f0f0);和编译器行(gcc4.4-IntelXeonL3426):g... 查看详情