|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
有一个串行的程序,想并行化,但是修改成并行程序后运行失败,下面附上提取出来的串行代码和修改后的并行代码,麻烦大神帮我看一下,在此先表示感谢!
串行代码如下:
- typedef struct{
- BYTE *streamBuf;
- int streamlen;
- int decImageOffset;
- BYTE *decBuf;
- }JParam;
- int fun(int id, JParam *decParam)
- {
-
-
- BYTE *streamBuf = decParam->streamBuf;
- int streamlength = decParam->streamlen;
- int decImageOffset = decParam->decImageOffset;
- BYTE *decBuf = decParam->decBuf;
- Init(streamBuf, streamlength);
-
- f2();
- f1();
- memcpy(coef_1_48 + id * 4096 * 128, coef_1, 4096 * 128 * sizeof(int));
-
- return 0;
- }
- main()
- {
- JParam dp[48];
- for (i = 0; i < 48; i++)
- {
- dp[i].streamBuf = streamsBuf[i] + nStart + 101;
- dp[i].streamlen = streamInfo[i].len - nStart - 101;
- dp[i].decImageOffset = decImageOffset;
- dp[i].decBuf = decBuf + i*decImageOffset;
- fun(i, dp + i);
- }
- }
-
复制代码
转换成并行程序如下:
- #define MAX_THREADS 48
-
- typedef struct
- {
- BYTE *streamBuf;
- int streamlen;
- int decImageOffset;
- BYTE *decBuf;
- }JParam;
-
- typedef struct MY_PARA
- {
- int id;
- JParam *decParam;
- }my_para;
-
-
-
- DWORD WINAPI fun(LPVOID lpParam)
- {
- my_para *pmd = (my_para *)lpParam;
- BYTE *streamBuf = pmd->decParam->streamBuf;
- int streamlength = pmd->decParam->streamlen;
- int decImageOffset = pmd->decParam->decImageOffset;
- BYTE *decBuf = pmd->decParam->decBuf;
- int id = pmd->id;
-
- Init(streamBuf, streamlength);
-
- f2();
- f1();
- memcpy(coef_1_48 + id * 4096 * 128, coef_1, 4096 * 128 * sizeof(int));
-
- return 0;
- }
-
-
- main()
- {
-
- JParam dp[48];
-
- my_para j2para[MAX_THREADS];
- HANDLE hThread[MAX_THREADS];
-
- for (int i = 0; i < 48; i++)
- {
-
- dp[i].streamBuf = streamsBuf[i] + nStart + 101;
- dp[i].streamlen = streamInfo[i].len - nStart - 101;
- dp[i].decImageOffset = decImageOffset;
- dp[i].decBuf = decBuf + i*decImageOffset;
- j2para[i].id = i;
- j2para[i].decParam = (dp + i);
- hThread[i] = CreateThread(NULL,0,fun,&j2para[i],0,NULL);
- if (hThread[i] == NULL)
- ExitProcess(i);
- }
- for (i = 0; i < 48; i++)
- WaitForSingleObject(hThread[i],INFINITE);
- for (i = 0; i < MAX_THREADS; i++)
- CloseHandle(hThread[i]);
- }
复制代码
|
|