对于排序整数gpuarray是否有更快的MATLAB ismember()?
我有一些代码在各种gpuarray上调用对于排序整数gpuarray是否有更快的MATLAB ismember()?,matlab,gpgpu,binary-search,Matlab,Gpgpu,Binary Search,我有一些代码在各种gpuarray上调用ismember(A,B)一些2^20次A和B,其中A是一个非稀疏矩阵,具有数百万个排序行的整数项,B是一个由数千个不同整数项组成的非稀疏排序向量。如果有帮助的话,通过线性索引A(:)可以以排序的形式出现 对于排序(整数)的非gpu阵列,最快的选项是内置(“'u ismemberhelper',a,b),ismembc速度较慢,两者都比ismember快得多(因为它们忽略了所有检查),无法使用GPuarray操作,并且仍然比GPuarray上的ismemb
ismember(A,B)
一些2^20
次A
和B
,其中A
是一个非稀疏矩阵,具有数百万个排序行的整数项,B
是一个由数千个不同整数项组成的非稀疏排序向量。如果有帮助的话,通过线性索引A(:)
可以以排序的形式出现
对于排序(整数)的非gpu阵列,最快的选项是内置(“'u ismemberhelper',a,b)
,ismembc
速度较慢,两者都比ismember
快得多(因为它们忽略了所有检查),无法使用GPuarray操作,并且仍然比GPuarray上的ismember
慢。也就是说,在速度方面:
ismember on GPU > builtin('_ismemberhelper',a,b) > ismembc() > ismember on CPU
现在,我已经查看了主ismember.m
文件,查看它使用了哪些代码,但我所能找到的相关信息是:
else %(a,b, are some other class like gpuArray, syb object)
lia = false(size(a));
if nargout <= 1
for i=1:numelA
lia(i) = any(a(i)==b(:)); % ANY returns logical.
end
else
for i=1:numelA
found = a(i)==b(:); % FIND returns indices for LOCB.
if any(found)
lia(i) = true;
found = find(found);
locb(i) = found(1);
end
end
end
end
else%(a、b是其他类,如gpuArray、syb对象)
lia=假(尺寸(a));
如果nargout我认为问题2可以通过问题1的这个线程来回答,请在命令窗口键入edit gpuArray/ismember
@CST链接:它只给出(注释掉)函数用法的描述和示例,然后参考ismember
docu@GameOfThrows:看起来不像。@July那么,很可能.m文件只是用于类接口,而实际的实现是在.mex文件中。查看toolboxs`文件夹下的MATLAB安装文件夹(例如C:\Program Files\MATLAB
),然后在那里或子文件夹中查找
gpuArray`。也许你能找到一些提示。你试过哈希表吗?(containers.Map
)?