c++ - CUDA,使用 memset(或 fill 或 ...)将 float 数组设置为 max val possible

标签 c++ cuda

编辑:感谢之前的回答。但实际上我想在 CUDA 中进行,显然 CUDA 没有 Fill 函数。我必须为每个线程填充一次矩阵,所以我想确保我使用的是最快的方法。这是我最好的选择吗?

我想将 float 矩阵设置为可能的最大值(在 float 中)。做这项工作的正确方法是什么?

float *matrix=new float[N*N];

for (int i=0;i<N*N;i++){
        matrix[i*N+j]=999999;
}

提前致谢。

最佳答案

CUDA 中最简单的方法是使用 thrust::fill . Thrust 包含在 CUDA 4.0 及更高版本中,或者您可以 install it如果您使用的是 CUDA 3.2。

#include <thrust/fill.h>
#include <thrust/device_vector.h>
...
thrust::device_vector<float> v(N*N);
thrust::fill(v.begin(), v.end(), std::numeric_limits<float>::max()); // or 999999.f if you prefer

您也可以像这样编写纯 CUDA 代码:

template <typename T>
__global__ void initMatrix(T *matrix, int width, int height, T val) {
    int idx = blockIdx.x * blockDim.x + threadIdx.x;

    for (int i = idx; i < width * height; i += gridDim.x * blockDim.x) {
        matrix[i]=val;
    }
}

int main(void) {
    float *matrix = 0;
    cudaMalloc((void*)&matrix, N*N * sizeof(float));

    int blockSize = 256;
    int numBlocks = (N*N + blockSize - 1) / (N*N);
    initMatrix<<<numBlocks, blockSize>>>(matrix, N, N, 
                                         std::numeric_limits<float>::max()); // or 999999.f if you prefer
}

关于c++ - CUDA,使用 memset(或 fill 或 ...)将 float 数组设置为 max val possible,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6835960/

相关文章:

c++ - TeamCity 中的 Qt 测试输出

c++ - 创建一个不可复制的 STL 迭代器是个好主意吗?

c++ - 下面的数据处理任务适合GPU计算吗?

c++ - 二维多维数组传递给内核,CUDA

cuda - GPU 上的比较和分支有多慢

c++ - 检查使用 SDL2 播放的音乐

c++ - QtWebkit 解析事件调度程序

c++ - 使用函数指针有什么好处?

c - 如果程序由于错误而提前退出,释放动态分配内存的正确方法是什么?

c++ - 使用 nvcc 编译给出 "No such file or directory"