我有兴趣使用F#进行数值计算.如何在F#下使用NVIDIA的CUDA标准访问GPU?
是否有可用于使用OpenCL在GPU上运行的通用FFT库?据我所知,Apple二次OpenCL FFT的示例代码是唯一可用的代码吗?
对于非二次幂变换大小,是否存在任何此类库?如果没有,修改Apple OpenCL样本有多容易或多困难?
我正在研究具有非二次幂变换大小的图像处理应用程序,我将不得不做一大堆FFT,一个批量FFT.
我想更好地理解GPU是如何工作的,我对他们如何处理Direct3D或OpenGL等高级API感到困惑.看到图形卡广告它们支持Direct3D和OpenGL硬件加速是很常见的.这是否意味着他们直接在硬件中处理Direct3D和OpenGL指令?我无法找到明确的证据,或者将它们编译成GPU可以处理的汇编表示.如果有这样的转换谁做到了?软件库(Direct3D/OpenGL),驱动程序还是GPU本身?在同一行,图形管道定义在哪里?在GPU硬件,驱动程序或软件库中?这让我特别困惑于可编程管道的概念.
有没有一个很好的资源,我可以找到有关这些细节的信息?
我是GPU编程世界的新手,我曾尝试阅读维基百科和谷歌搜索,但我还有几个问题:
我下载了一些GPU示例,对于CUDA,有一些.cu文件和一些CPP文件,但所有代码都是正常的C/C++代码只是一些奇怪的函数cudaMemcpyToSymbol,其余的是纯c代码.问题是,.cu代码是用nvcc编译然后用gcc链接的吗?或者它是如何编程的?
如果我编写了一些在GPU上运行的东西,它会在所有GPU上运行吗?或只是CUDA?或者有为CUDA编写的方法和为ATI编写的方法以及为两者编写的方法吗?
我正在开发SBC(其中有Intel I7 3ed或4ed,并且没有外置GPU)我正在使用linux.我想利用英特尔处理器显卡的优势.我想用Cuda或OpenCl来学习开发.我读过一些旧帖子(几年前)(我不确定现在有更好的技术):
要排序的数组大约有一百万个字符串,其中每个字符串的长度最多可达一百万个字符.
我正在寻找GPU的排序算法的任何实现.
我有一个大小约1MB的数据块,我需要构造后缀数组.现在你可以看到如何在真正少量的内存中拥有一百万个字符串.
如果您在波前执行工作项并且存在条件,例如:
if(x){
...
}
else{
....
}
Run Code Online (Sandbox Code Playgroud)
工作项执行什么?是这样的情况,波前的所有工作项都将执行第一个分支(即x == true).如果没有x为false的工作项,则跳过其余的条件?
如果一个工作项采用替代路径会发生什么.我是否告诉所有工作项也将执行备用路径(因此执行两个路径?).为什么会出现这种情况,以及如何解决程序执行问题
在C++ AMP中,内核函数或lambda标记为restrict(amp),这对C++的允许子集(此处列出)施加了严格的限制.CUDA是否允许内核函数中C或C++子集的更多自由?
我正在寻找一个很好的API来用于在GPU上实现算法.我更喜欢相关简单和灵活的东西.我不是在寻找最核心的表演,而是我可以玩的东西.另外我真的更喜欢在Nvidia和ATI卡上都有效的东西......
好的建议,特别是基于经验的建议可能会得到奖励.
目前我们讨论的算法是图像处理,即对非常大的矩阵的相关简单操作......
对我来说,我希望能够将PLINQ表达式带到GPU上,并且还有像System.Threading.Tasks.Parallel这样的API,它可以在GPU上执行...
我们大部分时间处于初步探索阶段......
再次工作跨平台几乎是一个要求......
我已经尝试了很长时间来实现我的代码以在GPU上运行,但是收效甚微。我真的很感谢有人帮助实施。
让我谈谈这个问题。我有一个带有N个节点的图G,并且在每个节点x上都有一个分布mx。我想为所有边缘的每对节点计算分布之间的距离。对于给定的一对(x,y),我使用ot.sinkhorn(mx, my, dNxNy)python POT包中的代码来计算距离。同样,mx,my是节点x和y上大小为Nx和Ny的向量,而dNxNy是Nx x Ny距离矩阵。
现在,我发现此代码有一个GPU实现ot.gpu.sinkhorn(mx, my, dNxNy)。但是,这还不够好,因为我mx,my和dNxNy在每次迭代时都需要上载到GPU,这是一笔巨大的开销。因此,我们的想法是针对GPU的所有边缘对此进行并行化。
代码的实质如下。mx_all是所有发行版
for i,e in enumerate(G.edges):
W[i] = W_comp(mx_all,dist,e)
def W_comp(mx_all, dist, e):
i = e[0]
j = e[1]
Nx = np.array(mx_all[i][1]).flatten()
Ny = np.array(mx_all[j][1]).flatten()
mx = np.array(mx_all[i][0]).flatten()
my = np.array(mx_all[j][0]).flatten()
dNxNy = dist[Nx,:][:,Ny].copy(order='C')
W = ot.sinkhorn2(mx, my, dNxNy, 1)
Run Code Online (Sandbox Code Playgroud)
以下是一个最小的工作示例。请忽略除虚线===符号之间的所有内容。
import ot
import numpy as np
import scipy as sc
def main():
import networkx as nx
#some example graph
G = nx.planted_partition_graph(4, 20, 0.6, …Run Code Online (Sandbox Code Playgroud)