朱莉娅的OpenCLBLAS

朱莉娅的OpenCLBLAS,opencl,julia,blas,julia-gpu,Opencl,Julia,Blas,Julia Gpu,我对julia语言感到非常惊讶,在我当前的项目中实现了很多机器学习算法。尽管julia 0.2在我2011年的MBA课程中取得了一些很好的成绩,在类似的linux硬件上(我想是由于vecLib blas),我肯定会想要更多。我正在购买radeon 5870,并希望将我的矩阵运算推广到那里。我基本上只使用简单的BLAS操作,如matmul、additios和transpositions。我使用julia的紧凑语法A'*B+C,当然希望保留它 有什么方法(或待定的里程碑)可以让这些基本操作在GPU上

我对julia语言感到非常惊讶,在我当前的项目中实现了很多机器学习算法。尽管julia 0.2在我2011年的MBA课程中取得了一些很好的成绩,在类似的linux硬件上(我想是由于vecLib blas),我肯定会想要更多。我正在购买radeon 5870,并希望将我的矩阵运算推广到那里。我基本上只使用简单的BLAS操作,如matmul、additios和transpositions。我使用julia的紧凑语法A'*B+C,当然希望保留它


有什么方法(或待定的里程碑)可以让这些基本操作在GPU上执行吗?我有2500x2500个单精度矩阵,所以我希望有显著的加速。

我不认为现在计划将GPU集成到Julia的核心中。其中一个关键问题是,将数据移动到GPU和从GPU移出会产生大量开销,这使得更换BLAS操作变得不可行


我预计,这方面的大部分进展实际上将来自软件包生态系统,特别是本组织下的软件包。我看到里面有一个CLBLAS软件包。

是的,我看到了CLBLAS。然而,julia的一个主要建议是她简洁的语法。我可以在C或fortran中使用OpenCL,但这并不有趣。像CLBlas这样的库添加了晦涩的语法,这太可怕了。我相信这是可以解决的,但遗憾的是,它还没有发生。再想想,也许a可以隐藏一些语法丑陋的宏。。。但是,在更深层次上替换线性代数方法会更好。当然,其他语言也有其他BLAS库,因此如果Julia可以与这些语言中的任何一种进行互操作,您应该能够访问它们。我不知道Julia,但是如果它有某种运算符重载,你应该能够用你的语法包装外部库。Julia可以使用其他BLAS库,并且有“运算符重载”。但这不是问题所在。问题是你是否可以直接用GPU驱动的BLAS替换默认BLAS——答案是否定的,因为在大多数情况下,将数据移动到GPU或从GPU移出的开销可能会超过任何好处。正确的方法是,在包中定义GPUMatrix类型,提供将矩阵显式转换为GPUMatrix的方法,然后为GPUMatrix定义+*等以使用,例如CLBLAS。如果这还不存在的话,我不认为很难开始。