这是一个矩阵乘法代码,其中一个i循环并行化,另一个j循环并行化。对于这两个版本,C数组的值都是正确的(我已经用小矩阵大小进行了测试)。两者之间也没有性能提升。
谁能告诉我这两个版本有什么区别?C无论矩阵的大小如何,数组在两个版本中都准确吗?提前致谢
void mat_multiply ( void )
{
int t;
int i, j, k;
#pragma omp parallel for private(k) // parallelize i loop
for(i = 0; i < dimension; i++)
{
for(j = 0; j < dimension; j++)
{
for(k = 0; k < dimension; k++)
{
C[dimension*i+j] += A[dimension*i+k] * B[dimension*k+j];
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
void mat_multiply ( void )
{
int t;
int i, j, k;
for(i = 0; i …Run Code Online (Sandbox Code Playgroud) 我有一个 ECS 集群,其中有 20 个注册实例。
我有 3 个任务定义来解决一个大数据问题。
任务 1:拆分任务 - 这将启动一个 docker 容器,并且该容器定义有一个入口点来运行名为 HPC-Split 的脚本。该脚本将大数据分成安装的 EFS 中的 5 个部分。该任务的任务数量(计数)为 1。
任务 2:运行任务:这将启动另一个 docker 容器,并且该 docker 容器有一个入口点来运行名为 HPC-script 的脚本,该脚本处理每个拆分部分。为此选择的任务数量为 5,以便并行处理。
任务 3:合并任务:这会启动第三个 docker 容器,该容器有一个入口点来运行名为 HPC-Merge 的脚本,并合并所有部分的不同输出。同样,我们需要为此运行的任务数(计数)为 1。
现在AWS服务限制说:https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service_limits.html 我们可以运行的最大任务(计数)是10个。所以我们目前只能运行10个并行处理。含义是,拆分文件(1 个任务在 1 个实例上运行)、运行进程(任务在 10 个实例上运行)、合并文件(任务在 1 个实例上运行)。
10 的限制限制了我们可以并行处理的级别,我不知道如何绕过。我对这个限制感到惊讶,因为肯定需要在集群中超过 10 个实例上运行长时间运行的进程。
你们能给我一些关于如何绕过这个限制或如何最佳地使用 ECS 并行运行 20 个任务的指示吗?我使用的分散放置是“每个主机一个任务”,因为该进程使用一台主机中的所有核心。
如何使用 ECS 更好地构建这一点?