multithreading - 使用 GPU 进行并行 for 循环的最简单方法

标签 multithreading language-agnostic parallel-processing gpu gpgpu

我目前有一个类似于此的并行 for 循环:

int testValues[16]={5,2,2,10,4,4,2,100,5,2,4,3,29,4,1,52};
parallel_for (1, 100, 1, [&](int i){ 
    int var4;
    int values[16]={-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1};
    /* ...nested for loops */
        for (var4=0; var4<16; var4++) {
            if (values[var4] != testValues[var4]) break;
        }
    /* ...end nested loops */
}

我已经尽可能多地优化,以至于我唯一能做的就是添加更多资源。

我对利用 GPU 帮助并行处理任务很感兴趣。我读过像这样令人尴尬的并行任务可以非常有效地利用现代 GPU。

使用任何语言,将 GPU 用于像这样的简单并行 for 循环的最简单方法是什么?

我对 GPU 架构或原生 GPU 代码一无所知。

最佳答案

正如 Li-aung Yip 在评论中所说,使用 GPU 的最简单方法是使用诸如 Matlab 之类的东西,它支持数组操作并自动(或多或少)将它们移动到 GPU。但是要让它起作用,您需要将代码重写为纯基于矩阵的操作。

否则,大多数 GPU 使用仍然需要在 CUDA 或 OpenCL 中编码(您需要将 OpenCL 与 AMD 卡一起使用)。即使你使用你最喜欢的语言的包装器,在 GPU 上运行的实际代码仍然通常是用 OpenCL 编写的(它看起来有点像 C)。所以这需要大量的学习/努力。您可以首先从 AMD 下载 OpenCL 并阅读文档...

我怀疑这两种选择都需要学习新的想法。我认为,您真正想要的是针对 gpu 的高级语言,但仍然具有传统外观。不幸的是,它们似乎并不存在。我能想到的唯一例子是 theano - 你可以试试。即使在那里,你仍然需要学习 python/numpy,我不确定 theano 实现有多可靠,但它可能是最不痛苦的前进方式(因为它允许使用“传统”方法 - 在很多方面使用矩阵更容易,但有些人似乎发现这在概念上很难理解)。

ps我不清楚gpu是否会帮助您解决问题,顺便说一句。

关于multithreading - 使用 GPU 进行并行 for 循环的最简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10082154/

相关文章:

algorithm - 自动 GOTO 删除算法

sql - Oracle:为什么不使用并行执行?

java - 线程在 2 个队列中

c++ - Visual C++ 中的双重检查锁定和 unique_ptr 静态初始化

c# - Dispatcher.Invoke 的竞争条件

language-agnostic - 如何进入游戏开发(兼职)?

database - 可视化设计数据库结构

Java生产者消费者停止消费者线程

bash - 在 bash 中并行设置变量

C# 从巨大的 url 列表中下载数据