一个二维数组分块遍历,行列位置不变

2024-07-27 20:49:28 浏览数 (3)

目标数组和分块数组的行列假定可以整除,注意行列可以相等,也可以不相等。

代码语言:txt复制
#include <stdio.h>
 
int main() {
    const int nHostInputXNum = 16;
    const int nHostInputYNum = 16;
    int input[nHostInputXNum][nHostInputYNum] = {0};
    int out[nHostInputXNum][nHostInputYNum] = {0};
    int k = 0;

    const int nComputeXNum = 4;
    const int nComputeYNum = 8;
    int computeArr[nComputeXNum][nComputeYNum] = {0};
     for (int i = 0; i < nHostInputXNum; i  = 1) {
        for (int j = 0; j < nHostInputYNum; j  = 1) {
            input[i][j] = k  ;
        }
     }
    printf("nHostInputXNum=%d nHostInputYNum=%d nComputeXNum=%d nComputeYNum=%dn", nHostInputXNum, nHostInputYNum, nComputeXNum, nComputeYNum);
    printf("input:  n");
     for (int i = 0; i < nHostInputXNum; i  = 1) {
        for (int j = 0; j < nHostInputYNum; j  = 1) {
            printf(" d ", input[i][j]);
        }
        printf("n");
     }
    printf("n");
    for (int i = 0; i < nHostInputXNum; i  = nComputeXNum) {
        for (int j = 0; j < nHostInputYNum; j  = nComputeYNum) {
            int indexX = 0;
            int indexY = 0;
            for (int m = i; m < i   nComputeXNum && m < nHostInputXNum;   m) {
                for (int n = j; n < j   nComputeYNum && n < nHostInputYNum;   n) {
                    out[m][n] = input[m][n];
                    //printf(" [%d][%d]=d  ", m, n, out[m][n]);
                    computeArr[indexX][indexY] = out[m][n];
                    indexY  ;
                }
                //printf("n");
                indexX  ;
                indexY = 0;
            }

            printf("computeArr:  n");
            for (int k = 0; k < nComputeXNum; k  = 1) {
                for (int l = 0; l < nComputeYNum; l  = 1) {
                    printf(" d ", computeArr[k][l]);
                }
                printf("n");
            }
        }
    }
    printf("out:  n");
    for (int i = 0; i < nHostInputXNum; i  = 1) {
        for (int j = 0; j < nHostInputYNum; j  = 1) {
            printf(" d ", out[i][j]);
        }
        printf("n");
    }
    return 0;
}

运行结果如下:

代码语言:txt复制
nHostInputXNum=16 nHostInputYNum=16 nComputeXNum=4 nComputeYNum=8
input:
 0000  0001  0002  0003  0004  0005  0006  0007  0008  0009  0010  0011  0012  0013  0014  0015
 0016  0017  0018  0019  0020  0021  0022  0023  0024  0025  0026  0027  0028  0029  0030  0031
 0032  0033  0034  0035  0036  0037  0038  0039  0040  0041  0042  0043  0044  0045  0046  0047
 0048  0049  0050  0051  0052  0053  0054  0055  0056  0057  0058  0059  0060  0061  0062  0063
 0064  0065  0066  0067  0068  0069  0070  0071  0072  0073  0074  0075  0076  0077  0078  0079
 0080  0081  0082  0083  0084  0085  0086  0087  0088  0089  0090  0091  0092  0093  0094  0095
 0096  0097  0098  0099  0100  0101  0102  0103  0104  0105  0106  0107  0108  0109  0110  0111
 0112  0113  0114  0115  0116  0117  0118  0119  0120  0121  0122  0123  0124  0125  0126  0127
 0128  0129  0130  0131  0132  0133  0134  0135  0136  0137  0138  0139  0140  0141  0142  0143
 0144  0145  0146  0147  0148  0149  0150  0151  0152  0153  0154  0155  0156  0157  0158  0159
 0160  0161  0162  0163  0164  0165  0166  0167  0168  0169  0170  0171  0172  0173  0174  0175
 0176  0177  0178  0179  0180  0181  0182  0183  0184  0185  0186  0187  0188  0189  0190  0191
 0192  0193  0194  0195  0196  0197  0198  0199  0200  0201  0202  0203  0204  0205  0206  0207
 0208  0209  0210  0211  0212  0213  0214  0215  0216  0217  0218  0219  0220  0221  0222  0223
 0224  0225  0226  0227  0228  0229  0230  0231  0232  0233  0234  0235  0236  0237  0238  0239
 0240  0241  0242  0243  0244  0245  0246  0247  0248  0249  0250  0251  0252  0253  0254  0255

computeArr:
 0000  0001  0002  0003  0004  0005  0006  0007
 0016  0017  0018  0019  0020  0021  0022  0023
 0032  0033  0034  0035  0036  0037  0038  0039
 0048  0049  0050  0051  0052  0053  0054  0055
computeArr:
 0008  0009  0010  0011  0012  0013  0014  0015
 0024  0025  0026  0027  0028  0029  0030  0031
 0040  0041  0042  0043  0044  0045  0046  0047
 0056  0057  0058  0059  0060  0061  0062  0063
computeArr:
 0064  0065  0066  0067  0068  0069  0070  0071
 0080  0081  0082  0083  0084  0085  0086  0087
 0096  0097  0098  0099  0100  0101  0102  0103
 0112  0113  0114  0115  0116  0117  0118  0119
computeArr:
 0072  0073  0074  0075  0076  0077  0078  0079
 0088  0089  0090  0091  0092  0093  0094  0095
 0104  0105  0106  0107  0108  0109  0110  0111
 0120  0121  0122  0123  0124  0125  0126  0127
computeArr:
 0128  0129  0130  0131  0132  0133  0134  0135
 0144  0145  0146  0147  0148  0149  0150  0151
 0160  0161  0162  0163  0164  0165  0166  0167
 0176  0177  0178  0179  0180  0181  0182  0183
computeArr:
 0136  0137  0138  0139  0140  0141  0142  0143
 0152  0153  0154  0155  0156  0157  0158  0159
 0168  0169  0170  0171  0172  0173  0174  0175
 0184  0185  0186  0187  0188  0189  0190  0191
computeArr:
 0192  0193  0194  0195  0196  0197  0198  0199
 0208  0209  0210  0211  0212  0213  0214  0215
 0224  0225  0226  0227  0228  0229  0230  0231
 0240  0241  0242  0243  0244  0245  0246  0247
computeArr:
 0200  0201  0202  0203  0204  0205  0206  0207
 0216  0217  0218  0219  0220  0221  0222  0223
 0232  0233  0234  0235  0236  0237  0238  0239
 0248  0249  0250  0251  0252  0253  0254  0255
out:
 0000  0001  0002  0003  0004  0005  0006  0007  0008  0009  0010  0011  0012  0013  0014  0015
 0016  0017  0018  0019  0020  0021  0022  0023  0024  0025  0026  0027  0028  0029  0030  0031
 0032  0033  0034  0035  0036  0037  0038  0039  0040  0041  0042  0043  0044  0045  0046  0047
 0048  0049  0050  0051  0052  0053  0054  0055  0056  0057  0058  0059  0060  0061  0062  0063
 0064  0065  0066  0067  0068  0069  0070  0071  0072  0073  0074  0075  0076  0077  0078  0079
 0080  0081  0082  0083  0084  0085  0086  0087  0088  0089  0090  0091  0092  0093  0094  0095
 0096  0097  0098  0099  0100  0101  0102  0103  0104  0105  0106  0107  0108  0109  0110  0111
 0112  0113  0114  0115  0116  0117  0118  0119  0120  0121  0122  0123  0124  0125  0126  0127
 0128  0129  0130  0131  0132  0133  0134  0135  0136  0137  0138  0139  0140  0141  0142  0143
 0144  0145  0146  0147  0148  0149  0150  0151  0152  0153  0154  0155  0156  0157  0158  0159
 0160  0161  0162  0163  0164  0165  0166  0167  0168  0169  0170  0171  0172  0173  0174  0175
 0176  0177  0178  0179  0180  0181  0182  0183  0184  0185  0186  0187  0188  0189  0190  0191
 0192  0193  0194  0195  0196  0197  0198  0199  0200  0201  0202  0203  0204  0205  0206  0207
 0208  0209  0210  0211  0212  0213  0214  0215  0216  0217  0218  0219  0220  0221  0222  0223
 0224  0225  0226  0227  0228  0229  0230  0231  0232  0233  0234  0235  0236  0237  0238  0239
 0240  0241  0242  0243  0244  0245  0246  0247  0248  0249  0250  0251  0252  0253  0254  0255

1 人点赞