小编Jam*_*ter的帖子

MPI获得最低价值的处理器

在MPI中,我正在对值进行reduce操作(最小值).这样可以正常工作,但是如何获取最小值的处理器编号并请求该处理器获取更多信息(或使用reduce操作发送附加数据)?

c reduce mpi

15
推荐指数
1
解决办法
5245
查看次数

MPI IO读写块循环矩阵

我有一个学校项目在hpc分布式系统上进行矩阵乘法.

我需要从并行IO系统读取矩阵并使用pblacs在许多计算节点(处理器)上并行执行矩阵乘法.必须使用MPI IO命令读取数据.我知道PBlacs使用块循环分布来执行乘法.

教授没有向我们提供有关MPI IO的更多信息,而且我很难找到相关信息/资源.具体来说,是否有方法以块循环方式从并行io系统中读取矩阵并轻松将其插入到pblacs pdgemm中?

任何指向有用资源的指针都会非常感激.我的时间有点短暂,对这个项目缺乏方向感到沮丧.

c io mpi

6
推荐指数
1
解决办法
2914
查看次数

gcc openmp线程重用

我正在使用gcc的openmp实现来尝试并行化程序.基本上,赋值是添加omp pragma以获得找到友好数字的程序的加速.

给出了原始的串行程序(如下所示,除了我最后添加注释的3行).我们必须首先只是外部循环,然后只是内部循环.外环非常简单,对于给定数量的处理器,我接近理想的加速.对于内循环,我的性能比原始的串行程序差得多.基本上我要做的是减少sum变量.

看看cpu的使用情况,我每个核心只使用了~30%.可能是什么导致了这个?程序是否在每次遇到omp parallel for子句时不断创建新线程?在减少障碍方面,还有更多的开销吗?或者它可能是内存访问问题(例如缓存抖动)?从我读到的大多数openmp线程的实现得到加速重用(例如汇集),所以我不太确定第一个问题是什么是错的.

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include <omp.h>
#define numThread 2
int main(int argc, char* argv[]) {
    int ser[29], end, i, j, a, limit, als;
    als = atoi(argv[1]);
    limit = atoi(argv[2]);
    for (i = 2; i < limit; i++) {
        ser[0] = i;
        for (a = 1; a <= als; a++) {
            ser[a] = 1;
            int prev = ser[a-1];
            if ((prev > i) || (a == 1)) {
                end = sqrt(prev);
                int sum = 0;//added …
Run Code Online (Sandbox Code Playgroud)

parallel-processing gcc for-loop openmp

3
推荐指数
1
解决办法
2129
查看次数

CUDA图像旋转

我在CUDA中实现图像旋转时遇到问题.我有一个非常简单的Rotate函数,其工作方式如下:

__device__ float readPixVal( float* ImgSrc,int ImgWidth,int x,int y)
{
    return (float)ImgSrc[y*ImgWidth+x];
}
__device__ void putPixVal( float* ImgSrc,int ImgWidth,int x,int y, float floatVal)
{
    ImgSrc[y*ImgWidth+x] = floatVal;
}

__global__ void Rotate(float* Source, float* Destination, int sizeX, int sizeY, float deg)
{
    int i = blockIdx.x * blockDim.x + threadIdx.x;// Kernel definition
    int j = blockIdx.y * blockDim.y + threadIdx.y;

    if(i < sizeX && j < sizeY)
    {
        putPixVal(Destination, sizeX, ((float)i)*cos(deg) - ((float)j)*sin(deg), ((float)i)*sin(deg) + ((float)j)*cos(deg)), readPixVal(Source, sizeX, i, j));
    } …
Run Code Online (Sandbox Code Playgroud)

cuda image

2
推荐指数
1
解决办法
4634
查看次数

标签 统计

c ×2

mpi ×2

cuda ×1

for-loop ×1

gcc ×1

image ×1

io ×1

openmp ×1

parallel-processing ×1

reduce ×1