首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

用并行算法实现一个数组求和?解决思路

2012-04-07 
用并行算法实现一个数组求和?求教各位高手啊,怎么写?[解决办法]简单一点的话(以双核并行执行为例):一个核

用并行算法实现一个数组求和?
求教各位高手啊,怎么写?

[解决办法]
简单一点的话(以双核并行执行为例):
一个核计算数组偶数索引项的和,另一个核计算奇数索引项的和,然后将两者相加。
In core A:

#include <stdio.h>


#define SICA_SYSCR*(volatile unsigned short*)0xffc00104

#define SICB_SYSCR*(volatile unsigned short*)0xffc01104


extern volatile int shared_coreB_start;

extern volatile int exec_complete;

extern volatile int coreB_answer;

extern volatile int array[9];// Why has the length here to be indicated explicitly?


int main(int argc, const char* argv[])
{
SICA_SYSCR &= ~0x20;// Enable core B

register const int n = sizeof(array) / sizeof(array[0]);

shared_coreB_start = n;

int sum = 0;

for(int i=0; i <n; i+=2)
sum += array[i];

while(exec_complete == 0);

printf( "The answer is: %d\n ", sum + coreB_answer);

return 0;
}

In Core B:

extern volatile int shared_coreB_start;

extern volatile int exec_complete;

extern volatile int coreB_answer;

extern volatile int array[];


int main(int argc, const char* argv[])
{
while(shared_coreB_start == 0);

register const int n = shared_coreB_start;

register int sum = 0;

for(int i=1; i <n; i+=2)
sum += array[i];

coreB_answer = sum;

exec_complete = 1;

return 0;
}


Shared memory:

volatile int shared_coreB_start = 0;

volatile int exec_complete = 0;

volatile int coreB_answer = 0;

volatile int array[] = { 10, 20, -5, 6, 8, 9, 17, 22, -3 };


输出:

P1: Breakpoint Hit at <ff600670>

P0: The answer is: 84

P1: Breakpoint Hit at <ff601a2a>

以上基于Blackfin561 DSP平台。结果正确。
这只是一个简单而直观的实现。

热点排行