目标数组和分块数组的行列假定可以整除,注意行列可以相等,也可以不相等。
代码语言: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